Page 1 of 1

Clarification to documentation

Posted: Thu Oct 13, 2011 3:12 am
by RichAlgeni
At what point do the variables NetworkServerEvent() and EventClient() get updated, after they are set? I believe it is after ReceiveNetworkData or ReceiveNetworkFile are called. This is important for those of us who use threads with sockets.

To handle this correctly, you must call ReceiveNetworkData or ReceiveNetworkFile prior to creating a thread to send a response. If you try to pass EventClient() to the thread to call ReceiveNetworkData or ReceiveNetworkFile, you will encounter some strange results.

Consider, if you will, the following code from the documentation, with two additional lines:

Code: Select all

  Repeat      
    SEvent = NetworkServerEvent()  
    If SEvent    
      ClientID = EventClient()
  
      Select SEvent      
        Case #PB_NetworkEvent_Connect
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case #PB_NetworkEvent_Data
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, *Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(*Buffer), 0)
; updated documentation next line
          MessageRequester("Info", "'NetworkServerEvent()' and 'EventClient()' have been updated", 0)
  
        Case #PB_NetworkEvent_File
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
; updated documentation next line
          MessageRequester("Info", "'NetworkServerEvent()' and 'EventClient()' have been updated", 0)
  
        Case #PB_NetworkEvent_Disconnect
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connection...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1