public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment commandInfo) { var frame = commandInfo as WebSocketDataFrame; if (!CheckFrame(frame)) { session.Close(); return; } if (frame.FIN) { if (session.Frames.Count > 0) { session.Close(); return; } var data = GetWebSocketData(frame); session.AppServer.OnNewDataReceived(session, data); } else { session.Frames.Add(frame); } }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { var frame = requestInfo as WebSocketDataFrame; if (!CheckFrame(frame)) { session.Close(); return; } if (frame.FIN) { if (session.Frames.Count > 0) { session.Close(); return; } var text = GetWebSocketText(frame); session.AppServer.OnNewMessageReceived(session, text); } else { session.Frames.Add(frame); } }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { var frame = requestInfo as WebSocketDataFrame; if (!CheckControlFrame(frame)) { session.Close(); return; } //the close handshake started from server side, now received a handshake response if (session.InClosing) { //Close the underlying socket directly session.Close(CloseReason.ClientClosing); return; } var data = GetWebSocketData(frame); var closeStatusCode = session.ProtocolProcessor.CloseStatusClode.NormalClosure; //var reasonText = string.Empty; if (data != null && data.Length > 0) { if (data.Length == 1) { session.Close(CloseReason.ProtocolError); return; } else { var code = data[0] * 256 + data[1]; if (!session.ProtocolProcessor.IsValidCloseCode(code)) { session.Close(CloseReason.ProtocolError); return; } closeStatusCode = code; //if (data.Length > 2) //{ // reasonText = this.Utf8Encoding.GetString(data, 2, data.Length - 2); //} } } //Send handshake response session.SendCloseHandshakeResponse(closeStatusCode); //Don't include close reason the close handshake response for now //session.SendCloseHandshakeResponse(closeStatusCode, reasonText); //After both sending and receiving a Close message, the server MUST close the underlying TCP connection immediately session.Close(CloseReason.ClientClosing); }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { //Do nothing, last active time has been updated automatically var frame = requestInfo as WebSocketDataFrame; if (!CheckControlFrame(frame)) { session.Close(); return; } }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { var frame = requestInfo as WebSocketDataFrame; if (!CheckControlFrame(frame)) { session.Close(); return; } var data = GetWebSocketData(frame); session.ProtocolProcessor.SendPong(session, data); }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { var frame = requestInfo as WebSocketDataFrame; if (!CheckFrame(frame)) { session.Close(); return; } session.Frames.Add(frame); if (!frame.FIN) { return; } var firstFrame = session.Frames[0]; if (firstFrame.OpCode == OpCode.Text) { var text = GetWebSocketText(session.Frames); session.Frames.Clear(); session.AppServer.OnNewMessageReceived(session, text); } else if (firstFrame.OpCode == OpCode.Binary) { var data = GetWebSocketData(session.Frames); session.Frames.Clear(); session.AppServer.OnNewDataReceived(session, data); } else { //http://tools.ietf.org/html/rfc6455#section-5.5 //All control frames MUST have a payload length of 125 bytes or less and MUST NOT be fragmented. session.Close(); } }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { session.Handshaked = true; session.AppServer.FireOnNewSessionConnected(session); }
/// <summary> /// Handle Unknown request /// </summary> /// <param name="content">The package content.</param> protected override void HandleUnknownRequest(IWebSocketFragment content) { Logger.Debug($"Manager::HandleUnknownRequest - Unknown package. Content: {content}"); }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { session.OnHandshakeSuccess(); }
protected override void HandleUnknownRequest(IWebSocketFragment requestInfo) { base.HandleUnknownRequest(requestInfo); }
/// <summary> /// Executes the command. /// </summary> /// <param name="session">The session.</param> /// <param name="requestInfo">The request info.</param> public override void ExecuteCommand(TWebSocketSession session, IWebSocketFragment requestInfo) { var plainFragment = requestInfo as PlainFragment; session.AppServer.OnNewMessageReceived(session, plainFragment.Message); }