Пример #1
0
        /// <summary>
        /// 获取指定的用户在线的服务器线路ID
        /// </summary>
        /// <param name="roleID"></param>
        /// <returns></returns>
        public static int GetUserOnlineState(string userID)
        {
            int state           = 0;
            int oldServerLineID = -1;

            lock (_RegUserIDDict)
            {
                if (!_RegUserIDDict.TryGetValue(userID, out oldServerLineID))
                {
                    oldServerLineID = -1;
                }
            }

            if (oldServerLineID <= -1)
            {
                return(state);
            }

            //判断是否服务器已经当掉
            if (LineManager.GetLineHeartState(oldServerLineID) > 0)
            {
                state = 1;
            }

            return(state);
        }
Пример #2
0
        /// <summary>
        /// 添加用户ID到字典中
        /// </summary>
        /// <param name="roleID"></param>
        public static bool RegisterUserID(string userID, int serverLineID, int state)
        {
            bool ret = true;

            lock (_RegUserIDDict)
            {
                int oldServerLineID = -1;
                if (state <= 0) //注销, 下边代码加入限制,防止错误的注销,导致的重复登录。
                {
                    //注册前先判断是否已经存在
                    if (_RegUserIDDict.TryGetValue(userID, out oldServerLineID))
                    {
                        //判断是否服务器ID是否相同
                        if (oldServerLineID == serverLineID)
                        {
                            _RegUserIDDict.Remove(userID);
                        }
                    }
                }
                else //注册
                {
                    //注册前先判断是否已经存在
                    if (_RegUserIDDict.TryGetValue(userID, out oldServerLineID))
                    {
                        //判断是否服务器已经当掉
                        if (LineManager.GetLineHeartState(oldServerLineID) > 0)
                        {
                            ret = false; //已经在线
                        }
                        else
                        {
                            _RegUserIDDict[userID] = serverLineID;
                        }
                    }
                    else
                    {
                        _RegUserIDDict[userID] = serverLineID;
                    }
                }
            }

            return(ret);
        }