/// <summary> /// 将目标Action跳转到社交服 /// </summary> /// <param name="httpGet"></param> public static async void SendDesActionToSocialServer(HttpGet httpGet) { //检查 if (SocialSession == null) { TraceLog.WriteError("SendDesActionToSocialServer error, 社交服没连接"); return; } int desActionId = 0; if (!httpGet.GetInt("DesActionId", ref desActionId)) { TraceLog.WriteError("SendDesActionToSocialServer error, 未指定目标ActionId"); return; } //执行 RequestParam param = new RequestParam(); param["ActionId"] = desActionId; foreach (var key in httpGet.Keys) { if (key == "ActionId" || key == "DesActionId") { continue; } param[key] = httpGet[key]; } string post = string.Format("?d={0}", System.Web.HttpUtility.UrlEncode(param.ToPostString())); var data = Encoding.UTF8.GetBytes(post); await SocialSession.SendAsync(data, 0, data.Length); }
/// <summary> /// 请求处理 /// </summary> /// <param name="typeName"></param> /// <param name="response"></param> /// <param name="userFactory"></param> /// <param name="httpGet"></param> public static void Request(string typeName, HttpGet httpGet, IGameResponse response, Func<int, BaseUser> userFactory) { string tempName = string.Format(typeName, httpGet.ActionId); int actionID = 0; string errorInfo = ""; try { bool isRL = BaseStruct.CheckRunloader(httpGet); if (isRL || httpGet.CheckSign()) { if (httpGet.GetInt("ActionID", ref actionID)) { BaseStruct action = FindRoute(typeName, httpGet, actionID); Process(action, httpGet, response, userFactory); if (action != null) { return; } } } else { errorInfo = "签名验证失败"; TraceLog.WriteError("Action request {3} error:{2},rl:{0},param:{1}", isRL, httpGet.ParamString, errorInfo, tempName); } } catch (Exception ex) { TraceLog.WriteError("Action request {0} error:{1}\r\nparam:{2}", tempName, ex, httpGet.ParamString); } RequestError(response, actionID, errorInfo); }
/// <summary> /// 请求脚本处理 /// </summary> /// <param name="httpGet">请求参数对象</param> /// <param name="response">字节输出处理</param> /// <param name="userFactory">创建user对象工厂,可为Null</param> public static void RequestScript(HttpGet httpGet, IGameResponse response, Func<int, BaseUser> userFactory) { int actionID = httpGet.GetInt("actionId"); string errorInfo = ""; try { bool isRl = BaseStruct.CheckRunloader(httpGet); if (isRl || httpGet.CheckSign()) { ScriptRoute scriptRoute = new ScriptRoute(actionID); RouteItem routeItem; var pythonManager = PythonScriptManager.Current; if (pythonManager.TryGetAction(actionID, out routeItem)) { if (scriptRoute.TryLoadAction(routeItem.ScriptPath)) { var baseStruct = new ScriptAction((short)actionID, httpGet, scriptRoute, routeItem.IgnoreAuthorize); Process(baseStruct, httpGet, response, userFactory); return; } } } else { errorInfo = "签名验证失败"; TraceLog.WriteError("Action request error:{2},rl:{0},param:{1}", isRl, httpGet.ParamString, errorInfo); } } catch (Exception ex) { TraceLog.WriteError("Action request error:{0}\r\nparam:{1}", ex, httpGet.ParamString); } RequestError(response, actionID, errorInfo); }