private void ProcessHttpRequest(IAsyncResult iaServer) { HttpListener httpListener = iaServer.AsyncState as HttpListener; HttpListenerContext httpListenerContext = null; try { httpListenerContext = httpListener.EndGetContext(iaServer); Logger.Info("接收请求" + httpListenerContext.Request.Url.ToString()); if (this._isRuning) { Logger.Info("正在处理请求,已忽略请求" + httpListenerContext.Request.Url.ToString()); HttpServer.RetutnResponse(httpListenerContext, this._httpImplanter.CreateReturnResult(httpListenerContext, new SFReturnCode(8, EnumHelper.GetEnumDescription(CommandResult.ServerIsBusy)))); httpListener.BeginGetContext(new AsyncCallback(this.ProcessHttpRequest), httpListener); return; } this._isRuning = true; httpListener.BeginGetContext(new AsyncCallback(this.ProcessHttpRequest), httpListener); } catch { Logger.Warning("服务器已关闭!"); return; } string scriptName = new UrlHelper(httpListenerContext.Request.Url).ScriptName; SFReturnCode result = this._httpImplanter.ProcessRequest(httpListenerContext); byte[] resultBytes = this._httpImplanter.CreateReturnResult(httpListenerContext, result); HttpServer.RetutnResponse(httpListenerContext, resultBytes); GC.Collect(); this._isRuning = false; }
public byte[] CreateReturnResult(HttpListenerContext context, SFReturnCode result) { string responseString = string.Format("msg={0}", result.Message ); return(System.Text.Encoding.UTF8.GetBytes(responseString)); }
private void ThreadExecuteFile(LuaApiRegister luaHelper, string luaFileName) { int originalKillCount = 0; try { originalKillCount = Int32.Parse(Config.Items["Protector"]); } catch { } _doFileThread = new Thread(new ThreadStart(() => { try { _throwMessage = ""; _returnCode = null; luaHelper.ExecuteFile(luaFileName); } catch (ThreadAbortException threadAbortEx) { Logger.Info("脚本引擎主动中止线程。"); } catch (SFReturnCode returnCode) { _returnCode = returnCode; } catch (Exception ex) { _throwMessage = ex.Message; } })); _doFileThread.IsBackground = true; _doFileThread.Start(); ThreadProtecter.getInstance(originalKillCount).Start(_doFileThread); if (ThreadProtecter.getInstance(originalKillCount).IsTimeout) { Logger.Error("自动关闭脚本"); throw new TimeoutException("自动关闭脚本"); } else if (_returnCode != null) { throw _returnCode; } else if (string.IsNullOrEmpty(_throwMessage)) { Logger.Info("执行完毕:" + luaFileName); } else if (!string.IsNullOrEmpty(_throwMessage)) { Logger.Info(_throwMessage); } }
public SFReturnCode ProcessRequest(HttpListenerContext context) { UrlHelper urlHelper = new UrlHelper(context.Request.Url); CommandResult parseResult = urlHelper.ParseResult; SFReturnCode result; if (urlHelper.ParseResult == CommandResult.Success) { try { this._scriptEngineer.ExecuteScript(urlHelper.ScriptName, urlHelper.Parameters); result = new SFReturnCode(1, EnumHelper.GetEnumDescription(CommandResult.Success)); return(result); } catch (FileNotFoundException var_2_5D) { result = new SFReturnCode(5, EnumHelper.GetEnumDescription(CommandResult.NoExistsMethod)); return(result); } catch (TimeoutException var_3_74) { result = new SFReturnCode(9, EnumHelper.GetEnumDescription(CommandResult.DoFunctionTooLongTimeProtect)); return(result); } catch (SFReturnCode sFReturnCode) { result = sFReturnCode; return(result); } catch (Exception var_5_96) { result = new SFReturnCode(7, EnumHelper.GetEnumDescription(CommandResult.ExcuteFunctionFailed)); return(result); } } result = new SFReturnCode((int)parseResult, EnumHelper.GetEnumDescription(parseResult)); return(result); }
private void ProcessHttpRequest(IAsyncResult iaServer) { HttpListener server = iaServer.AsyncState as HttpListener; HttpListenerContext context = null; try { context = server.EndGetContext(iaServer); Logger.Info("接收请求" + context.Request.Url.ToString()); //判断上一个操作未完成,即返回服务器正忙,并开启一个新的异步监听 if (_isRuning) { Logger.Info("正在处理请求,已忽略请求" + context.Request.Url.ToString()); RetutnResponse(context, _httpImplanter.CreateReturnResult(context, new SFReturnCode((int)CommandResult.ServerIsBusy, EnumHelper.GetEnumDescription(CommandResult.ServerIsBusy)))); server.BeginGetContext(new AsyncCallback(ProcessHttpRequest), server); return; } _isRuning = true; server.BeginGetContext(new AsyncCallback(ProcessHttpRequest), server); } catch { Logger.Warning("服务器已关闭!"); return; } string scriptName = new UrlHelper(context.Request.Url).ScriptName; byte[] resultBytes = null; SFReturnCode result = _httpImplanter.ProcessRequest(context); resultBytes = _httpImplanter.CreateReturnResult(context, result); RetutnResponse(context, resultBytes); GC.Collect(); _isRuning = false; }
public byte[] CreateReturnResult(HttpListenerContext context, SFReturnCode result) { string s = string.Format("msg={0}", result.Message); return(Encoding.UTF8.GetBytes(s)); }