private void SendMessage(ActionResult msg, BeetleX.FastHttpApi.HttpApiServer server) { DataFrame df = server.CreateDataFrame(msg); lock (this.Sessions) for (int i = 0; i < Sessions.Count; i++) { df.Send(Sessions[i].Session); } }
public string Hello(string name) { ActionResult result = new ActionResult(); result.Data = new { type = "log", message = "*****@*****.**" }; var frame = mApiServer.CreateDataFrame(result); mApiServer.SendToWebSocket(frame); return($"{name} {DateTime.Now}"); }
public ActionResult ExecuteWithWS(HttpRequest request, HttpApiServer server, JToken token) { ActionResult result = new ActionResult(); JToken url = token["url"]; WebSockets.DataFrame dataFrame = server.CreateDataFrame(result); if (url == null) { result.Code = 403; result.Error = "not fupport url info notfound!"; return(result); } result.Url = url.Value <string>(); string baseurl = HttpParse.CharToLower(result.Url); ActionHandler handler = GetAction(baseurl); if (handler == null) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, baseurl + " not found"); result.Code = 404; result.Error = "url " + baseurl + " notfound!"; request.Session.Send(dataFrame); } else { try { JToken data = token["params"]; if (data == null) { data = (JToken)Newtonsoft.Json.JsonConvert.DeserializeObject("{}"); } WebsocketJsonDataContext dc = new WebsocketJsonDataContext(server, request, data); ActionContext context = new ActionContext(handler, dc); context.Execute(); if (!dc.AsyncResult) { result.Data = context.Result; request.Session.Send(dataFrame); } } catch (Exception e_) { server.BaseServer.Log(EventArgs.LogType.Error, request.Session, "{0} inner error {1}@{2}", request.Url, e_.Message, e_.StackTrace); result.Code = 500; result.Error = e_.Message; if (server.ServerConfig.OutputStackTrace) { result.StackTrace = e_.StackTrace; } request.Session.Send(dataFrame); } } return(result); }
public void Init(BeetleX.FastHttpApi.HttpApiServer server) { server.HttpDisconnect += (o, e) => { if (e.Session.Name != null) { ActionResult result = new ActionResult(); result.Data = new { name = e.Session.Name, message = "quit", type = "quit", time = DateTime.Now.ToString("T") }; var data = server.CreateDataFrame(result); server.SendToWebSocket(data); } }; }
private void OnWebSocketDecode(ISession session, PipeStream pstream) { START: if (mDataPacket == null) { mDataPacket = new DataFrame(mServer); mDataPacket.DataPacketSerializer = this.mDataPacketSerializer; } if (mDataPacket.Read(pstream) == DataPacketLoadStep.Completed) { mWebSocketRequest++; long now = session.Server.GetRunTime(); if (now - mLastTime < 1000) { if (mServerConfig.WebSocketMaxRPS > 0 && mWebSocketRequest > mServerConfig.WebSocketMaxRPS) { if (session.Server.EnableLog(LogType.Warring)) { session.Server.Log(LogType.Warring, session, $"Websocket {mRequest?.ID} {session.RemoteEndPoint} session rps limit!"); } HttpToken token = (HttpToken)session.Tag; token.KeepAlive = false; var error = new ActionResult(500, "session rps limit!"); var frame = mServer.CreateDataFrame(error); frame.Send(session); // session.Dispose(); } } else { mWebSocketRequest = 0; mLastTime = now; } DataFrame data = mDataPacket; mDataPacket = null; Completed?.Invoke(this, mCompletedArgs.SetInfo(session, data)); if (pstream.Length > 0) { goto START; } } else { if (pstream.Length > mServerConfig.MaxBodyLength) { session.Dispose(); } } }
public void SendMessage(int sessionid, string message, BeetleX.FastHttpApi.HttpApiServer server) { var msg = new Command { Name = "Admin", Type = "Talk", Message = message }; var frame = server.CreateDataFrame(msg); if (sessionid > 0) { server.SendDataFrame(frame, sessionid); } else { server.SendDataFrame(frame); } }
public ActionResult ExecuteWithWS(HttpRequest request, HttpApiServer server, JToken token) { ActionResult result = new ActionResult(); JToken url = token["url"]; WebSockets.DataFrame dataFrame = server.CreateDataFrame(result); if (url == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "{0} ws not support, url info notfound!", request.RemoteIPAddress); } result.Code = 403; result.Error = "not support, url info notfound!"; request.Session.Send(dataFrame); return(result); } result.Url = url.Value <string>(); string baseurl = result.Url; if (server.Options.UrlIgnoreCase) { baseurl = HttpParse.CharToLower(result.Url); } if (baseurl[0] != '/') { baseurl = "/" + baseurl; } result.Url = baseurl; JToken data = token["params"]; if (data == null) { data = (JToken)Newtonsoft.Json.JsonConvert.DeserializeObject("{}"); } JToken requestid = data["_requestid"]; if (requestid != null) { result.ID = requestid.Value <string>(); } ActionHandler handler = GetAction(baseurl); if (handler == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "{0} ws execute {1} notfound", request.RemoteIPAddress, result.Url); } result.Code = 404; result.Error = "url " + baseurl + " notfound!"; request.Session.Send(dataFrame); } else { try { Data.DataContxt dataContxt = new Data.DataContxt(); DataContextBind.BindJson(dataContxt, data); WebsocketJsonContext dc = new WebsocketJsonContext(server, request, dataContxt); dc.ActionUrl = baseurl; dc.RequestID = result.ID; ActionContext context = new ActionContext(handler, dc, this); long startTime = server.BaseServer.GetRunTime(); WSActionResultHandler wSActionResultHandler = new WSActionResultHandler(dc, server, request, result, dataFrame, startTime); context.Execute(wSActionResultHandler); } catch (Exception e_) { handler.IncrementError(); if (server.EnableLog(EventArgs.LogType.Error)) { server.BaseServer.Log(EventArgs.LogType.Error, request.Session, "{0} ws execute {1} inner error {2}@{3}", request.RemoteIPAddress, result.Url, e_.Message, e_.StackTrace); } result.Code = 500; result.Error = e_.Message; if (server.Options.OutputStackTrace) { result.StackTrace = e_.StackTrace; } dataFrame.Send(request.Session); } } return(result); }
public void ExecuteWithWS(HttpRequest request, HttpApiServer server, JToken token) { ActionResult result = new ActionResult(); JToken url = token["url"]; WebSockets.DataFrame dataFrame = server.CreateDataFrame(result); if (url == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, null, $"Websocket {request.ID} {request.RemoteIPAddress} process error action url info notfound!"); } result.Code = 403; result.Error = "not support, url info notfound!"; request.Session.Send(dataFrame); return; } result.Url = url.Value <string>(); string baseurl = result.Url; if (server.Options.UrlIgnoreCase) { baseurl = HttpParse.CharToLower(result.Url); } if (baseurl[0] != '/') { baseurl = "/" + baseurl; } result.Url = baseurl; JToken data = token["params"]; if (data == null) { data = (JToken)Newtonsoft.Json.JsonConvert.DeserializeObject("{}"); } JToken requestid = data["_requestid"]; if (requestid != null) { result.ID = requestid.Value <string>(); } ActionHandler handler = GetAction(baseurl); if (handler == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, null, $"Websocket {request.ID} {request.RemoteIPAddress} ws execute {result.Url} notfound!"); } result.Code = 404; result.Error = "url " + baseurl + " notfound!"; request.Session.Send(dataFrame); } else { try { Data.DataContxt dataContxt = new Data.DataContxt(); DataContextBind.BindJson(dataContxt, data); WebsocketJsonContext dc = new WebsocketJsonContext(server, request, dataContxt); dc.ActionUrl = baseurl; dc.RequestID = result.ID; if (!Server.OnActionExecuting(dc)) { return; } ActionContext context = new ActionContext(handler, dc, this); long startTime = server.BaseServer.GetRunTime(); WSActionResultHandler wSActionResultHandler = new WSActionResultHandler(dc, server, request, result, dataFrame, startTime); if (!handler.HasValidation || handler.ValidateParamters(context.Parameters, out (Validations.ValidationBase, ParameterInfo)error)) { context.Execute(wSActionResultHandler); } else { server.ValidationOutputHandler.Execute(dc, wSActionResultHandler, error.Item1, error.Item2); } }
public ActionResult ExecuteWithWS(HttpRequest request, HttpApiServer server, JToken token) { ActionResult result = new ActionResult(); JToken url = token["url"]; WebSockets.DataFrame dataFrame = server.CreateDataFrame(result); if (url == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "websocket {0} not support, url info notfound!", request.ClientIPAddress); } result.Code = 403; result.Error = "not support, url info notfound!"; request.Session.Send(dataFrame); return(result); } result.Url = url.Value <string>(); string baseurl = HttpParse.CharToLower(result.Url); if (baseurl[0] != '/') { baseurl = "/" + baseurl; } result.Url = baseurl; JToken data = token["params"]; if (data == null) { data = (JToken)Newtonsoft.Json.JsonConvert.DeserializeObject("{}"); } JToken requestid = data["_requestid"]; if (requestid != null) { result.ID = requestid.Value <string>(); } ActionHandler handler = GetAction(baseurl); if (handler == null) { if (server.EnableLog(EventArgs.LogType.Warring)) { server.BaseServer.Log(EventArgs.LogType.Warring, request.Session, "websocket {0} execute {1} notfound", request.ClientIPAddress, result.Url); } result.Code = 404; result.Error = "url " + baseurl + " notfound!"; request.Session.Send(dataFrame); } else { try { WebsocketContext dc = new WebsocketContext(server, request, data); dc.ActionUrl = baseurl; dc.RequestID = result.ID; ActionContext context = new ActionContext(handler, dc); context.Execute(); if (!dc.AsyncResult) { if (context.Result is ActionResult) { result = (ActionResult)context.Result; result.ID = dc.RequestID; if (result.Url == null) { result.Url = dc.ActionUrl; } dataFrame.Body = result; } else { result.Data = context.Result; } dataFrame.Send(request.Session); //request.Session.Send(dataFrame); } } catch (Exception e_) { if (server.EnableLog(EventArgs.LogType.Error)) { server.BaseServer.Log(EventArgs.LogType.Error, request.Session, "websocket {0} execute {1} inner error {2}@{3}", request.ClientIPAddress, request.Url, e_.Message, e_.StackTrace); } result.Code = 500; result.Error = e_.Message; if (server.ServerConfig.OutputStackTrace) { result.StackTrace = e_.StackTrace; } dataFrame.Send(request.Session); //request.Session.Send(dataFrame); } } return(result); }