コード例 #1
0
ファイル: UrlRouteAgent.cs プロジェクト: xier2012/Bumblebee
        public void ExecuteWS(HttpRequest request, BeetleX.FastHttpApi.WebSockets.DataFrame dataFrame)
        {
            if (request.Server.EnableLog(LogType.Debug))
            {
                request.Server.Log(LogType.Debug, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s get urlroute agent!");
            }
            var agent = UrlRoute.GetServerAgent(request);

            if (agent == null)
            {
                if (request.Server.EnableLog(LogType.Info))
                {
                    request.Server.Log(LogType.Info, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s route server unavailable");
                }

                UrlRoute.Gateway.RequestIncrementCompleted(request, Gateway.URL_NODE_SERVER_UNAVAILABLE, 1, null);
                var frame = request.Server.CreateDataFrame(new { Code = Gateway.WEBSOCKET_INNER_ERROR, Error = $"Gateway websocket {UrlRoute.Url}'s route server unavailable" });
                frame.Send(request.Session);
            }
            else
            {
                if (request.Server.EnableLog(LogType.Debug))
                {
                    request.Server.Log(LogType.Debug, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s AgentRequesting event!");
                }
                agent.Increment();
                if (agent.ValidateRPS())
                {
                    if (request.Server.EnableLog(LogType.Debug))
                    {
                        request.Server.Log(LogType.Debug, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s agent execute!");
                    }
                    var wsagent = UrlRoute.Gateway.WSMessagesBus.GetAdapter(UrlRoute.Gateway, request, this, dataFrame);
                    wsagent.Send(dataFrame);
                    // agent.Agent.Execute(request, response, agent, UrlRoute);
                }
                else
                {
                    string error = $"Unable to reach {agent.Agent.Uri} websocket request, exceeding maximum number of RPS";

                    if (request.Server.EnableLog(LogType.Info))
                    {
                        request.Server.Log(LogType.Info, $"Gateway websocket {request.RemoteIPAddress} {request.Method} {request.Url} request {UrlRoute.Url}'s route server exceeding maximum number of RPS");
                    }
                    var frame = request.Server.CreateDataFrame(new { Code = Gateway.SERVER_MAX_OF_RPS, Error = error });
                    frame.Send(request.Session);
                    agent.Agent.Statistics.Add(Gateway.SERVER_MAX_OF_RPS, 1);
                }
            }
        }
コード例 #2
0
ファイル: WSClientAdapter.cs プロジェクト: zhouzu/Bumblebee
        public virtual void Send(BeetleX.FastHttpApi.WebSockets.DataFrame frame)
        {
            AgentDataFrame agentDataFrame = new AgentDataFrame();

            if (frame.Body != null)
            {
                agentDataFrame.Body = (ArraySegment <byte>)frame.Body;
            }
            agentDataFrame.FIN  = frame.FIN;
            agentDataFrame.RSV1 = frame.RSV1;
            agentDataFrame.RSV2 = frame.RSV2;
            agentDataFrame.RSV3 = frame.RSV3;
            agentDataFrame.Type = frame.Type;
            WSClient.Send(agentDataFrame);
        }
コード例 #3
0
 public void Send(BeetleX.FastHttpApi.WebSockets.DataFrame frame)
 {
     frame.Send(Session);
 }