//-------------------------------------- private void HandleEnterScene(Msg_LR_EnterScene msg, PBChannel channel, int handle, uint seq) { ulong guid = msg.UserGuid; int roomId = msg.RoomID; bool isFieldThread; int ix = GetActiveRoomThreadIndex(roomId, out isFieldThread); if (ix < 0) { Msg_RL_EnterSceneResult replyBuilder = new Msg_RL_EnterSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; channel.Send(replyBuilder); } else { RoomThread roomThread; if (isFieldThread) { roomThread = field_roomthread_list_[ix]; } else { roomThread = roomthread_list_[ix]; } Msg_LR_RoomUserInfo rui = msg.UserInfo; User rsUser = user_pool_.NewUser(); LogSys.Log(LOG_TYPE.INFO, "NewUser {0} for {1} {2}", rsUser.LocalID, rui.Guid, rui.Key); rsUser.Init(); if (!rsUser.SetKey(rui.Key)) { LogSys.Log(LOG_TYPE.WARN, "user who's key is {0} already in room!", rui.Key); LogSys.Log(LOG_TYPE.INFO, "FreeUser {0} for {1} {2}, [RoomManager.HandleEnterScene]", rsUser.LocalID, rui.Guid, rui.Key); user_pool_.FreeUser(rsUser.LocalID); Msg_RL_EnterSceneResult replyBuilder = new Msg_RL_EnterSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomId; replyBuilder.Result = (int)SceneOperationResultEnum.User_Key_Exist; channel.Send(replyBuilder); } else { rsUser.LobbyUserData = rui; if (rui.IsMachine == true) { rsUser.UserControlState = (int)UserControlState.Ai; } else { rsUser.UserControlState = (int)UserControlState.User; } if (msg.HP > 0 && msg.MP > 0) { rsUser.SetHpArmor(msg.HP, msg.MP); } if (rui.EnterX > 0 && rui.EnterY > 0) { rsUser.SetEnterPoint(rui.EnterX, rui.EnterY); } roomThread.QueueAction(roomThread.AddUser, rsUser, roomId, (MyAction <bool, int, User>)((bool success, int sceneId, User user) => { if (success) { Msg_RL_EnterSceneResult replyBuilder = new Msg_RL_EnterSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomId; replyBuilder.Result = (int)SceneOperationResultEnum.Success; channel.Send(replyBuilder); } else { Msg_RL_EnterSceneResult replyBuilder = new Msg_RL_EnterSceneResult(); replyBuilder.UserGuid = guid; replyBuilder.RoomID = roomId; replyBuilder.Result = (int)SceneOperationResultEnum.Cant_Find_Room; channel.Send(replyBuilder); } })); } } }