WaitNetwork

Share your advanced PureBasic knowledge/code with the community.
citystate
Enthusiast
Enthusiast
Posts: 638
Joined: Sun Feb 12, 2006 10:06 pm

WaitNetwork

Post by citystate »

Thought I'd share a code snippet I've been finding useful

WaitNetwork.pbi

Code: Select all

Procedure WaitNetworkData(conn, length=500)
  *buff=AllocateMemory(length)
  *overbuff=AllocateMemory(length)
  While ne=0:ne=NetworkClientEvent(conn):Delay(1):Wend
  Select ne
  Case #PB_NETWORKEVENT_DATA
    ln=ReceiveNetworkData(conn,*buff,length)
    If ln=length
      Repeat:Delay(1):Until ReceiveNetworkData(conn,*overbuff,length)<length
    EndIf
  Default
    ;
  EndSelect
  FreeMemory(*overbuff)
  ProcedureReturn *buff
EndProcedure

Macro Pk(a,b)
  a=Peek#b#(*loc)
  FreeMemory(*loc)
EndMacro
  
Macro WaitNetworkByte(conn,var)
  *loc=WaitNetworkData(conn,2)
  Pk(var,B)
EndMacro  

Macro WaitNetworkChar(conn,var)
  *loc=WaitNetworkData(conn,SizeOf(Character)+1)
  Pk(var,C)
EndMacro  

Macro WaitNetworkDouble(conn,var)
  *loc=WaitNetworkData(conn,9)
  Pk(var,D)
EndMacro  

Macro WaitNetworkLong(conn,var)
  *loc=WaitNetworkData(conn,5)
  Pk(var,L)
EndMacro  

Macro WaitNetworkWord(conn,var)
  *loc=WaitNetworkData(conn,3)
  Pk(var,W)
EndMacro  

Macro WaitNetworkFloat(conn,var)
  *loc=WaitNetworkData(conn,5)
  Pk(var,F)
EndMacro  

Macro WaitNetworkQuad(conn,var)
  *loc=WaitNetworkData(conn,9)
  Pk(var,Q)
EndMacro  

Macro WaitNetworkString(conn,car,length=499)
  *loc=WaitNetworkData(conn,length+1)
  Pk(var,S)
EndMacro  
useful when you are expecting a particular response from the server

Server Code

Code: Select all

InitNetwork()
conn=CreateNetworkServer(#PB_Any,12345,#PB_Network_TCP)
If conn=0:MessageRequester("Network Error","Unable to Create Server!"):End:EndIf
OpenConsole()
PrintN("Server Started - ESC to Exit")
*buff = AllocateMemory(101)
PokeS(*buff,"S"); prefix all sent data with 'S'
Repeat
  Delay(1)
  ne=NetworkServerEvent()
  if ne
    cid = EventClient()
    If ne=#PB_NetworkEvent_Connect:PrintN("client "+str(cid)+" connected"):EndIf
    If ne=#PB_NetworkEvent_Data
      ln=ReceiveNetworkData(cid,*buff+1,100)
      SendNetworkData(cid,*buff,ln+1)
      PrintN("client "+str(cid)+" sent data - echoing")
    EndIf
    If ne=#PB_NetworkEvent_Disconnect:PrintN("client "+str(cid)+" disconnected"):EndIf
  EndIf
Until Inkey()=Chr(27)
FreeMemory(*buff)
End
Client Code

Code: Select all

IncludeFile "WaitNetwork.pbi"
InitNetwork()
conn=OpenNetworkConnection("127.0.0.1",12345,#PB_Network_TCP)
If conn=0:MessageRequester("Network Error","Unable to Create Server!"):End:EndIf
OpenConsole()
*messagedata=AllocateMemory(8)
PokeS(*messagedata,"12345678")
PrintN("Connected to Server")

SendNetworkString(conn,"Hello")
Print("Sent String 'Hello'... ")
WaitNetworkString(conn,response$)
PrintN("Received String '"+response$+"');should return 'SHello'

SendNetworkData(conn,*messagedata,1)
Print("Sent Byte '"+Str(PeekB(*messagedata))+"'... ")
WaitNetworkByte(conn,byt.b)
PrintN("Received Byte '"+Str(byt)+"');should return 83 - Chr("S")

SendNetworkData(conn,*messagedata,2)
Print("Sent Word '"+Str(PeekW(*messagedata))+"'... ")
WaitNetworkWord(conn,wrd.w)
PrintN("Received Word '"+Str(wrd)+"');should return 21297

SendNetworkData(conn,*messagedata,4)
Print("Sent Long '"+Str(PeekL(*messagedata))+"'... ")
WaitNetworkLong(conn,lng.l)
PrintN("Received Long '"+Str(lng)+"');should return 1395733043

PrintN("")
PrintN("Press Enter to Exit")
Input()
Last edited by citystate on Fri Aug 21, 2009 1:54 am, edited 1 time in total.
there is no sig, only zuul (and the following disclaimer)

WARNING: may be talking out of his hat
SFSxOI
Addict
Addict
Posts: 2970
Joined: Sat Dec 31, 2005 5:24 pm
Location: Where ya would never look.....

Post by SFSxOI »

any examples of use?
citystate
Enthusiast
Enthusiast
Posts: 638
Joined: Sun Feb 12, 2006 10:06 pm

Post by citystate »

updated the first post with sample code. unfortunately, I haven't had an opportunity to test it - but it should work :P
there is no sig, only zuul (and the following disclaimer)

WARNING: may be talking out of his hat
Post Reply