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