コード例 #1
0
ファイル: HttpApiServer.cs プロジェクト: wuxuejie/FastHttpApi
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: HttpApiServer.cs プロジェクト: carterHe/FastHttpApi
        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();
                    }
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: HttpApiServer.cs プロジェクト: Xusp/FastHttpApi
 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);
     }
 }
コード例 #8
0
 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);
     }
 }
コード例 #9
0
 protected virtual void OnWebsocketReceive(object sender, WebSocketReceiveArgs e)
 {
     WSMessagesBus.Execute(this, e);
 }