// This gets called by BaseHttpServer and gives us an opportunity to set things on the WebSocket handler before we turn it on
 public void WebSocketHandlerCallback(string path, WebSocketHttpServerHandler handler)
 {
     SubscribeToEvents(handler);
     handler.SetChunksize(8192);
     handler.NoDelay_TCP_Nagle = true;
     handler.HandshakeAndUpgrade();
 }
 public void WebSocketHandler(string method, WebSocketHttpServerHandler handler)
 {
     m_Handler                     = handler;
     m_Handler.OnClose            += Handler_OnClose;
     m_Handler.OnText             += Handler_OnText;
     m_Handler.OnUpgradeCompleted += Handler_OnUpgradeCompleted;
     m_Handler.OnData             += Handler_OnData;
     m_Handler.OnPing             += Handler_OnPing;
     m_Handler.OnPong             += Handler_OnPong;
     m_Handler.SetChunksize(8192);
     m_Handler.NoDelay_TCP_Nagle = true;
     m_Handler.HandshakeAndUpgrade();
 }
Esempio n. 3
0
        public void HandleWebSocketLoginEvents(string path, WebSocketHttpServerHandler sock)
        {
            sock.MaxPayloadSize    = 16384; //16 kb payload
            sock.InitialMsgTimeout = 5000;  //5 second first message to trigger at least one of these events
            sock.NoDelay_TCP_Nagle = true;
            sock.OnData           += delegate(object sender, WebsocketDataEventArgs data) { sock.Close("fail"); };
            sock.OnPing           += delegate(object sender, PingEventArgs pingdata) { sock.Close("fail"); };
            sock.OnPong           += delegate(object sender, PongEventArgs pongdata) { sock.Close("fail"); };
            sock.OnText           += delegate(object sender, WebsocketTextEventArgs text)
            {
                OSD request = null;
                try
                {
                    request = OSDParser.DeserializeJson(text.Data);
                    if (!(request is OSDMap))
                    {
                        sock.SendMessage(OSDParser.SerializeJsonString(FailedOSDResponse()));
                    }
                    else
                    {
                        OSDMap     req      = request as OSDMap;
                        string     first    = req["firstname"].AsString();
                        string     last     = req["lastname"].AsString();
                        string     passwd   = req["passwd"].AsString();
                        string     start    = req["startlocation"].AsString();
                        string     version  = req["version"].AsString();
                        string     channel  = req["channel"].AsString();
                        string     mac      = req["mac"].AsString();
                        string     id0      = req["id0"].AsString();
                        UUID       scope    = UUID.Zero;
                        IPEndPoint endPoint =
                            (sender as WebSocketHttpServerHandler).GetRemoteIPEndpoint();
                        LoginResponse reply = null;
                        reply = m_LocalService.Login(first, last, passwd, start, scope, version,
                                                     channel, mac, id0, endPoint, false);
                        sock.SendMessage(OSDParser.SerializeJsonString(reply.ToOSDMap()));
                    }
                }
                catch (Exception)
                {
                    sock.SendMessage(OSDParser.SerializeJsonString(FailedOSDResponse()));
                }
                finally
                {
                    sock.Close("success");
                }
            };

            sock.HandshakeAndUpgrade();
        }