public override void ProcessPacket(BasePacket packet) { PacketEnum.ProcessType processType = packet.ProcessType; switch (processType) { case PacketEnum.ProcessType.Connect: { MNetworkPlayer player = new MNetworkPlayer(packet.Serial); NetworkLobby.AddPlayer(player); player.PlayerState = MNetworkPlayer.MPlayerState.Connected; Debug.Log($"S:[{packet.Serial}] Connected"); break; } case PacketEnum.ProcessType.Disconnect: { NetworkLobby.DeletePlayer(packet.Serial); Debug.Log($"S:[{packet.Serial}] Disconnected"); break; } case PacketEnum.ProcessType.Data: { OnMessage(packet); break; } } }
private void OnChattingRequest(ProtobufPacket <ChattingRequestPacket> packet) { ChattingRequestPacket request = packet.ProtobufMessage; ChattingAnswerPacket send = new ChattingAnswerPacket(); // Packet Data Set MNetworkPlayer sender = NetworkLobby.FindPlayer(request.Sender); if (sender == null) { return; } MNetworkRoom room = NetworkLobby.FindRoom(sender.RoomKey); if (room == null) { return; } send.Text = $"[{Time.TimeLogHMS}] [{request.Sender}] : {request.Text}"; Debug.Log($"S:[{packet.Serial}] Chat: <[{sender.RoomKey}]{send.Text}>"); SendPacket(new ProtobufPacket <ChattingAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data, (int)MessageType.ChattingAnswer, send), room.SerialList); }
private void OnWhisperRequest(ProtobufPacket <WhisperRequestPacket> packet) { WhisperRequestPacket request = packet.ProtobufMessage; WhisperAnswerPacket send = new WhisperAnswerPacket(); // Packet Data Set MNetworkPlayer listener = NetworkLobby.FindPlayer(request.Listener); if (listener == null) { return; } send.Sender = request.Sender; send.Text = $"From {request.Sender} : {request.Text}"; Debug.Log($"S:[{packet.Serial}] Whisper Send Request. SENDER: [{request.Sender}] LISTENER: [{listener.UserName}]"); SendPacket(new ProtobufPacket <WhisperAnswerPacket>(listener.Serial, PacketEnum.ProcessType.Data, (int)MessageType.WhisperAnswer, send)); }
private void OnExitRoomRequest(ProtobufPacket <ExitRoomRequestPacket> packet) { ExitRoomRequestPacket request = packet.ProtobufMessage; ExitRoomAnswerPacket send = new ExitRoomAnswerPacket(); // Packet Data Set MNetworkRoom targetRoom = NetworkLobby.FindRoom(request.RoomName); MNetworkPlayer targetPlayer = NetworkLobby.FindPlayer(request.UserName); bool result = NetworkLobby.ExitFromRoom(targetRoom, targetPlayer); send.Success = result; Debug.Log($"S:[{packet.Serial}] Room exit request. Name: [{request.UserName}] Room: [{request.RoomName}] Result: [{send.Success}]"); if (targetRoom.PlayerCount == 0) { if (NetworkLobby.DeleteRoom(request.RoomName) == true) { Debug.Log($"Room deleted. Room: [{request.RoomName}]"); } } else { ChattingAnswerPacket exitMessage = new ChattingAnswerPacket(); exitMessage.Text = $"{targetPlayer.UserName} 님이 방에서 나갔습니다."; SendPacket(new ProtobufPacket <ChattingAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data, (int)MessageType.ChattingAnswer, exitMessage), targetRoom.SerialList); } SendPacket(new ProtobufPacket <ExitRoomAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data, (int)MessageType.ExitRoomAnswer, send)); }
private void OnLoginRequest(ProtobufPacket <LoginRequestPacket> packet) { LoginRequestPacket request = packet.ProtobufMessage; LoginAnswerPacket send = new LoginAnswerPacket(); // Packet Data Set // 로그인 핸들러에게 로그인이 성공했는지를 알아온다. bool success = loginHandler.SignIn(request.ID, request.Password, out string userName); // 보낼 패킷의 정보 설정 send.UserName = userName; send.Success = success; send.Context = "로그인에 성공했습니다."; MNetworkPlayer player = NetworkLobby.FindPlayer(packet.Serial); if (send.Success == false) { send.Context = "아이디 또는 비밀번호를 확인해주세요."; } else if (player != null) { if (player.PlayerState >= MNetworkPlayer.MPlayerState.LoginSuccess) { // 이미 접속중인 클라이언트 처리 send.Success = false; send.Context = "이미 접속된 아이디입니다."; } else { MNetworkPlayer find = NetworkLobby.FindPlayer(userName); if (find != null) { // 이미 해당 닉네임을 가진 유저가 접속중임을 처리 send.Success = false; send.Context = "해당 아이디는 이미 다른\n컴퓨터에서 사용 중입니다."; } else { // 없다면 네임 리스트에 추가해준다. player.ID = request.ID; player.Password = request.Password; player.PlayerState = MNetworkPlayer.MPlayerState.LoginSuccess; player.UserName = userName; NetworkLobby.AddPlayerToNameList(player); send.Success = true; } } } if (send.Success == true) { Debug.Log($"S:[{packet.Serial}] The login was successful. Name: {player.UserName}"); } else { Debug.Log($"S:[{packet.Serial}] Login failed. Name: {player.UserName}"); } SendPacket(new ProtobufPacket <LoginAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data, (int)MessageType.LoginAnswer, send)); }