コード例 #1
0
ファイル: HttpServer.cs プロジェクト: liumx2007/ControlCenter
        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;
        }
コード例 #2
0
        public byte[] CreateReturnResult(HttpListenerContext context, SFReturnCode result)
        {
            string responseString = string.Format("msg={0}",
                                                  result.Message
                                                  );

            return(System.Text.Encoding.UTF8.GetBytes(responseString));
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        public byte[] CreateReturnResult(HttpListenerContext context, SFReturnCode result)
        {
            string s = string.Format("msg={0}", result.Message);

            return(Encoding.UTF8.GetBytes(s));
        }