/* * public ServerPacketId ReLogin(DataPacket packet) * { * Console.WriteLine(tcpPacket.client.RemoteEndPoint.ToString() + " 재로그인요청"); * * AccountPacket accountPacket = new AccountPacket(data); * AccountData accountData = accountPacket.GetData(); * * Console.WriteLine("아이디 : " + accountData.Id); * * try * { * if (database.AccountData.Contains(accountData.Id)) * { * if (!loginUser.ContainsValue(accountData.Id)) * { * msg[0] = (byte)Result.Success; * Console.WriteLine("로그인 성공"); * loginUser.Add(tcpPacket.client, accountData.Id); * } * else * { * Console.WriteLine("현재 접속중인 아이디입니다."); * * if (CompareIP(GetSocket(accountData.Id).RemoteEndPoint.ToString(), tcpPacket.client.RemoteEndPoint.ToString())) * { * loginUser.Remove(GetSocket(accountData.Id)); * Console.WriteLine("현재 접속중 해제"); * } * msg[0] = (byte)Result.Fail; * } * } * } * catch * { * Console.WriteLine("DataHandler::ReLogin.ContainsValue 에러"); * msg[0] = (byte)Result.Fail; * } * * return ServerPacketId.LoginResult; * } */ public void Logout(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + " 로그아웃요청"); Result result = Result.Fail; if (RemoveUserData(packet.client)) { result = Result.Success; } else { result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.LogoutResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//대기방 -> 캐릭터 선택 public void ReturnToSelect(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "캐릭터 선택창으로 돌아가기"); string id = loginUser[packet.client]; Result result = Result.Fail; if (userState.ContainsKey(id)) { userState[id].characterId = -1; result = Result.Success; } else { Console.WriteLine("DataHandler::ReturnToSelect.ContainsKey 에러"); result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ServerPacketId.ReturnToSelectResult); byte[] msg = CreatePacket(resultPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//게임 종료 -> Server public void GameClose() { Debug.Log("게임 종료"); ResultData resultData = new ResultData(); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ClientPacketId.GameClose); byte[] msg = CreatePacket(resultDataPacket); try { tcpSock.Send(msg, 0, msg.Length, SocketFlags.None); } catch { Debug.Log("GameClose.Send 에러"); } try { tcpSock.Close(); udpSock.Close(); } catch { Debug.Log("이미 소켓이 닫혀있습니다."); } }
//방 퇴장 public void ExitRoom(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "방 퇴장"); ExitRoomPacket exitRoomPacket = new ExitRoomPacket(packet.msg); ExitRoomData exitRoomData = exitRoomPacket.GetData(); string id = loginUser[packet.client]; int characterId = userState[id].characterId; Result result = Result.Fail; int roomNum = -1; bool empty = false; Console.WriteLine(userState[id].state); try { empty = roomManager.ExitRoom(userState[id].state, packet.client); roomNum = userState[id].state; userState[id].state = -1; result = Result.Success; } catch { Console.WriteLine("DataHandler::ExitRoom.DeletePlayer 에러"); result = Result.Fail; return; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.ExitRoomNumber); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } Console.WriteLine(roomNum); if (roomNum != -1 && !empty) { for (int playerIndex = 0; playerIndex < RoomManager.maxPlayerNum; playerIndex++) { if (roomManager.Room[exitRoomData.RoomNum].Socket[playerIndex] != null) { packet = new DataPacket(new byte[0], roomManager.Room[exitRoomData.RoomNum].Socket[playerIndex]); RequestRoomUserData(packet); } } } }
private void buttonS_Click(object sender, EventArgs e) { pictureR.Visible = false; pictureP.Visible = false; pictureS.Visible = true; string r = "SCISSORS"; ResultPacket result = new ResultPacket(r); Send(result); }
//연결 확인 답장 -> Server public void ServerConnectionAnswer() { ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.ServerConnectionAnswer); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//게임 시작 public void StartGame(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "게임 시작"); string id = loginUser[packet.client]; int roomNum = userState[id].state; if (roomNum < 0) { Console.WriteLine("방에 입장해있지 않습니다."); return; } roomManager.Room[roomNum].GameStart(); byte result = (byte)Result.Success; ResultData resultData = new ResultData(result); ResultPacket resultPacket = new ResultPacket(resultData); bool setHost = false; for (int i = 0; i < RoomManager.maxPlayerNum; i++) { resultPacket.SetPacketId((int)ServerPacketId.StartGame); byte[] msg = CreatePacket(resultPacket); if (roomManager.Room[roomNum].Socket[i] != null) { Console.WriteLine(i + "번 유저 : " + roomManager.Room[roomNum].Socket[i].RemoteEndPoint.ToString()); packet = new DataPacket(msg, roomManager.Room[roomNum].Socket[i]); lock (sendLock) { sendMsgs.Enqueue(packet); } if (!setHost) { setHost = true; resultPacket.SetPacketId((int)ServerPacketId.SetHost); msg = CreatePacket(resultPacket); packet = new DataPacket(msg, roomManager.Room[roomNum].Socket[i]); lock (sendLock) { sendMsgs.Enqueue(packet); } } } } }
//로그아웃 -> Server public void Logout() { Debug.Log("로그아웃"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.Logout); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//선택 창으로 돌아가기 -> Server public void ReturnToSelect() { Debug.Log("선택 창으로 돌아가기"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.ReturnToSelect); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//게임 시작 -> Server public void StartGame() { Debug.Log("게임 시작"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.StartGame); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//UDP 연결 요청 -> Server public void RequestUdpConnection() { Debug.Log("Udp 연결 요청"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.RequestUdpConnection); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//Udp 답신 -> Client public void UdpAnswer(EndPoint newEndPoint, int udpId) { Debug.Log(newEndPoint.ToString() + " Udp 답신 보냄 Id : " + udpId); ResultData resultData = new ResultData(new byte()); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)P2PPacketId.UdpAnswer); DataPacket packet = new DataPacket(CreateUdpPacket(resultDataPacket, udpId), newEndPoint); sendMsgs.Enqueue(packet); }
//연결 완료 -> Server public void LoadingComplete() { Debug.Log("Udp 연결 완료"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.LoadingComplete); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//캐릭터 정보 요청 -> Server public void RequestCharacterStatus() { Debug.Log("캐릭터 정보 요청"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.RequestCharacterStatus); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//방 목록 요청 -> Server public void RequestRoomList() { Debug.Log("방 목록 요청"); ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.RequestRoomList); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//던전 몬스터 소환 데이터 요청 -> Server public void RequestMonsterSpawnList() { Debug.Log("몬스터 소환 데이터 요청"); byte result = (byte)UIManager.Instance.RoomUIManager.DungeonId; ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ClientPacketId.RequestMonsterSpawnList); DataPacket packet = new DataPacket(CreatePacket(resultPacket), null); sendMsgs.Enqueue(packet); }
//연결 체크 public void ServerConnectionCheck(DataPacket packet) { ResultData resultData = new ResultData(); ResultPacket resultPacket = new ResultPacket(resultData); resultPacket.SetPacketId((int)ServerPacketId.ServerConnectionCheck); byte[] msg = CreatePacket(resultPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//Server - 탈퇴 결과 public void DeleteAccountResult(DataPacket packet) { Debug.Log("탈퇴 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(uiManager.Dialog(1.0f, "탈퇴 성공")); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(uiManager.Dialog(1.0f, "탈퇴 실패")); } }
//Server - 가입 결과 public void CreateAccountResult(DataPacket packet) { Debug.Log("가입 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(uiManager.Dialog(1.0f, "가입 성공")); uiManager.LoginUIManager.CreateAccountSuccess(); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(uiManager.Dialog(1.0f, "가입 실패")); } }
//Server - 게임 시작 public void StartGame(DataPacket packet) { Debug.Log("게임 시작 결과"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { SceneChanger.Instance.SceneChange(SceneChanger.SceneName.TeddyBearStage1, true); } else if (resultData.Result == (byte)Result.Fail) { Debug.Log("게임 시작 실패"); } }
//Server - 선택 창으로 돌아가기 결과 수신 public void ReturnToSelectResult(DataPacket packet) { Debug.Log("선택 창으로 돌아가기 결과"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { SceneChanger.Instance.SceneChange(SceneChanger.SceneName.SelectScene, true); } else { Debug.Log("선택창으로 돌아가기 실패"); } }
//Server - 캐릭터 삭제 결과 public void DeleteCharacterResult(DataPacket packet) { Debug.Log("캐릭터 삭제 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(UIManager.Instance.Dialog(1.0f, "캐릭터 삭제 성공")); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(UIManager.Instance.Dialog(1.0f, "캐릭터 삭제 실패")); } }
//Server - 캐릭터 선택 결과 public void SelectCharacterResult(DataPacket packet) { Debug.Log("캐릭터 선택 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(uiManager.Dialog(1.0f, "캐릭터 선택 성공")); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(uiManager.Dialog(1.0f, "캐릭터 선택 실패")); } }
//캐릭터 삭제 public void DeleteCharacter(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "캐릭터 삭제"); DeleteCharacterPacket deleteCharacterPacket = new DeleteCharacterPacket(packet.msg); DeleteCharacterData deleteCharacterData = deleteCharacterPacket.GetData(); string id = ""; try { id = loginUser[packet.client]; } catch { Console.WriteLine("Datahandler::DeleteCharacter.loginUser 에러"); } UserData userData = database.GetUserData(id); Result result = Result.Fail; try { userData.DeleteHero(deleteCharacterData.Index); result = Result.Success; } catch { Console.WriteLine("DataHandler::DeleteCharacter.DeleteHero에러"); result = Result.Fail; } database.FileSave(id + ".data", userData); ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.DeleteChracterResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//Server - 게임 시작 public void StartGame(DataPacket packet) { Debug.Log("게임 시작"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { Debug.Log("게임 시작"); DataSender.Instance.RequestUdpConnection(); } else if (resultData.Result == (byte)Result.Fail) { Debug.Log("게임 시작 실패"); } }
//Server - 로그인 결과 public void LoginResult(DataPacket packet) { Debug.Log("로그인 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(uiManager.Dialog(1.0f, "로그인 성공")); SceneChanger.Instance.SceneChange(SceneChanger.SceneName.SelectScene, true); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(uiManager.Dialog(1.0f, "로그인 실패")); } }
//Server - 캐릭터 생성 결과 public void CreateCharacterResult(DataPacket packet) { Debug.Log("캐릭터 생성 결과 수신"); ResultPacket resultPacket = new ResultPacket(packet.msg); ResultData resultData = resultPacket.GetData(); if (resultData.Result == (byte)Result.Success) { StartCoroutine(uiManager.Dialog(1.0f, "캐릭터 생성 성공")); SceneChanger.Instance.SceneChange(SceneChanger.SceneName.SelectScene, false); } else if (resultData.Result == (byte)Result.Fail) { StartCoroutine(uiManager.Dialog(1.0f, "캐릭터 생성 실패")); } }
public void DeleteAccount(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + " 탈퇴요청"); AccountPacket accountPacket = new AccountPacket(packet.msg); AccountData accountData = accountPacket.GetData(); Console.WriteLine("아이디 : " + accountData.Id + "패스워드 : " + accountData.Id); Result result = Result.Fail; try { if (database.DeleteAccountData(accountData.Id, accountData.Password) == Result.Success) { result = Result.Success; Console.WriteLine("탈퇴 성공"); } else { result = Result.Fail; Console.WriteLine("탈퇴 실패"); } } catch { Console.WriteLine("DataHandler::DeleteAccount.RemovePlayerData 에러"); result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.DeleteAccountResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//캐릭터 생성 public void CreateCharacter(DataPacket packet) { Console.WriteLine(packet.client.RemoteEndPoint.ToString() + "캐릭터 생성"); CreateCharacterPacket createCharacterPacket = new CreateCharacterPacket(packet.msg); CreateCharacterData createCharacterData = createCharacterPacket.GetData(); Console.WriteLine("이름 : " + createCharacterData.HName); Console.WriteLine("직업 : " + createCharacterData.HClass); Console.WriteLine("성별 : " + createCharacterData.Gender); string id = loginUser[packet.client]; UserData userData = database.GetUserData(id); Result result = Result.Fail; try { userData.CreateHero(createCharacterData); database.FileSave(id + ".data", userData); result = Result.Success; } catch { Console.WriteLine("DataHandler::CreateCharacter.CreateHero 에러"); result = Result.Fail; } ResultData resultData = new ResultData((byte)result); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)ServerPacketId.CreateCharacterResult); byte[] msg = CreatePacket(resultDataPacket); packet = new DataPacket(msg, packet.client); lock (sendLock) { sendMsgs.Enqueue(packet); } }
//UDP 연결 확인 요청 -> Client public void RequestConnectionCheck(EndPoint endPoint) { Debug.Log(endPoint.ToString() + " 연결 체크 요청"); int index = NetworkManager.Instance.GetUserIndex(endPoint); ResultData resultData = new ResultData(new byte()); ResultPacket resultDataPacket = new ResultPacket(resultData); resultDataPacket.SetPacketId((int)P2PPacketId.RequestConnectionCheck); DataPacket packet = new DataPacket(CreateUdpPacket(resultDataPacket, udpId[index]), endPoint); sendMsgs.Enqueue(packet); SendData sendData = new SendData(udpId[index], endPoint, packet.msg); NetworkManager.Instance.ReSendManager.AddReSendData(sendData, index); udpId[index]++; }