Пример #1
0
 // 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();
 }
Пример #2
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);
                                           sock.SendMessage(OSDParser.SerializeJsonString(reply.ToOSDMap()));

                                       }

                                   }
                                   catch (Exception)
                                   {
                                       sock.SendMessage(OSDParser.SerializeJsonString(FailedOSDResponse()));
                                   }
                                   finally
                                   {
                                       sock.Close("success");
                                   }
                               };
            
            sock.HandshakeAndUpgrade();

        }