// 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();
 }
 //These are our normal events
 public void SubscribeToEvents(WebSocketHttpServerHandler handler)
 {
     handler.OnClose += HandlerOnOnClose;
     handler.OnText += HandlerOnOnText;
     handler.OnUpgradeCompleted += HandlerOnOnUpgradeCompleted;
     handler.OnData += HandlerOnOnData;
     handler.OnPong += HandlerOnOnPong;
 }
Example #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);
                                           sock.SendMessage(OSDParser.SerializeJsonString(reply.ToOSDMap()));

                                       }

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

        }
 public void UnSubscribeToEvents(WebSocketHttpServerHandler handler)
 {
     handler.OnClose -= HandlerOnOnClose;
     handler.OnText -= HandlerOnOnText;
     handler.OnUpgradeCompleted -= HandlerOnOnUpgradeCompleted;
     handler.OnData -= HandlerOnOnData;
     handler.OnPong -= HandlerOnOnPong;
 }
        // Shutting down..  so shut down all sockets.   
        // Note..    this should be done outside of an ienumerable if you're also hook to the close event.
        public void Close()
        {
            if (!enabled)
                return;
        
            // We convert this to a for loop so we're not in in an IEnumerable when the close 
            //call triggers an event which then removes item from _activeHandlers that we're enumerating
            WebSocketHttpServerHandler[] items = new WebSocketHttpServerHandler[_activeHandlers.Count];
            _activeHandlers.CopyTo(items);

            for (int i = 0; i < items.Length; i++)
            {
                items[i].Close(string.Empty);
                items[i].Dispose();
            }
            _activeHandlers.Clear();
            MainServer.Instance.RemoveWebSocketHandler("/echo");
        }
Example #6
0
 public WSConnectionWrapper(WebSocketHttpServerHandler handler)
 {
     m_handler = handler;
 }
Example #7
0
 private void HandleNewClient(string servicepath, WebSocketHttpServerHandler handler)
 {
     Connection conn = new Connection(new WSConnectionWrapper(handler));
     conn.LoadIDL("http://yellow.cg.uni-saarland.de/home/kiara/idl/interface.kiara");
     conn.LoadIDL("http://yellow.cg.uni-saarland.de/home/kiara/idl/connectServer.kiara");
     conn.RegisterFuncImplementation("omp.interface.implements", "...",
         (Func<string, bool>)InterfaceImplements);
     conn.RegisterFuncImplementation("omp.connect.useCircuitCode", "...",
         (Action<UInt32, string, string>)((code, agentID, sessionID) =>
           ConnectUseCircuitCode(conn, code, agentID, sessionID)));
 }