public bool Serialize(RoomNumberData data) { bool ret = true; ret &= Serialize(data.RoomNum); return(ret); }
//방 유저 정보 요청 -> Server public void RequestRoomUserData(int roomNum) { Debug.Log("방 유저 정보 요청"); RoomNumberData roomNumberData = new RoomNumberData(roomNum); RoomNumberPacket roomNumberPacket = new RoomNumberPacket(roomNumberData); roomNumberPacket.SetPacketId((int)ClientPacketId.RequestRoomUserData); DataPacket packet = new DataPacket(CreatePacket(roomNumberPacket), null); sendMsgs.Enqueue(packet); }
//Server - 방 생성 결과 수신 public void CreateRoomNumber(DataPacket packet) { Debug.Log("방 생성 결과 수신"); RoomNumberPacket resultPacket = new RoomNumberPacket(packet.msg); RoomNumberData resultData = resultPacket.GetData(); if (resultData.RoomNum < 0) { StartCoroutine(uiManager.Dialog(1.0f, "방 생성 실패")); } else if (resultData.RoomNum <= WaitingUIManager.maxRoomNum) { StartCoroutine(uiManager.Dialog(1.0f, "방 생성 성공")); uiManager.WaitingUIManager.CreateRoom(resultData.RoomNum); } }
//Server - 방 퇴장 결과 수신 public void ExitRoomNumber(DataPacket packet) { Debug.Log("방 퇴장 결과 수신"); RoomNumberPacket roomNumberPacket = new RoomNumberPacket(packet.msg); RoomNumberData roomNumberData = roomNumberPacket.GetData(); Debug.Log(roomNumberData.RoomNum); if (roomNumberData.RoomNum == (int)Result.Fail) { } else if (roomNumberData.RoomNum == (int)Result.Success) { SceneChanger.Instance.SceneChange(SceneChanger.SceneName.WaitingScene, false); } }
public bool Deserialize(ref RoomNumberData element) { if (GetDataSize() == 0) { // 데이터가 설정되지 않았다. return(false); } bool ret = true; byte roomNum = 0; ret &= Deserialize(ref roomNum); element = new RoomNumberData(roomNum); return(ret); }
//Server - 방 입장 결과 수신 public void EnterRoomNumber(DataPacket packet) { Debug.Log("방 입장 결과 수신"); RoomNumberPacket roomNumberPacket = new RoomNumberPacket(packet.msg); RoomNumberData roomNumberData = roomNumberPacket.GetData(); Debug.Log(roomNumberData.RoomNum); if (roomNumberData.RoomNum < 0) { StartCoroutine(uiManager.Dialog(1.0f, "방 입장 실패")); } else if (roomNumberData.RoomNum <= WaitingUIManager.maxPlayerNum) { StartCoroutine(uiManager.Dialog(1.0f, "방 입장 성공")); SceneChanger.Instance.SceneChange(SceneChanger.SceneName.RoomScene, false); } }
//방 입장 public void EnterRoom(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "방 입장"); EnterRoomPacket enterRoomPacket = new EnterRoomPacket(packet.msg); EnterRoomData enterRoomData = enterRoomPacket.GetData(); string id = ""; try { id = loginUser[packet.client]; } catch { Console.WriteLine("현재 로그인 되어있지 않은 아이디 입니다."); return; } int characterId = userState[id].characterId; if (characterId == -1) { Console.WriteLine("캐릭터가 선택되지 않았습니다."); return; } int result = -1; try { Console.WriteLine(enterRoomData.RoomNum + "번 방에 " + packet.client.RemoteEndPoint.ToString() + "유저 입장"); result = roomManager.Room[enterRoomData.RoomNum].AddPlayer(packet.client, database.GetHeroData(id, characterId)); if (result != -1) { userState[id].state = enterRoomData.RoomNum; } } catch { Console.WriteLine("DataHandler::EnterRoom.AddPlayer 에러"); result = -1; } if (result == -1) { return; } RoomNumberData resultData = new RoomNumberData(result); RoomNumberPacket resultPacket = new RoomNumberPacket(resultData); resultPacket.SetPacketId((int)ServerPacketId.EnterRoomNumber); byte[] msg = CreatePacket(resultPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } for (int playerIndex = 0; playerIndex < RoomManager.maxPlayerNum; playerIndex++) { if (roomManager.Room[enterRoomData.RoomNum].Socket[playerIndex] != null && playerIndex != result) { packet = new DataPacket(new byte[0], roomManager.Room[enterRoomData.RoomNum].Socket[playerIndex]); RequestRoomUserData(packet); } } }
//방 생성 public void CreateRoom(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "방 생성"); CreateRoomPacket createRoomPacket = new CreateRoomPacket(packet.msg); CreateRoomData createRoomData = createRoomPacket.GetData(); string id = ""; try { id = loginUser[packet.client]; } catch { Console.WriteLine("현재 로그인 되어있지 않은 아이디 입니다."); return; } int characterId = userState[id].characterId; if (characterId == -1) { Console.WriteLine("캐릭터가 선택되지 않았습니다."); return; } Console.WriteLine("Id : " + id); Console.WriteLine("characterId : " + characterId); Console.WriteLine("방 제목 : " + createRoomData.RoomName); int result = roomManager.CreateRoom(packet.client, database.GetHeroData(id, characterId), createRoomData); Console.WriteLine("방 생성 번호 : " + result); RoomNumberData resultData = new RoomNumberData(result); RoomNumberPacket resultPacket = new RoomNumberPacket(resultData); resultPacket.SetPacketId((int)ServerPacketId.CreateRoomNumber); byte[] msg = CreatePacket(resultPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } List <string> clients = new List <string>(loginUser.Values); foreach (string client in clients) { if (userState.ContainsKey(client)) { if (userState[client].state == -1) { packet = new DataPacket(new byte[0], FindSocketWithId(client)); RequestRoomList(packet); } } } }