protected virtual void OnReceiveWebSocketData(ISession session, DataFrame data) { HttpToken token = (HttpToken)session.Tag; if (data.Type == DataPacketType.ping) { DataFrame pong = CreateDataFrame(); pong.Type = DataPacketType.pong; pong.FIN = true; session.Send(pong); } else if (data.Type == DataPacketType.connectionClose) { session.Dispose(); } else { if (WebSocketReceive == null) { ActionResult result = ExecuteWS(token.WebSocketRequest, data); } else { var args = new WebSocketReceiveArgs(); args.Frame = data; args.Sesson = session; args.Server = this; args.Request = token.WebSocketRequest; WebSocketReceive?.Invoke(this, args); } } }
static void OnWebsocketReceive(object sender, WebSocketReceiveArgs e) { Console.WriteLine(e.Frame.Body); var result = $"hello {e.Frame.Body} {DateTime.Now}"; var frame = e.Server.CreateDataFrame(result); e.Server.SendToWebSocket(frame, e.Request); }
protected virtual void OnWebSocketRequest(ISession session, DataFrame data) { if (session.Count > Options.WebSocketMaxRPS) { if (EnableLog(LogType.Error)) { mServer.Log(LogType.Error, session, $"{session.RemoteEndPoint} Session message queuing exceeds maximum rps!"); } session.Dispose(); return; } if (EnableLog(LogType.Info)) { mServer.Log(LogType.Info, session, "{0} receive websocket data {1}", session.RemoteEndPoint, data.Type.ToString()); } HttpToken token = (HttpToken)session.Tag; if (data.Type == DataPacketType.ping) { DataFrame pong = CreateDataFrame(); pong.Type = DataPacketType.pong; pong.FIN = true; session.Send(pong); } else if (data.Type == DataPacketType.connectionClose) { session.Dispose(); } else { if (WebSocketReceive == null) { if (data.Type == DataPacketType.text) { ActionResult result = ExecuteWS(token.Request, data); } } else { RequestExecting(); try { var args = new WebSocketReceiveArgs(); args.Frame = data; args.Sesson = session; args.Server = this; args.Request = token.Request; WebSocketReceive?.Invoke(this, args); } finally { RequestExecuted(); } } } }
protected override object GetFrameData(WebSocketReceiveArgs e, DataBuffer <byte> frame) { var token = (JToken)base.GetFrameData(e, frame); SampleMessage msg = new SampleMessage(); msg.Command = token["command"]?.Value <string>(); msg.Data = token["data"]; return(msg); }
private void OnWebSocketReceive(object sender, WebSocketReceiveArgs e) { ActionResult result = mServer.ExecuteWS(e.Request, e.Frame); if (result.Code == 403) { mServer.BaseServer.Log(LogType.Error, e.Sesson, string.Format("{0} error {1}", result.Url, result.Error)); } }
private void OnWebSocketReceive(object sender, WebSocketReceiveArgs e) { var item = Newtonsoft.Json.JsonConvert.DeserializeObject <Command>((string)e.Frame.Body); if (item.Type == "Login") { e.Sesson.Name = item.Name; } var login = mServer.CreateDataFrame(item); mServer.SendDataFrame(login); }
protected virtual void OnWebSocketRequest(ISession session, DataFrame data) { System.Threading.Interlocked.Increment(ref mCurrentWebSocketRequests); try { if (EnableLog(LogType.Info)) { mServer.Log(LogType.Info, session, "{0} receive websocket data {1}", session.RemoteEndPoint, data.Type.ToString()); } HttpToken token = (HttpToken)session.Tag; if (data.Type == DataPacketType.ping) { DataFrame pong = CreateDataFrame(); pong.Type = DataPacketType.pong; pong.FIN = true; session.Send(pong); } else if (data.Type == DataPacketType.connectionClose) { session.Dispose(); } else { if (WebSocketReceive == null) { if (data.Type == DataPacketType.text) { ActionResult result = ExecuteWS(token.Request, data); } } else { var args = new WebSocketReceiveArgs(); args.Frame = data; args.Sesson = session; args.Server = this; args.Request = token.Request; WebSocketReceive?.Invoke(this, args); } } } finally { System.Threading.Interlocked.Decrement(ref mCurrentWebSocketRequests); } }
public void Execute(Gateway gateway, WebSocketReceiveArgs e) { try { var ip = e.Request.RemoteIPAddress; if (gateway.HttpServer.EnableLog(LogType.Info)) { gateway.HttpServer.Log(LogType.Info, $"Gateway websocket {e.Request.ID} {ip} {e.Request.Method} {e.Request.Url} receive"); } var item = GetRouteAgent(gateway, e.Request, e.Frame); if (item == null) { if (gateway.HttpServer.EnableLog(LogType.Info)) { gateway.HttpServer.Log(LogType.Info, $"Gateway websocket {e.Request.ID} {e.Request.RemoteIPAddress} {e.Request.Method} {e.Request.Url} request cluster server unavailable"); } gateway.RequestIncrementCompleted(e.Request, Gateway.CLUSTER_SERVER_UNAVAILABLE, 1, null); var frame = e.Server.CreateDataFrame(new { Code = Gateway.WEBSOCKET_INNER_ERROR, Error = $"Gateway cluster server unavailable" }); frame.Send(e.Request.Session); } else { if (gateway.HttpServer.EnableLog(LogType.Info)) { gateway.HttpServer.Log(LogType.Info, $"Gateway websocket {e.Request.ID} {e.Request.RemoteIPAddress} {e.Request.Method} {e.Request.Url} {item.UrlRoute.Url}'s route executing"); } item.ExecuteWS(e.Request, e.Frame); } } catch (Exception e_) { if (gateway.HttpServer.EnableLog(BeetleX.EventArgs.LogType.Error)) { gateway.HttpServer.Log(BeetleX.EventArgs.LogType.Error, $"Gateway websocket {e.Request.ID} {e.Request.RemoteIPAddress} {e.Request.Method} {e.Request.BaseUrl} process error {e_.Message}@{e_.StackTrace}"); } gateway.RequestIncrementCompleted(e.Request, Gateway.WEBSOCKET_INNER_ERROR, 1); var frame = e.Server.CreateDataFrame(new { Code = Gateway.WEBSOCKET_INNER_ERROR, Error = $"Process error {e_.Message}" }); frame.Send(e.Request.Session); } }
protected virtual void OnWebsocketReceive(object sender, WebSocketReceiveArgs e) { WSMessagesBus.Execute(this, e); }