GameFramework.Room.AddNewUser C# (CSharp) Метод

AddNewUser() приватный Метод

private AddNewUser ( User newUser ) : bool
newUser User
Результат bool
        internal bool AddNewUser(User newUser)
        {
            foreach (User us in room_users_) {
                if (us != null && us.Guid == newUser.Guid) {
                    //当前玩家已在游戏房间内
                    if (us.GetKey() == newUser.GetKey()) {
                        LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ",
                        cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey());
                        LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey());
                        user_pool_.FreeUser(newUser.LocalID);
                        return true;
                    } else if (us.UserControlState != (int)UserControlState.User) {
                        LogSys.Log(LOG_TYPE.DEBUG, "Add user success: User already in the room! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ",
                        cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey());
                        LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for old {1} {2}, [Room.AddNewUser]", us.LocalID, us.Guid, us.GetKey());
                        RemoveUser(us);
                        break;
                    } else {
                        LogSys.Log(LOG_TYPE.DEBUG, "Add user false: User already in the room and online! RoomID:{0}, Guid:{1}, OldUser[{2}]({3}) NewUser[{4}]({5}) ",
                        cur_room_id_, us.Guid, us.LocalID, us.GetKey(), newUser.LocalID, newUser.GetKey());
                        LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for new {1} {2}, [Room.AddNewUser]", newUser.LocalID, newUser.Guid, newUser.GetKey());
                        user_pool_.FreeUser(newUser.LocalID);
                        return false;
                    }
                }
            }
            can_close_time_ = 0;
            newUser.EnterRoomTime = TimeUtility.GetLocalMilliseconds();
            newUser.OwnRoom = this;
            newUser.RegisterObservers(room_observers_);
            newUser.CharacterCreateTime = TimeUtility.GetLocalMilliseconds();
            newUser.TimeCounter = 0;
            if ((int)UserControlState.Ai == newUser.UserControlState) {
                newUser.IsEntered = true;
            }
            if (null != m_ActiveScene && m_ActiveScene.SceneState == SceneState.Running) {
                Scene scene = m_ActiveScene;
                scene.EnterScene(newUser);
            }
            foreach (User otheruser in room_users_) {
                if (otheruser != null) {
                    otheruser.AddSameRoomUser(newUser);
                    newUser.AddSameRoomUser(otheruser);
                }
            }
            room_users_.Add(newUser);
            LogSys.Log(LOG_TYPE.DEBUG, "Add user success ! RoomID:{0} , UserGuid:{1}({2})",
              cur_room_id_, newUser.Guid, newUser.GetKey());

            m_CanFinish = true;
            return true;
        }

Usage Example

Пример #1
0
        internal void AddUser(IList <User> users, int roomId, MyAction <bool, int, IList <User> > callbackOnFinish)
        {
            Room room = GetRoomByID(roomId);

            if (null != room)
            {
                List <User> successUsers = new List <User>();
                for (int i = 0; i < users.Count; ++i)
                {
                    if (room.AddNewUser(users[i]))
                    {
                        successUsers.Add(users[i]);
                    }
                }
                if (null != callbackOnFinish)
                {
                    int   sceneId = 0;
                    Scene scene   = room.ActiveScene;
                    if (null != scene)
                    {
                        sceneId = scene.SceneResId;
                    }
                    callbackOnFinish(true, sceneId, successUsers);
                    return;
                }
            }
            if (null != callbackOnFinish)
            {
                callbackOnFinish(false, -1, null);
            }
        }