public void Test_Home_Not_Allowautoredirect()
            {
                var helper = new HttpHelper();
                var str    = "http://www.globalcompanions.com/";

                var header = new WebHeaderCollection();

                header.Add("Accept-Encoding:gzip,deflate");
                var item = new HttpItem
                {
                    URL = str,
                    Allowautoredirect  = false,
                    AutoRedirectCookie = false
                };

                var result = helper.GetHtml(item);

                item = new HttpItem
                {
                    URL    = result.RedirectUrl,
                    Cookie = result.Cookie
                };
                result = helper.GetHtml(item);
                if (result.StatusCode != HttpStatusCode.OK)
                {
                    Console.WriteLine("登录失败(" + result.StatusCode + ")");
                }
            }
Esempio n. 2
0
        public static string getsufeiUrl(string url)
        {
            CsharpHttpHelper.HttpHelper http = new CsharpHttpHelper.HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL                = url,                                                                        //URL     必需项
                Method             = "GET",                                                                      //URL     可选项 默认为Get
                Timeout            = 100000,                                                                     //连接超时时间     可选项默认为100000
                ReadWriteTimeout   = 30000,                                                                      //写入Post数据超时时间     可选项默认为30000
                IsToLower          = false,                                                                      //得到的HTML代码是否转成小写     可选项默认转小写
                Cookie             = "",                                                                         //字符串Cookie     可选项
                UserAgent          = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", //用户的浏览器类型,版本,操作系统     可选项有默认值
                Accept             = "text/html, application/xhtml+xml, */*",                                    //    可选项有默认值
                ContentType        = "text/html",                                                                //返回类型    可选项有默认值
                Referer            = "http://www.sufeinet.com",                                                  //来源URL     可选项
                Allowautoredirect  = false,                                                                      //是否根据301跳转     可选项
                AutoRedirectCookie = false,                                                                      //是否自动处理Cookie     可选项
                                                                                                                 //CerPath = "d:\123.cer",//证书绝对路径     可选项不需要证书时可以不写这个参数
                                                                                                                 //Connectionlimit = 1024,//最大连接数     可选项 默认为1024
                Postdata = "",                                                                                   //Post数据     可选项GET时不需要写
                                                                                                                 //ProxyIp = "192.168.1.105:2020",//代理服务器ID     可选项 不需要代理 时可以不设置这三个参数
                                                                                                                 //ProxyPwd = "123456",//代理服务器密码     可选项
                                                                                                                 //ProxyUserName = "******",//代理服务器账户名     可选项
                ResultType = ResultType.String,                                                                  //返回数据类型,是Byte还是String
            };
            HttpResult result = http.GetHtml(item);
            string     html   = result.Html;
            string     cookie = result.Cookie;

            return(html);
        }
Esempio n. 3
0
        public static string GetEntoCn(string en)
        {
            string text = "";

            CsharpHttpHelper.HttpHelper httpHelper = new CsharpHttpHelper.HttpHelper();
            HttpItem httpItem = new HttpItem();

            httpItem.URL         = "http://api.fanyi.baidu.com/api/trans/vip/translate";
            httpItem.Method      = "POST";
            httpItem.ContentType = httpItem.postContentType;
            long salt = DateTime.Now.ToBinary();
            //appid+q+salt+密钥
            string sign = MD5Encrypt($"{appId}{en}{salt}{key}");

            httpItem.Postdata = string.Format($"from=en&to=zh&q={CsharpHttpHelper.HttpHelper.URLEncode(en, Encoding.UTF8)}&appid=20180727000189556&salt={salt}&sign={sign}");
            HttpResult html = httpHelper.GetHtml(httpItem);
            bool       flag = html.StatusCode == HttpStatusCode.OK;

            if (flag)
            {
                string     html2 = html.Html;
                Rootobject obj   = JsonConvert.DeserializeObject <Rootobject>(html2);
                return(obj.trans_result[0].dst);
            }
            return(text);
        }
Esempio n. 4
0
    /// <summary>
    /// 检查用户是否有效
    /// </summary>
    /// <param name="accesstoken">全局令牌</param>
    /// <param name="openusername">kinfarid</param>
    /// <param name="salt">盐值</param>
    private ReturnData Api_CheckUserValid(string weburl, string accesstoken, string openusername, string salt)
    {
        #region webapi验证
        PostData <string> postdata = new PostData <string>()
        {
            token = accesstoken, data = string.Format(@"{{""username"":""{0}"",""salt"":""{1}""}}", openusername, salt)
        };
        //赋值令牌
        postdata.token = accesstoken;
        //创建Httphelper对象
        CsharpHttpHelper.HttpHelper http = new CsharpHttpHelper.HttpHelper();
        //创建Httphelper参数对象
        CsharpHttpHelper.HttpItem item = new CsharpHttpHelper.HttpItem()
        {
            URL          = weburl,                                             //URL     必需项
            Method       = "post",                                             //URL     可选项 默认为Get
            ContentType  = "application/json;charset=urf-8",                   //返回类型    可选项有默认值 application/x-www-form-urlencoded 键值对
            PostDataType = CsharpHttpHelper.Enum.PostDataType.String,          //默认为字符串,同时支持Byte和文件方法
            PostEncoding = System.Text.Encoding.UTF8,                          //默认为Default,
            Postdata     = CsharpHttpHelper.HttpHelper.ObjectToJson(postdata), //Post要发送的数据
        };
        //请求的返回值对象
        CsharpHttpHelper.HttpResult result = http.GetHtml(item);
        //获取请请求的Html
        ReturnData rData = CsharpHttpHelper.HttpHelper.JsonToObject <ReturnData>(result.Html) as ReturnData;

        return(rData);

        #endregion
    }
Esempio n. 5
0
    public override string Process()
    {
        Hashtable ps     = Core.Utility.ParseJson(Data as string) as Hashtable;
        string    action = ps["Action"] as string;

        if (action == "GetMessages")
        {
            AccountInfo cu = ServerImpl.Instance.GetCurrentUser(Context);
            int         page = Convert.ToInt32(ps["Page"]), pagecount = 0;
            if (ps.ContainsKey("Time"))
            {
                if (Convert.ToInt32(ps["Time"]) != 5)
                {
                    DateTime now = DateTime.Now;
                    DateTime to  = new DateTime(now.Year, now.Month, now.Day);
                    to       = to.AddDays(1);
                    ps["To"] = to;
                    switch (Convert.ToInt32(ps["Time"]))
                    {
                    case 1:
                    {
                        ps["From"] = to.AddDays(-7);
                        break;
                    }

                    case 2:
                    {
                        ps["From"] = to.AddMonths(-1);
                        break;
                    }

                    case 3:
                    {
                        ps["From"] = to.AddMonths(-3);
                        break;
                    }

                    case 4:
                    {
                        ps["From"] = to.AddYears(-100);
                        break;
                    }
                    }
                }
            }
            List <Message> msgs = MessageImpl.Instance.GetMessages(
                cu.ID, Convert.ToInt32(ps["Peer"]),
                Convert.ToDateTime(ps["From"]),
                Convert.ToDateTime(ps["To"]),
                ref page, Convert.ToInt32(ps["PageSize"]), out pagecount,
                Convert.ToInt32(ps["MsgID"]),
                ps.ContainsKey("Content") ? Convert.ToString(ps["Content"]) : ""
                );
            return(Utility.RenderHashJson(
                       "Result", true,
                       "Messages", msgs,
                       "Page", page,
                       "PageCount", pagecount
                       ));
        }
        else if (action == "GetGroupMembers")
        {
            int         groupId                = Convert.ToInt32(ps["ID"]);
            AccountInfo groupInfo              = AccountImpl.Instance.GetUserInfo(groupId);
            AccountInfo creatorInfo            = AccountImpl.Instance.GetUserInfo(groupInfo.Creator);
            List <AccountInfo.Details> members = new List <AccountInfo.Details>();
            Hashtable managers = new Hashtable();
            if (groupInfo.SubType == 3)
            {
                foreach (AccountInfo info in MessageImpl.Instance.GetChatRoomUsers(groupInfo.ID))
                {
                    members.Add(info.DetailsJson);
                }
            }
            else
            {
                foreach (int member in groupInfo.Friends)
                {
                    members.Add(AccountImpl.Instance.GetUserInfo(member).DetailsJson);
                }
                foreach (int member in groupInfo.GetGroupManagers())
                {
                    AccountInfo u = AccountImpl.Instance.GetUserInfo(member);
                    if (u.ID != creatorInfo.ID)
                    {
                        managers[u.ID] = u.DetailsJson;
                    }
                }
            }
            return(Utility.RenderHashJson(
                       "Result", true,
                       "Members", members,
                       "Managers", managers,
                       "GroupInfo", groupInfo,
                       "GroupCreator", creatorInfo.DetailsJson
                       ));
        }
        else if (action == "Login")
        {
            String      sessionId    = Guid.NewGuid().ToString().ToUpper();
            AccountInfo current_user = null;
            if (!ps.ContainsKey("User"))
            {
                current_user = ServerImpl.Instance.GetCurrentUser(Context);
                if (current_user != null && !current_user.IsTemp)
                {
                    Core.ServerImpl.Instance.Login(sessionId, Context, current_user.ID, Convert.ToBoolean(ps["ClientMode"]), null);
                }
                else
                {
                    current_user = null;
                }
            }
            else
            {
                string token = ps["Token"].ToString();
                if (string.IsNullOrWhiteSpace(token))
                {
#if DEBUG
                    if (true)
#else
                    if (Core.AccountImpl.Instance.Validate(name, ps["Password"].ToString()))
#endif
                    {
                        int         id        = AccountImpl.Instance.GetUserID(name);
                        AccountInfo user_info = AccountImpl.Instance.GetUserInfo(id);
                        if (user_info == null)
                        {
                            throw new Exception("用户不存在或密码错误!");
                        }
                        Core.ServerImpl.Instance.Login(sessionId, Context, user_info.ID, Convert.ToBoolean(ps["ClientMode"]), null);
                        current_user = AccountImpl.Instance.GetUserInfo(id);
                    }
                    else
                    {
                        throw new Exception("用户不存在或密码错误!");
                    }
                }
                else
                {
                    string webapi       = System.Configuration.ConfigurationManager.AppSettings["webapi"].ToString();
                    string appid        = System.Configuration.ConfigurationManager.AppSettings["appid"].ToString();
                    string appsecret    = System.Configuration.ConfigurationManager.AppSettings["appsecret"].ToString();
                    string temptoken    = token;
                    string openusername = "";

                    #region webapi验证
                    PostData <string> postdata = new PostData <string>()
                    {
                        token = temptoken, appid = appid, appsecret = appsecret, data = "{}"
                    };
                    //赋值令牌
                    postdata.token = temptoken;
                    //创建Httphelper对象
                    CsharpHttpHelper.HttpHelper http = new CsharpHttpHelper.HttpHelper();
                    //创建Httphelper参数对象
                    CsharpHttpHelper.HttpItem item = new CsharpHttpHelper.HttpItem()
                    {
                        URL          = webapi + "/api/oath/Account/GetAccessToken",        //URL     必需项
                        Method       = "post",                                             //URL     可选项 默认为Get
                        ContentType  = "application/json;charset=urf-8",                   //返回类型    可选项有默认值 application/x-www-form-urlencoded 键值对
                        PostDataType = CsharpHttpHelper.Enum.PostDataType.String,          //默认为字符串,同时支持Byte和文件方法
                        PostEncoding = System.Text.Encoding.UTF8,                          //默认为Default,
                        Postdata     = CsharpHttpHelper.HttpHelper.ObjectToJson(postdata), //Post要发送的数据
                    };
                    //请求的返回值对象
                    CsharpHttpHelper.HttpResult result = http.GetHtml(item);
                    //获取请请求的Html
                    var rData = CsharpHttpHelper.HttpHelper.JsonToObject <ReturnData>(result.Html) as ReturnData;
                    #endregion

                    if (rData.Status == 1)
                    {
                        //成功
                        var so = CsharpHttpHelper.HttpHelper.JsonToObject <Dictionary <string, object> >(rData.Data.ToString()) as Dictionary <string, object>;
                        if (so != null && so.Count > 0)
                        {
                            int userid    = 0;
                            var name_salt = so["UserID"].ToString();  //用户名和盐值
                            temptoken = so["AccessToken"].ToString(); //全局令牌
                            string[] arr = name_salt.Split('♂');
                            if (arr.Length == 2)
                            {
                                openusername = arr[0];
                                var        salt      = arr[1];
                                ReturnData rDataUser = Api_CheckUserValid(webapi + "api/CMS/Login/CheckUserValid", temptoken, openusername, salt);
                                if (rDataUser != null)
                                {
                                    if (rDataUser.Status == 1)//成功
                                    {
                                        userid = AccountImpl.Instance.GetUserByOpenID(openusername);
                                        if (userid == 0)
                                        {
                                            var rUser = CsharpHttpHelper.HttpHelper.JsonToObject <Dictionary <string, object> >(rDataUser.Data.ToString()) as Dictionary <string, object>;
                                            if (so != null && so.Count > 0)
                                            {
                                                var user_name = rUser["user_name"].ToString();
                                                var nick_name = rUser["nick_name"].ToString();
                                                var salt1     = rUser["salt"].ToString();
                                                var telphone  = rUser["telphone"].ToString();
                                                var email     = rUser["email"].ToString();

                                                userid = AccountImpl.Instance.CreateUser("kf" + user_name, nick_name, user_name + salt1, email, 0, 0, user_name);
                                            }
                                            else
                                            {
                                                throw new Exception(rDataUser.Message);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        throw new Exception("无效的关联信息!" + rDataUser.Message + rDataUser.Data ?? "");
                                    }
                                }
                            }
                            AccountInfo user_info = AccountImpl.Instance.GetUserInfo(userid);
                            if (user_info == null)
                            {
                                throw new Exception("用户不存在或密码错误!");
                            }
                            Core.ServerImpl.Instance.Login(sessionId, Context, user_info.ID, Convert.ToBoolean(ps["ClientMode"]), null);
                            current_user = AccountImpl.Instance.GetUserInfo(userid);
                        }
                        else
                        {
                            throw new Exception("无效的token!");
                        }
                    }
                }

                int group_id = 0;

                if (current_user != null && ps.ContainsKey("Join"))
                {
                    string groupName = ps["Join"] as string;
                    group_id = AccountImpl.Instance.GetUserID(groupName);
                    AccountInfo peerInfo = AccountImpl.Instance.GetUserInfo(group_id);
                    if (peerInfo != null)
                    {
                        if (peerInfo.Type == 1 && !peerInfo.ContainsMember(current_user.ID))
                        {
                            AccountImpl.Instance.AddFriend(current_user.ID, peerInfo.ID);
                            SessionManagement.Instance.SendToGroupMembers(peerInfo.ID, "GLOBAL:ACCOUNTINFO_CHANGED", Utility.RenderHashJson("Details", peerInfo.DetailsJson));
                        }
                        else if (peerInfo.Type == 0 && !peerInfo.ContainsFriend(current_user.ID))
                        {
                            AccountImpl.Instance.AddFriend(current_user.ID, peerInfo.ID);
                        }
                    }
                }

                if (current_user == null)
                {
                    return(Utility.RenderHashJson(
                               "Result", true,
                               "IsLogin", false
                               ));
                }
                else
                {
                    if (current_user.IsTemp && ps.ContainsKey("EmbedCode") && Convert.ToInt32(ps["EmbedCode"]) != 0)
                    {
                        System.Data.DataRow row           = AccountImpl.Instance.GetEmbedCode(Convert.ToInt32(ps["EmbedCode"]));
                        string                embedConfig = row["EmbedConfig"].ToString();
                        Hashtable             data        = Utility.ParseJson(embedConfig) as Hashtable;
                        System.Data.DataTable dt          = AccountImpl.Instance.GetServiceEmbedData(data["Users"].ToString());
                        Hashtable             users       = new Hashtable();
                        foreach (DataRow user_row in dt.Rows)
                        {
                            AccountInfo info = AccountImpl.Instance.GetUserInfo(Convert.ToInt32(user_row["ID"]));
                            users[info.ID] = info.DetailsJson;
                        }
                        return(Utility.RenderHashJson(
                                   "Result", true,
                                   "IsLogin", true,
                                   "UserInfo", current_user.DetailsJson,
                                   "SessionID", sessionId,
                                   "JoinGroup", group_id,
                                   "CompanyInfo", ServerImpl.Instance.CommonStorageImpl.GetCompanyInfo(),
                                   "CSDetails", dt.Rows,
                                   "CSUsers", users
                                   ));
                    }
                    else
                    {
                        return(Utility.RenderHashJson(
                                   "Result", true,
                                   "IsLogin", true,
                                   "UserInfo", current_user.DetailsJson,
                                   "SessionID", sessionId,
                                   "JoinGroup", group_id
                                   ));
                    }
                }
            }
        }
        else if (action == "CreateTempGroup")
        {
            AccountInfo cu           = ServerImpl.Instance.GetCurrentUser(Context);
            int         id           = AccountImpl.Instance.CreateTempGroup(AccountImpl.AdminstratorID, ps["Members"].ToString() + "," + cu.ID.ToString());
            AccountInfo info         = AccountImpl.Instance.GetUserInfo(id);
            List <int>  notify_users = new List <int>();
            foreach (int friendid in info.Friends)
            {
                if (cu.ID != friendid && cu.ID != 2)
                {
                    notify_users.Add(friendid);
                }
            }
            SessionManagement.Instance.SendToMultiUsers(notify_users.ToArray(), "GLOBAL:CREATE_TEMP_GROUP", Utility.RenderHashJson("GroupInfo", info.DetailsJson));
            return(Utility.RenderHashJson("GroupInfo", info.DetailsJson));
        }
        else if (action == "ExitTempGroup")
        {
            AccountInfo cu        = ServerImpl.Instance.GetCurrentUser(Context);
            AccountInfo groupInfo = AccountImpl.Instance.GetUserInfo(Convert.ToInt32(ps["GroupID"]));
            int[]       members   = groupInfo.Friends;

            AccountImpl.Instance.RemoveFromGroup(
                ServerImpl.Instance.GetCurrentUser(Context).ID,
                groupInfo.ID
                );
            if (groupInfo.Friends.Length == 1)
            {
                AccountImpl.Instance.DeleteGroup(groupInfo.ID, groupInfo.Creator);
            }
            foreach (int memberid in members)
            {
                if (memberid != AccountImpl.AdminstratorID && SessionManagement.Instance.IsOnline(memberid))
                {
                    SessionManagement.Instance.Send(
                        memberid, "GLOBAL:EXIT_TEMP_GROUP",
                        Utility.RenderHashJson("User", cu, "GroupID", groupInfo.ID, "Group", groupInfo.DetailsJson)
                        );
                }
            }
            return(Utility.RenderHashJson("Result", true, "Group", groupInfo));
        }
        else if (action == "AddToTempGroup")
        {
            AccountInfo        groupInfo = AccountImpl.Instance.GetUserInfo(Convert.ToInt32(ps["GroupID"]));
            List <AccountInfo> users     = new List <AccountInfo>();
            foreach (string id in ps["IDS"].ToString().Split(new char[] { ',' }))
            {
                AccountInfo user = AccountImpl.Instance.GetUserInfo(Convert.ToInt32(id));
                if (!groupInfo.ContainsMember(user.ID))
                {
                    users.Add(user);
                }
            }
            if (users.Count > 0)
            {
                AccountImpl.Instance.AddUsersToGroup(Utility.ParseIntArray(ps["IDS"].ToString()), groupInfo.ID);
                var notify_data = Utility.RenderHashJson("GroupID", groupInfo.ID, "GroupInfo", groupInfo, "Users", users);
                foreach (int friendid in groupInfo.Friends)
                {
                    if (friendid != 2 && SessionManagement.Instance.IsOnline(friendid))
                    {
                        SessionManagement.Instance.Send(friendid, "GLOBAL:ADD_TEMP_GROUP", notify_data);
                    }
                }
            }

            List <int> notify_users = new List <int>();
            foreach (AccountInfo u in users)
            {
                notify_users.Add(u.ID);
            }
            SessionManagement.Instance.NotifyResetListCache(notify_users.ToArray(), false, false, new AccountInfo[] { groupInfo });
            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "GetMultiUsersInfo")
        {
            Hashtable infos = new Hashtable();
            if (Convert.ToBoolean(ps["ByName"]))
            {
                foreach (string name in ps["Data"].ToString().Split(new char[] { ',' }))
                {
                    int id = AccountImpl.Instance.GetUserID(name);
                    infos[name] = AccountImpl.Instance.GetUserInfo(id).DetailsJson;
                }
            }
            else
            {
                foreach (string id in ps["Data"].ToString().Split(new char[] { ',' }))
                {
                    infos[id] = AccountImpl.Instance.GetUserInfo(Convert.ToInt32(id)).DetailsJson;
                }
            }
            return(Utility.RenderHashJson("Infos", infos));
        }
        else if (action == "GetMessageRecordUsers")
        {
            AccountInfo cu = ServerImpl.Instance.GetCurrentUser(Context);
            DataTable   dt = MessageImpl.Instance.GetMessageRecordUsers(cu.ID);
            return(Utility.RenderHashJson("Users", dt.Rows));
        }
        else if (action == "NewComment")
        {
            ServerImpl.Instance.CommonStorageImpl.NewComment(
                UserID,
                Convert.ToInt32(ps["ReceiverID"]),
                ps["Content"] as string,
                ps["Tel"] as string,
                ps["Mail"] as string,
                ps["Name"] as string
                );

            AccountImpl.Instance.RefreshUserInfo(UserID);

            return(Utility.RenderHashJson(
                       "Result", true
                       ));
        }
        else if (action == "GetUnreadComment")
        {
            AccountInfo info      = AccountImpl.Instance.GetUserInfo(UserID);
            DataTable   dtComment = ServerImpl.Instance.CommonStorageImpl.GetUnreadComment(info.IsAdmin ? 0 : info.ID, 0);
            return(Utility.RenderHashJson("Comments", dtComment.Rows));
        }
        else if (action == "HasUnreadComment")
        {
            AccountInfo info  = AccountImpl.Instance.GetUserInfo(UserID);
            int         count = ServerImpl.Instance.CommonStorageImpl.HasUnreadComment(info.ID);
            return(Utility.RenderHashJson("Count", count));
        }
        else if (action == "ReLogin")
        {
            SessionManagement.Instance.NewSession(UserID, ps["SessionID"].ToString());

            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "MarkStatus")
        {
            AccountInfo cu = ServerImpl.Instance.GetCurrentUser(Context);
            SessionManagement.Instance.MarkStatus(cu.ID, ps["Status"].ToString());
            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "SendAddFriendRequest")
        {
            string peerName = ps["Peer"].ToString();
            int    peerId   = AccountImpl.Instance.GetUserID(peerName);

            if (peerId == UserID)
            {
                throw new Exception("不能添加自己为好友!");
            }

            AccountInfo peerInfo    = AccountImpl.Instance.GetUserInfo(peerId);
            AccountInfo currentUser = AccountImpl.Instance.GetUserInfo(UserID);

            if (peerInfo == null || (peerInfo.Type == 1 && peerInfo.SubType == 1))
            {
                throw new Exception(String.Format("用户(或群组) \"{0}\" 不存在!", peerName));
            }

            if (peerInfo.Type == 0)
            {
                AccountInfo cu = currentUser;
                if ((peerInfo.SubType == 1 && cu.SubType == 1) || currentUser.ContainsFriend(peerInfo.ID))
                {
                    throw new Exception(String.Format("用户 \"{0}({1})\" 已经是您的好友!", peerInfo.Nickname, peerName));
                }

                MessageImpl.Instance.NewMessage(
                    peerInfo.ID, AccountImpl.AdminstratorID,
                    Utility.RenderHashJson("Type", "AddFriendRequest", "Peer", currentUser, "Info", ps["Info"] as string),
                    null, false
                    );
            }
            else
            {
                if (currentUser.ContainsFriend(peerInfo.ID))
                {
                    throw new Exception(String.Format("您已加入群 \"{0}({1})\"!", peerInfo.Nickname, peerName));
                }

                if (peerInfo.Creator != AccountImpl.AdminID)
                {
                    MessageImpl.Instance.NewMessage(
                        peerInfo.Creator, AccountImpl.AdminstratorID,
                        Utility.RenderHashJson(
                            "Type", "AddGroupRequest",
                            "User", currentUser,
                            "Group", peerInfo,
                            "Info", ps["Info"] as string
                            ),
                        null, false
                        );
                }
            }

            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "RemoveFromGroup")
        {
            int user  = Convert.ToInt32(ps["User"]);
            int group = Convert.ToInt32(ps["Group"]);

            AccountInfo cu        = ServerImpl.Instance.GetCurrentUser(Context);
            AccountInfo groupInfo = AccountImpl.Instance.GetUserInfo(group);
            AccountInfo userInfo  = AccountImpl.Instance.GetUserInfo(user);

            AccountImpl.Instance.RemoveFromGroup(user, group);

            SessionManagement.Instance.SendToGroupMembers(group, "GLOBAL:REMOVE_FROM_GROUP", Utility.RenderHashJson("GroupID", groupInfo.ID, "User", userInfo));
            SessionManagement.Instance.Send(user, "GLOBAL:REMOVE_COMM_FRIEND", Utility.RenderHashJson("CommFriend", groupInfo.DetailsJson));

            string content = Utility.RenderHashJson(
                "Type", "ExitGroupNotify",
                "User", userInfo,
                "Group", groupInfo
                );
            MessageImpl.Instance.NewMessage(groupInfo.ID, AccountImpl.AdminstratorID, content, null, false);

            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "AddFriend")
        {
            String peerName = ps["Peer"].ToString();
            int    peerId   = AccountImpl.Instance.GetUserID(peerName);

            AccountInfo peerInfo    = AccountImpl.Instance.GetUserInfo(peerId);
            AccountInfo currentUser = AccountImpl.Instance.GetUserInfo(UserID);

            if (!currentUser.ContainsFriend(peerInfo.ID))
            {
                AccountImpl.Instance.AddFriend(UserID, peerInfo.ID);

                string content = Utility.RenderHashJson(
                    "Type", "AddFriendNotify",
                    "User", currentUser,
                    "Peer", peerInfo,
                    "Info", ps["Info"] as string
                    );

                MessageImpl.Instance.NewMessage(peerInfo.ID, AccountImpl.AdminstratorID, content, null, false);
                MessageImpl.Instance.NewMessage(UserID, AccountImpl.AdminstratorID, content, null, false);

                SessionManagement.Instance.Send(peerInfo.ID, "GLOBAL:ADD_COMM_FRIEND", Utility.RenderHashJson("CommFriend", currentUser.DetailsJson));
                SessionManagement.Instance.Send(UserID, "GLOBAL:ADD_COMM_FRIEND", Utility.RenderHashJson("CommFriend", peerInfo.DetailsJson));
            }
            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "AddToGroup")
        {
            int         user      = Convert.ToInt32(ps["User"]);
            int         group     = Convert.ToInt32(ps["Group"]);
            AccountInfo userInfo  = AccountImpl.Instance.GetUserInfo(user);
            AccountInfo groupInfo = AccountImpl.Instance.GetUserInfo(group);

            AccountImpl.Instance.AddFriend(user, group);

            SessionManagement.Instance.SendToGroupMembers(group, "GLOBAL:ADD_TO_GROUP", Utility.RenderHashJson("GroupID", group, "User", userInfo.DetailsJson));
            SessionManagement.Instance.Send(user, "GLOBAL:ADD_COMM_FRIEND", Utility.RenderHashJson("CommFriend", groupInfo.DetailsJson));

            string content = Utility.RenderHashJson(
                "Type", "AddToGroupNotify",
                "User", AccountImpl.Instance.GetUserInfo(user),
                "Group", AccountImpl.Instance.GetUserInfo(group)
                );
            MessageImpl.Instance.NewMessage(groupInfo.ID, AccountImpl.AdminstratorID, content, null, false);

            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "Register")
        {
            int id = AccountImpl.Instance.CreateUser(
                ps["Name"].ToString(),
                ps["Nickname"].ToString(),
                ps["Password"].ToString(),
                ps["EMail"].ToString(),
                -1,
                0,
                ""
                );

            AccountInfo newUser = AccountImpl.Instance.GetUserInfo(id);
            Custom.CustomServerImpl.AfterCreateUser(ServerImpl.Instance, AccountImpl.Instance, SessionManagement.Instance, newUser);

            return(Utility.RenderHashJson("Info", newUser));
        }
        else if (action == "RemoveSession")
        {
            AccountInfo cu = ServerImpl.Instance.GetCurrentUser(Context);
            if (cu != null)
            {
                string sessionId1 = ps["SessionID"].ToString();
                SessionManagement.Instance.RemoveSession(cu.ID, sessionId1);
                string data = Utility.RenderHashJson(
                    "User", cu.ID,
                    "State", SessionManagement.Instance.IsOnline(cu.ID) ? "Online" : "Offline",
                    "Details", cu.DetailsJson
                    );
                SessionManagement.Instance.Send("UserStateChanged", data);
            }
            return(Utility.RenderHashJson("Result", true));
        }
        else if (action == "CreateTempUser")
        {
            String password = Guid.NewGuid().ToString().Replace("-", "").ToUpper();

#if DEBUG
            string ip = "117.136.10.171";
#else
            string ip = Context.Request.ServerVariables["REMOTE_ADDR"];
#endif

            int         id    = AccountImpl.Instance.CreateTempUser(ip);
            AccountInfo cu    = AccountImpl.Instance.GetUserInfo(id);
            Hashtable   items = new Hashtable();
            items["ResetTempUserPassword"] = password;
            AccountImpl.Instance.UpdateUserInfo(cu.ID, items);

            return(Utility.RenderHashJson("Info", cu.DetailsJson, "Password", password));
        }

        throw new NotImplementedException(String.Format("Command \"{0}\" isn't implemented", action));
    }
            public string Login2()
            {
                try
                {
                    var helper = new HttpHelper();
                    var str    = "http://www.globalcompanions.com/";

                    var item = new HttpItem
                    {
                        URL = str,
                        Allowautoredirect  = true,
                        AutoRedirectCookie = true
                    };

                    var result = helper.GetHtml(item);
                    if (result.StatusCode != HttpStatusCode.OK)
                    {
                        return("登录失败(" + result.StatusCode + ")");
                    }

                    LoginParam pararm = GetPararm(result.Html);
                    if (pararm == null)
                    {
                        return("登录失败(LoginParam failed)");
                    }
                    pararm.ctl00_Header_cntrlLogin_txtBoxLogin    = UserName;
                    pararm.ctl00_Header_cntrlLogin_txtBoxPassword = Password;

                    var header = new WebHeaderCollection();
                    header.Add("Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
                    header.Add("Accept-Encoding:gzip,deflate");
                    item = new HttpItem
                    {
                        URL                = "http://www.globalcompanions.com/default.aspx",
                        Referer            = "http://www.globalcompanions.com/",
                        Allowautoredirect  = false,
                        AutoRedirectCookie = false,
                        Host               = "www.globalcompanions.com",
                        Method             = "POST",
                        Header             = header,
                        Postdata           = pararm.ToPostData(),
                        Cookie             = result.Cookie,
                        Accept             = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                        UserAgent          = "Mozilla/5.0 (compatible;Windows NT 6.1; WOW64;Trident/6.0;MSIE 9.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.27 Safari/537.36",
                        ContentType        = "application/x-www-form-urlencoded"
                    };
                    result = helper.GetHtml(item);

                    item.URL    = result.RedirectUrl;
                    item.Cookie = result.Cookie;
                    result      = helper.GetHtml(item);
                    if (result.StatusCode != HttpStatusCode.OK)
                    {
                        return("登录失败(" + result.StatusCode + ")");
                    }

                    var loginResult = GetLoginResult(result.Html);
                    if (loginResult.IndexOf("登录成功", StringComparison.Ordinal) >= 0)
                    {
                        IsLogined = true;
                        Cookie    = item.Cookie;
                        if (result.Cookie == null)
                        {
                            return(loginResult);
                        }
                        if (result.Cookie == "")
                        {
                            return(loginResult);
                        }
                        Cookie = Cookie + ";" + result.Cookie;
                    }
                    return(loginResult);
                }
                catch (Exception exception)
                {
                    return("登录失败:" + exception.Message);
                }
            }
            public string Login()
            {
                try
                {
                    var helper = new HttpHelper();
                    var str    = "http://www.globalcompanions.com/";

                    var header = new WebHeaderCollection();
                    header.Add("Accept-Encoding:gzip,deflate");
                    var item = new HttpItem
                    {
                        URL = str,
                        Allowautoredirect  = true,
                        AutoRedirectCookie = true
                    };

                    var result = helper.GetHtml(item);
                    if (result.StatusCode != HttpStatusCode.OK)
                    {
                        return("登录失败(" + result.StatusCode + ")");
                    }

                    LoginParam pararm = GetPararm(result.Html);
                    if (pararm == null)
                    {
                        return("登录失败(LoginParam failed)");
                    }
                    pararm.ctl00_Header_cntrlLogin_txtBoxLogin    = UserName;
                    pararm.ctl00_Header_cntrlLogin_txtBoxPassword = Password;

                    var loginParameters = pararm.ToPostData();
                    var pBuffers        = Encoding.UTF8.GetBytes(loginParameters);

                    var request = (HttpWebRequest)WebRequest.Create("http://www.globalcompanions.com/default.aspx");
                    request.UserAgent         = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36";
                    request.Referer           = "http://www.globalcompanions.com/";
                    request.AllowAutoRedirect = true;

                    request.Method        = "Post";
                    request.ContentType   = "application/x-www-form-urlencoded";
                    request.ContentLength = pBuffers.Length;
                    var requestStream = request.GetRequestStream();
                    var c             = new CookieContainer();
                    request.CookieContainer = c;
                    requestStream.Write(pBuffers, 0, pBuffers.Length);
                    requestStream.Close();

                    var requestStr = JsonConvert.SerializeObject(request, new JsonSerializerSettings {
                        MaxDepth = 6
                    });

                    var response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        return("登录失败(" + response.StatusCode + ")");
                    }
                    var cookies = response.Headers.Get("Set-Cookie");

                    //request = (HttpWebRequest)WebRequest.Create(url);
                    //request.CookieContainer = new CookieContainer();
                    //request.CookieContainer.SetCookies(request.RequestUri, cookies);
                    response = (HttpWebResponse)request.GetResponse();

                    var rStream = response.GetResponseStream();
                    var r       = new StreamReader(rStream);
                    var content = r.ReadToEnd();

                    var loginResult = GetLoginResult(content);
                    if (loginResult.IndexOf("登录成功", StringComparison.Ordinal) >= 0)
                    {
                        IsLogined = true;
                        Cookie    = item.Cookie;
                        if (result.Cookie == null)
                        {
                            return(loginResult);
                        }
                        if (result.Cookie == "")
                        {
                            return(loginResult);
                        }
                        Cookie = Cookie + ";" + result.Cookie;
                    }
                    return(loginResult);
                }
                catch (Exception exception)
                {
                    return("登录失败:" + exception.Message);
                }
            }