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); } } }
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); }
public void Send(BeetleX.FastHttpApi.WebSockets.DataFrame frame) { frame.Send(Session); }