// 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; }
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"); }
public WSConnectionWrapper(WebSocketHttpServerHandler handler) { m_handler = handler; }
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))); }