Пример #1
0
        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);
        }
Пример #2
0
        /// <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));
            }
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        /// <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同步");
            }
        }
Пример #8
0
        /// <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));
            }
        }
Пример #9
0
        /// <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);
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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);
                }
            }
        }
Пример #12
0
        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());
        }