I used this as the basis of my server.
Code: Select all
Enumeration
#Window_0
EndEnumeration
Enumeration
#String_INPUT
#Button_SEND
#Text_1
#Text_SERVADDRESS
#Listview_TEXT
#Listview_ACTIVITY
#Server
#Font1
EndEnumeration
;- DATABASE CRAP
; I use a DBASE in my server
; Cut out for simplicity
Declare AddConnection(Driver.s,ConnectString.s)
Declare RemoveConnection(Driver.s,DSN.s)
Structure VisualDesignerGadgets
Gadget.l
EventFunction.l
EndStructure
Global ClientID
Global NewList EventProcedures.VisualDesignerGadgets()
Global FontID1
FontID1 = LoadFont(#Font1, "Courier", 9)
Global String$
Global buffet
Global *buffer = AllocateMemory(2000)
Declare ClearMemory(*memory.b, length.l)
Procedure getnumb()
String$ = ""
numb = Random(1200)+1
String$ = Str(numb)
SendNetworkString(ClientID, String$)
AddGadgetItem(#Listview_ACTIVITY,-1,"SENT: "+String$)
ClearMemory(*buffer,2000)
EndProcedure
Procedure sendfile()
Filename$ = "menu.pref"
Result = SendNetworkFile(ClientID, FileName$)
EndProcedure
Procedure ClearMemory(*memory.b, length.l) ; from tinman
fillmemory_(*memory.b , length.l , 0)
EndProcedure
Procedure String_INPUT_Event(Window, Event, Gadget, Type)
Debug "#String_INPUT"
EndProcedure
Procedure Button_SEND_Event(Window, Event, Gadget, Type)
Debug "#Button_SEND"
String$ = GetGadgetText(#String_INPUT) ; to enter something to send
SendNetworkData(ClientID, @String$, Len(String$))
SetGadgetText(#String_INPUT, "") ; clear the text from memory
AddGadgetItem(#Listview_TEXT, -1,"YOU: "+String$) ; throw the text in the window
String$ = ""
SetActiveGadget(#String_INPUT) ; reset the input string
ClearMemory(*buffer,2000)
EndProcedure
Procedure Text_1_Event(Window, Event, Gadget, Type)
Debug "#Text_1"
EndProcedure
Procedure Text_SERVADDRESS_Event(Window, Event, Gadget, Type)
Debug "#Text_SERVADDRESS"
EndProcedure
Procedure Listview_TEXT_Event(Window, Event, Gadget, Type)
Debug "#Listview_TEXT"
EndProcedure
Procedure Listview_ACTIVITY_Event(Window, Event, Gadget, Type)
Debug "#Listview_ACTIVITY"
EndProcedure
Procedure RegisterGadgetEvent(Gadget, *Function)
If IsGadget(Gadget)
AddElement(EventProcedures())
EventProcedures()\Gadget = Gadget
EventProcedures()\EventFunction = *Function
EndIf
EndProcedure
Procedure CallEventFunction(Window, Event, Gadget, Type)
ForEach EventProcedures()
If EventProcedures()\Gadget = Gadget
CallFunctionFast(EventProcedures()\EventFunction, Window, Event, Gadget, Type)
LastElement(EventProcedures())
EndIf
Next
EndProcedure
Procedure Open_Window_0()
If OpenWindow(#Window_0, 99, 332, 510, 380, "SERVER", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
If CreateGadgetList(WindowID(#Window_0))
ListViewGadget(#Listview_ACTIVITY, 324, 42, 174, 246) ; what happens on outside
SetGadgetFont(#Listview_ACTIVITY, FontID1)
RegisterGadgetEvent(#Listview_ACTIVITY, @Listview_ACTIVITY_Event())
ListViewGadget(#Listview_TEXT, 6, 42, 312, 246) ; what happens internally inside
RegisterGadgetEvent(#Listview_TEXT, @Listview_TEXT_Event())
TextGadget(#Text_SERVADDRESS, 6, 12, 120, 18, "0.0.0.0", #PB_Text_Center) ; server address
RegisterGadgetEvent(#Text_SERVADDRESS, @Text_SERVADDRESS_Event())
TextGadget(#Text_1, 132, 12, 132, 18, "SERVER ADDRESS")
RegisterGadgetEvent(#Text_1, @Text_1_Event())
ButtonGadget(#Button_SEND, 6, 336, 312, 36, "SEND") ; send out from server
RegisterGadgetEvent(#Button_SEND, @Button_SEND_Event())
StringGadget(#String_INPUT, 6, 294, 312, 42, "") ; what we send from server
RegisterGadgetEvent(#String_INPUT, @String_INPUT_Event())
EndIf
EndIf
EndProcedure
InitNetwork()
If ExamineIPAddresses()
IP.l = NextIPAddress()
EndIf
*buffer = AllocateMemory(2000) ; you might want to increase this size here
CreateNetworkServer(#Server, 6654) ; You can easily change the port
Open_Window_0()
SetActiveGadget(#String_INPUT) ; reset the input string
AddGadgetItem(#Listview_ACTIVITY,-1,"Server Online") ; Listening on IP (" + IPString(IP) + ")")
AddGadgetItem(#Listview_ACTIVITY,-1,"IP: (" + IPString(IP) + ")")
SetGadgetText(#Text_SERVADDRESS, ""+IPString(IP))
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()
Type = EventType()
Window = EventWindow()
Select Event
Case #PB_Event_Gadget
CallEventFunction(Window, Event, Gadget, Type)
EndSelect
If NetworkServerEvent() = 1 ; someone connected to us
AddGadgetItem(#Listview_ACTIVITY,-1,"A new connection")
ClientID.l = EventClient()
IP = GetClientIP(ClientID)
Cl$ = Str(IP)
AddGadgetItem(#Listview_ACTIVITY,-1,"CLIENT: "+Cl$)
EndIf
If NetworkServerEvent() = 2 ; SOMETHING CAME IN TO THE SERVER
ClearMemory(*buffer,2000)
length.l = ReceiveNetworkData(ClientID, *buffer, 2000)
String$ = PeekS(*buffer, 2000)
AddGadgetItem(#Listview_TEXT, -1,"THEM: "+String$)
If String$ = "GETN"
String$ = "0"
getnumb()
ClearMemory(*buffer,2000)
EndIf
; If String$ = "GETFIL"
; sendfile()
; ClearMemory(*buffer,2000)
; EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
You should be able to monkey that around to do what you want.