Websocket server problem
Posted: Sun Sep 29, 2013 9:50 am
				
				Hi and sorry my bad english
I want create websocket server. First i need to handshake width client, this is ok, all handshake messages go through and is understandable but real messages after handshake from client are senseless. Weird also that every time server get different messages although client send same message all time.
			I want create websocket server. First i need to handshake width client, this is ok, all handshake messages go through and is understandable but real messages after handshake from client are senseless. Weird also that every time server get different messages although client send same message all time.
Code: Select all
    handshake.l
    Port.l = 800
    vastus.s
    headeririda.s
    vastusvoti.s 
    If InitNetwork() = 0
      MessageRequester("Error", "Can't initialize the network !", 0)
      End
    EndIf
    Procedure.s SecWebsocketAccept(SecWebSocketKey.s)
      heex.s
      sheex.s
      SpecifcationGUID.s = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
      FullWebSocketKey.s = SecWebSocketKey + SpecifcationGUID
      *Buffer = AllocateMemory(Len(FullWebSocketKey))
      PokeS(*Buffer, FullWebSocketKey)
      KeyHash.s = SHA1Fingerprint(*Buffer, MemorySize(*Buffer))
      For i = 1 To Len(KeyHash) Step 2
        heex.s = Mid(KeyHash, i,2)
        sheex = sheex + Chr(Val("$"+heex))
      Next
      SecWebsocketAccept.s = Space(200)
      Base64Encoder(@sheex, StringByteLength(sheex), @SecWebsocketAccept, 200)
      ProcedureReturn  SecWebsocketAccept
     
    EndProcedure
    *Buffer = AllocateMemory(10000)
    If CreateNetworkServer(0, Port)
      Debug "Server created Port "+Str(Port)
     
      Repeat
         
        SEvent = NetworkServerEvent()
        If SEvent
          ClientID = EventClient()
          Select SEvent
         
            Case #PB_NetworkEvent_Connect
              Debug "A new client has connected !"
             
            Case #PB_NetworkEvent_Data
              FillMemory(*Buffer, 10000)
              bytesidkokku.l = ReceiveNetworkData(ClientID, *Buffer, 1000)
              If handshake = 0
                vastus = (PeekS(*Buffer,bytesidkokku))
                For i = 1 To CountString(vastus, Chr(13) + Chr(10))
                  headeririda = StringField(vastus,i,Chr(13) + Chr(10))
                  headeririda = RemoveString(headeririda, Chr(13))
                  headeririda = RemoveString(headeririda, Chr(10))
                  If Left(headeririda,19) = "Sec-WebSocket-Key: "
                    key.s = Right(headeririda, Len(headeririda) - 19)
                  EndIf
                  vastusvoti = SecWebsocketAccept(key)
                Next
                vastus = "HTTP/1.1 101 Switching Protocols" + Chr(13) + Chr(10)
                vastus = vastus + "Upgrade: WebSocket"+ Chr(13) + Chr(10)
                vastus = vastus + "Connection: Upgrade"+ Chr(13) + Chr(10)
                vastus = vastus + "Sec-WebSocket-Accept: " + vastusvoti + Chr(13) + Chr(10)+ Chr(13) + Chr(10)
                SendNetworkString(ClientID, vastus)
                handshake = 1
              Else
                vastus.s = (PeekS(*Buffer,bytesidkokku))
                Debug vastus
              EndIf
             
            Case #PB_NetworkEvent_Disconnect
              Debug "Client "+Str(ClientID)+" has closed the connection..."
              Quit = 1
       
          EndSelect
        EndIf
       
      Until Quit = 1
     
      CloseNetworkServer(0)
    Else
      MessageRequester("Error", "Can't create the server (port in use ?).", 0)
    EndIf
    End