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;
}