public void DataReceived(Packet p) { switch (p.GetHeader()) { case Headers.KEEP_ALIVE: { ChatServerConnectionManager.GetInstance().SendPacket(new Packet(Headers.KEEP_ALIVE)); break; } case Headers.HANDSHAKE_2: { ChatServerConnectionManager.GetInstance().SetLoginStatus("Connected"); // Finish handshake ChatServerConnectionManager.GetInstance().SendPacket(new Packet(Headers.HANDSHAKE_3)); // Request for a user ID Packet newPacket = new Packet(Headers.CLIENT_USERNAME); newPacket.AddString(ChatServerConnectionManager.GetInstance().user.username); ChatServerConnectionManager.GetInstance().SendPacket(newPacket); MenuManager.GetInstance().ShowMenu(MenuManager.Menu.MultiplayerLobby); break; } case Headers.SERVER_DISCONNECT: { ChatServerConnectionManager.GetInstance().DisconnectFromServer(); // Create a dialog, and add a listener to the OK button. ChatServerConnectionManager.GetInstance().OnDisconnect(); break; } case Headers.CLIENT_USER_ID: { // Set the received user ID. ChatServerConnectionManager.GetInstance().user.id = PacketUtil.DecodePacketInt(p, 0); // Console.Out.WriteLine("Received user ID from the server: " + ChatServerConnectionManager.GetInstance().user.id); break; } case Headers.CLIENT_CHANNEL: { UserManager.GetInstance().users.Clear(); // UserManager.GetInstance().users.Clear(); ChatServerConnectionManager.GetInstance().user.channelID = PacketUtil.DecodePacketInt(p, 0); // Console.Out.WriteLine("Switched channel to: " + ChatServerConnectionManager.GetInstance().user.channelID); break; } case Headers.CHAT_MESSAGE: { // Get the channel int channel = PacketUtil.DecodePacketInt(p, 0); // Get the message String message = PacketUtil.DecodePacketString(p, 4); ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.AddMessageToLog(message); } else if (menu is GameLobby) { GameLobby lobby = ((GameLobby)menu); lobby.AddMessageToLog(message); } break; } case Headers.NEW_USER: { int userID = PacketUtil.DecodePacketInt(p, 0); String username = PacketUtil.DecodePacketString(p, 4); User user = new User(username); user.id = userID; user.channelID = ChatServerConnectionManager.GetInstance().user.channelID; ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (UserManager.GetInstance().GetUserByID(user.id) == null) UserManager.GetInstance().users.AddLast(user); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.AddUser(user); } break; } case Headers.USER_LEFT: { int userID = PacketUtil.DecodePacketInt(p, 0); User user = UserManager.GetInstance().GetUserByID(userID); if (user != null) { ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.RemoveUser(user); } } break; } } }
public void DataReceived(Packet p) { switch (p.GetHeader()) { case Headers.KEEP_ALIVE: { ChatServerConnectionManager.GetInstance().SendPacket(new Packet(Headers.KEEP_ALIVE)); break; } case Headers.HANDSHAKE_2: { ChatServerConnectionManager.GetInstance().SetLoginStatus("Connected"); // Finish handshake ChatServerConnectionManager.GetInstance().SendPacket(new Packet(Headers.HANDSHAKE_3)); // Request for a user ID Packet newPacket = new Packet(Headers.CLIENT_USERNAME); newPacket.AddString(ChatServerConnectionManager.GetInstance().user.username); // Random user names are for testing only, so we don't want to show the menu if (!ChatServerConnectionManager.GetInstance().useRandomUsername) { MenuManager.GetInstance().ShowMenu(MenuManager.Menu.MultiplayerLobby); } ChatServerConnectionManager.GetInstance().SendPacket(newPacket); break; } case Headers.SERVER_DISCONNECT: { ChatServerConnectionManager.GetInstance().DisconnectFromServer(); // Create a dialog, and add a listener to the OK button. ChatServerConnectionManager.GetInstance().OnDisconnect(); break; } case Headers.CLIENT_USER_ID: { // Set the received user ID. ChatServerConnectionManager.GetInstance().user.id = PacketUtil.DecodePacketInt(p, 0); // Console.Out.WriteLine("Received user ID from the server: " + ChatServerConnectionManager.GetInstance().user.id); break; } case Headers.GAME_MAP_CHANGED: { int gameID = PacketUtil.DecodePacketInt(p, 0); String mapName = PacketUtil.DecodePacketString(p, 4); ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); MultiplayerGame game = lobby.GetGameByID(gameID); game.mapname = mapName; for (int i = 0; i < lobby.gameList.Count(); i++) { GameDisplayPanel panel = lobby.GetGameDisplayPanelByIndex(i); if (panel.multiplayerGame.id == gameID) { panel.ChangeMap(mapName); break; } } } else if (menu is GameLobby) { GameLobby lobby = ((GameLobby)menu); lobby.mapPreviewPanel.ChangeMap(mapName); } Console.Out.WriteLine("Received GAME_MAP_CHANGED packet"); break; } case Headers.CLIENT_CHANNEL: { UserManager.GetInstance().users.Clear(); // UserManager.GetInstance().users.Clear(); ChatServerConnectionManager.GetInstance().user.channelID = PacketUtil.DecodePacketInt(p, 0); // Console.Out.WriteLine("Switched channel to: " + ChatServerConnectionManager.GetInstance().user.channelID); break; } case Headers.CHAT_MESSAGE: { // Get the channel int channel = PacketUtil.DecodePacketInt(p, 0); // Get the message String message = PacketUtil.DecodePacketString(p, 4); ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.AddMessageToLog(message); } else if (menu is GameLobby) { GameLobby lobby = ((GameLobby)menu); lobby.AddMessageToLog(message); } break; } case Headers.NEW_USER: { int userID = PacketUtil.DecodePacketInt(p, 0); String username = PacketUtil.DecodePacketString(p, 4); User user = new User(username); user.id = userID; user.channelID = ChatServerConnectionManager.GetInstance().user.channelID; ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (UserManager.GetInstance().GetUserByID(user.id) == null) UserManager.GetInstance().users.AddLast(user); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.AddUser(user); } break; } case Headers.USER_LEFT: { int userID = PacketUtil.DecodePacketInt(p, 0); User user = UserManager.GetInstance().GetUserByID(userID); if (user != null) { ParentComponent menu = MenuManager.GetInstance().GetCurrentlyDisplayedMenu(); if (menu is MultiplayerLobby) { MultiplayerLobby lobby = ((MultiplayerLobby)menu); lobby.RemoveUser(user); } } break; } } }
/// <summary> /// User entered a game name and pressed OK /// </summary> /// <param name="source">The source</param> public void CreateGame(XNAButton source) { if (gameNameInput.textfield.text.Length < 4) { XNAMessageDialog.CreateDialog("Please enter a game name that is 4 characters or longer.", XNAMessageDialog.DialogType.OK); return; } Packet p = new Packet(Headers.CLIENT_CREATE_GAME); p.AddInt(ChatServerConnectionManager.GetInstance().user.id); p.AddString(gameNameInput.textfield.text); ChatServerConnectionManager.GetInstance().SendPacket(p); }
/// <summary> /// User pressed a key in the message textfield. /// </summary> /// <param name="e">The event</param> public void OnKeyPressed(KeyEvent e) { if (e.key.ToString() == "Enter") { ChatServerConnectionManager chat = ChatServerConnectionManager.GetInstance(); String message = chat.user.username + ": " + messageTextField.text; messageTextField.text = ""; // AddMessageToLog(message); Packet packet = new Packet(); packet.SetHeader(Headers.CHAT_MESSAGE); packet.AddInt(chat.user.channelID); packet.AddString(message); chat.SendPacket(packet); } }
/// <summary> /// Called when the OK button was pressed. /// </summary> /// <param name="source">The XNA Button</param> public virtual void OnOKClick(XNAButton source) { if (!ChatServerConnectionManager.GetInstance().connection.Receiving) return; String map = this.GetSelectedMap(); if (map != null) { // this.previewPanel.selectedMapLbl.text = map; Packet p = new Packet(Headers.GAME_MAP_CHANGED); p.AddInt(ChatServerConnectionManager.GetInstance().user.channelID); p.AddString(map); ChatServerConnectionManager.GetInstance().SendPacket(p); Console.Out.WriteLine("Sent GAME_MAP_CHANGED packet"); } this.Dispose(); }