private APIResault GetExAPI(WebException ex) { APIResault ret = new APIResault(); try { HttpWebResponse wenReq = (HttpWebResponse)ex.Response; if (wenReq == null) { ret.SetException(ex); return(ret); } using (StreamReader sr = new StreamReader(wenReq.GetResponseStream(), Encoding.UTF8)) { //ret = new APIResault(new WebException(sr.ReadToEnd(), ex)); ret.SetException(new WebException(sr.ReadToEnd(), ex)); return(ret); } } catch (Exception iex) { ret.SetException(iex); } return(ret); }
/// <summary> /// 执行函数 /// </summary> private APIResault DoMethods(HttpListenerRequest request) { ServiceRequest req = new ServiceRequest(); req.Load(request); string arg = req.GetArgString(); string method = req.MethodName; string url = request.Url.AbsolutePath; if (string.IsNullOrWhiteSpace(method)) { return(ApiCommon.GetFault("函数MethodName不能为空")); } try { APIResault con = RunMethod(url, method, arg, request); if (_message != null && _message.ShowLog) { string mess = con.Message; _message.Log(mess); } return(con); } catch (Exception ex) { if (OnException != null) { OnException(ex); } return(ApiCommon.GetException(ex)); } }
static void Main(string[] args) { FWUser.XmlPath = CommonMethods.GetBaseRoot("App_Data/userInfo.xml"); _userMan = new UserManager(); APIResault res = _userMan.LoadInfo(); if (!res.IsSuccess) { Console.WriteLine(res.Message); return; } Console.WriteLine("FirewallType:" + _userMan.FWHandle.Name); FWUser.IsServer = true; try { List <FirewallItem> rule = GetRule(); _userMan.FWHandle.FirewallRule = rule; if (!StartApiServices(new Program())) { return; } _userMan.RefreashFirewall(); RunToRoll(); } finally { CloseServer(); } }
/// <summary> /// 更新地址 /// </summary> /// <param name="name">游戏</param> /// <returns></returns> public APIResault UpdateAddress(string name, long tick, string sign) { RequestHelper rh = GetHelper("UpdateAddress"); rh["Tick"] = tick; rh["Name"] = name; rh["Sign"] = sign; APIResault res = rh.DoPost(); return(res); }
public APIResault InvokeMethod(string methodName, string arg, HttpListenerRequest request) { Buffalo.Kernel.FastReflection.FastInvokeHandler han = _handle.GetMethod(methodName); if (han == null) { return(ApiCommon.GetFault("找不到函数:" + methodName)); } APIResault con = han.Invoke(this, new object[] { arg, request }) as APIResault; return(con); }
/// <summary> /// 使用get来调用Web /// </summary> /// <returns></returns> public string GetData() { FormPost post = GetFormPost(); APIResault ret = null; string rurl = GetFullGetUrl(); string res = post.GetData(rurl); return(res); }
/// <summary> /// 更新IP /// </summary> private void UpdateIP() { long tick = (long)CommonMethods.ConvertDateTimeInt(DateTime.Now, true, true); Queue <FWUser> que = null; lock (_curUser) { que = new Queue <FWUser>(_curUser); } foreach (FWUser user in que) { APIResault res = user.Handle.UpdateAddress(user.UserName, tick, user.GetSign(tick)); if (!res.IsSuccess) { mess.LogError(user.Name + ":" + res.Message); continue; } mess.Log(user.Name + ":" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 进行了IP同步"); } }
/// <summary> /// 执行函数 /// </summary> private APIResault DoMethods(HttpListenerRequest request) { ServiceRequest req = new ServiceRequest(); req.Load(request); string arg = req.GetArgString(); string method = req.MethodName; string url = request.Url.AbsolutePath; string ip = LanUnit.GetHostAddress(request); if (_lanUnit != null && _lanUnit.IsAllowIP(ip)) { return(ApiCommon.GetException(new System.Net.WebException("调用IP:" + ip + "不在白名单内"))); } if (string.IsNullOrWhiteSpace(method)) { return(ApiCommon.GetFault("函数MethodName不能为空")); } try { APIResault con = RunMethod(url, method, arg, request); if (_message != null && _message.ShowLog) { string mess = con.Message; _message.Log(mess); } return(con); } catch (Exception ex) { if (OnException != null) { OnException(ex); } return(ApiCommon.GetException(ex)); } }
/// <summary> /// 使用get来调用Web /// </summary> /// <returns></returns> public APIResault DoGet() { FormPost post = GetFormPost(); APIResault ret = null; try { string rurl = GetFullGetUrl(); string res = post.GetData(rurl); ret = new APIResault(); ret.SetJson(res); } catch (WebException ex) { ret = GetExAPI(ex); } catch (Exception ex) { ret = new APIResault(); ret.SetException(ex); } return(ret); }
/// <summary> /// 使用post来调用Web /// </summary> /// <returns></returns> public APIResault DoPost() { FormPost post = GetFormPost(); APIResault ret = new APIResault(); try { Dictionary <string, string> prms = new Dictionary <string, string>(); prms[""] = JsonConvert.SerializeObject(this); post.RequestHead = _head; string res = post.PostData(_url, prms, null); ret.SetJson(res); } catch (WebException ex) { ret = GetExAPI(ex); } catch (Exception ex) { ret.SetException(ex); } return(ret); }
private void DoRequest(object objhttpListenerContext) { try { HttpListenerContext context = objhttpListenerContext as HttpListenerContext; if (context == null) { return; } HttpListenerRequest request = context.Request; APIResault res = DoMethods(request); //取得响应对象 HttpListenerResponse response = context.Response; string responseBody = null; if (res == null) { res = ApiCommon.GetFault("请求错误"); } responseBody = res.ToJson(); //设置响应头部内容,长度及编码 response.ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseBody); response.ContentType = "application/json; Charset=UTF-8"; using (StreamWriter sw = new StreamWriter(response.OutputStream)) { sw.Write(responseBody); } } catch (Exception ex) { if (OnException != null) { OnException(ex); } } }
public APIResault UpdateAddress(string args, HttpListenerRequest request) { string remoteIP = GetIP(request); string blockkey = KeyHead + remoteIP; long curTick = (long)CommonMethods.ConvertDateTimeInt(DateTime.Now, true, true); APIResault res = CheckBlockIP(blockkey, remoteIP, curTick); if (!res.IsSuccess) { return(res); } ArgValues arg = ApiCommon.GetArgs(args); long tick = arg.GetDataValue <long>("Tick"); string name = arg.GetDataValue <string>("Name"); string sign = arg.GetDataValue <string>("Sign"); res = CheckPacket(curTick, name, tick); if (!res.IsSuccess) { return(res); } FWUser user = _userMan.GetUser(name); if (user == null) { return(ApiCommon.GetFault("找不到用户:" + name)); } string cntkey = KeyCntHead + remoteIP; string cursign = user.GetSign(tick); if (!string.Equals(cursign, sign, StringComparison.CurrentCultureIgnoreCase)) { int times = _cache.GetValue <int>(cntkey); times++; string err = null; if (times >= BlockTimes) { _cache.SetValue <long>(blockkey, curTick, SetValueType.Set, BlockSecond); _cache.DeleteValue(cntkey); err = "效验错误,IP被屏蔽:" + remoteIP; } else { _cache.SetValue <int>(cntkey, times, SetValueType.Set, BlockSecond); err = "效验错误,错误次数:" + times; } return(ApiCommon.GetFault(err)); } _cache.DeleteValue(cntkey); if (!user.UpdateIP(remoteIP)) { return(ApiCommon.GetSuccess()); } _userMan.RefreashFirewall(); _userMan.SaveConfig(); _form.OnUserUpdate(); if (_message != null && _message.ShowLog) { _message.Log("用户:" + name + ",的IP更新为:" + remoteIP); } return(ApiCommon.GetSuccess()); }