public async Task <IHttpResponseAction> Execute(IHttpRequestContext context) { int statusCode; RequestPackage package; var actionDispatcher = GameEnvironment.Setting.ActionDispatcher; if (!actionDispatcher.TryDecodePackage(context.Request, out package, out statusCode)) { return(new ByteResponse(statusCode, statusCode == 200 ? "OK" : "FAIL", new byte[0])); } GameSession session; if (package.ProxySid != Guid.Empty) { session = GameSession.Get(package.ProxySid) ?? GameSession.CreateNew(package.ProxySid, context.Request); session.ProxySid = package.ProxySid; } else { session = GameSession.Get(package.SessionId) ?? GameSession.CreateNew(Guid.NewGuid(), context.Request); } package.Bind(session); ActionGetter httpGet = actionDispatcher.GetActionGetter(package, session); if (package.IsUrlParam) { httpGet["UserHostAddress"] = session.RemoteAddress; httpGet["ssid"] = session.KeyCode.ToString("N"); httpGet["http"] = "1"; } var result = await System.Threading.Tasks.Task.Run <byte[]>(() => { try { return(ScriptEngines.GetCurrentMainScript().ProcessRequest(package, httpGet)); } catch (Exception ex) { TraceLog.WriteError("Excute mainclass error:{0}", ex); return(new byte[0]); } }); return(new ByteResponse(statusCode, "OK", result)); }
/// <summary> /// 启动定时器 /// </summary> public static void StartTimer() { var mainClass = ScriptEngines.GetCurrentMainScript(); if (mainClass != null) { if (((dynamic)mainClass)._dictTimer.ContainsKey(_timer1sKey)) { ((dynamic)mainClass)._dictTimer[_timer1sKey].Stop(); ((dynamic)mainClass)._dictTimer[_timer1sKey].Dispose(); // Console.WriteLine("定时器释放..."); } var timer = new System.Timers.Timer(); timer.Enabled = true; timer.Interval = 1 * 1000; timer.Start(); timer.Elapsed += new System.Timers.ElapsedEventHandler(TimeDo_1s); ((dynamic)mainClass)._dictTimer[_timer1sKey] = timer; // Console.WriteLine("定时器启动成功..."); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task <IHttpResponseAction> Execute(IHttpRequestContext context) { int statusCode; RequestPackage package; var actionDispatcher = GameEnvironment.Setting.ActionDispatcher; if (!actionDispatcher.TryDecodePackage(context.Request, out package, out statusCode)) { return(new ByteResponse(statusCode, statusCode == 200 ? "OK" : "FAIL", new byte[0])); } GameSession session; if (package.ProxySid != Guid.Empty) { session = GameSession.Get(package.ProxySid) ?? GameSession.CreateNew(package.ProxySid, context.Request); session.ProxySid = package.ProxySid; } else { session = (string.IsNullOrEmpty(package.SessionId) ? GameSession.GetSessionByCookie(context.Request) : GameSession.Get(package.SessionId)) ?? GameSession.CreateNew(Guid.NewGuid(), context.Request); } session.InitHttp(context.Request); session.RemoteAddress = context.UserHostAddress; package.Bind(session); ActionGetter httpGet = actionDispatcher.GetActionGetter(package, session); if (package.IsUrlParam) { httpGet["UserHostAddress"] = session.RemoteAddress; httpGet["ssid"] = session.KeyCode.ToString("N"); httpGet["http"] = "1"; } var result = await System.Threading.Tasks.Task.Run <byte[]>(() => { try { return(ScriptEngines.GetCurrentMainScript().ProcessRequest(package, httpGet)); } catch (Exception ex) { TraceLog.WriteError("Excute mainclass error:{0}", ex); return(new byte[0]); } }); string sessionId = session.SessionId; var response = new ByteResponse(statusCode, "OK", result, session.UserId.ToString()) { RequestParams = package.OriginalParam }; response.CookieHandle += ctx => { var cookie = ctx.Request.Cookies["sid"]; if (cookie == null) { cookie = new Cookie("sid", sessionId); cookie.Expires = DateTime.Now.AddMinutes(5); ctx.Response.SetCookie(cookie); } }; return(response); }