public void Update(GameTime gameTime) //manage unexpected disconnect { time += (float)gameTime.ElapsedGameTime.TotalSeconds; if (playerlist.IsHost(MyIP()) && time > 1) { if (playerlist.playerlist.Count > 1) //do only if host is not alone in a party { Send("Host is still connected", port, false); //message send by host only, if host crashes the clients wont be stuck playerlist.Modify(MyIP(), timeunactive: 0); foreach (LobbyPlayer lobbyplayer in playerlist.playerlist) //remove unactive players { lobbyplayer.timeunactive += 1; if (lobbyplayer.timeunactive >= 5) { playerlist.Modify(lobbyplayer.ip, false, false, true); //remove 1 player from the party Send("Playerlist:" + playerlist.ToString(), port, false); isopen = true; //since 1 player has been kicked, there is space break; } } } if (GameEnvironment.GameStateManager.CurrentGameState.ToString() != "PlayingState" && isopen) { Send("Playerlist " + port + " :" + playerlist.ToString(), MultiplayerManager.LobbyPort); //broadcast playerlist to port 8888 } time = 0; } else { try { if (time > 1 && playerlist.playerlist[1].ip.ToString() == MyIP().ToString()) //for player2 only { Send("I am still connected", port, false); //message send by clients, this prevents error when a client types alt + f4. playerlist.Modify(MyIP(), timeunactive: 0); foreach (LobbyPlayer lobbyplayer in playerlist.playerlist) { if (lobbyplayer.ishost) { lobbyplayer.timeunactive += 1; if (lobbyplayer.timeunactive >= 5) { MultiplayerManager.Connect(MultiplayerManager.LobbyPort); Disconnect(); } } } time = 0; } } catch { } } }
void OnGUI() { if (Network.peerType == NetworkPeerType.Disconnected) { GUILayout.Label("Not Connected"); ip = GUILayout.TextField(ip, GUILayout.MinWidth(100)); port = Convert.ToInt32(GUILayout.TextField(port.ToString())); GUILayout.BeginVertical(); if (GUILayout.Button("Connect as Client")) { Application.LoadLevel(2); mm.Connect(ip, port); } if (GUILayout.Button("Start Server")) { if (Application.loadedLevel != 2) { Application.LoadLevel(2); } mm.StartHost(32, port); } GUILayout.EndVertical(); } else { if (Network.peerType == NetworkPeerType.Connecting) { GUILayout.Label("Connection status: Connecting"); } else if (Network.peerType == NetworkPeerType.Client) { GUILayout.Label("Connection status: Client"); GUILayout.Label("Ping:" + Network.GetAveragePing(Network.connections[0])); } else if (Network.peerType == NetworkPeerType.Server) { GUILayout.Label("Connection status: Server"); if (Network.connections.Length >= 1) { GUILayout.Label("Ping to first player: " + Network.GetAveragePing(Network.connections[0])); } } if (GUILayout.Button("Disconnect")) { Application.LoadLevel(0); Network.Disconnect(200); } } }
public void Disconnect() //stop receiving and sending data { if (playerlist.IsHost(MyIP())) { CloseParty(); Send("HostLeaves", MultiplayerManager.PartyPort); GameEnvironment.ScreenFade.TransitionToScene("hostClientSelectionState", 5); } else { Send("Leave", MultiplayerManager.PartyPort); MultiplayerManager.Connect(MultiplayerManager.LobbyPort); GameEnvironment.ScreenFade.TransitionToScene("portSelectionState", 5); } udpclient.Close(); Console.WriteLine("Disconnect from party"); MultiplayerManager.Party = null; }
public override void HandleInput(InputHelper inputHelper) { base.HandleInput(inputHelper); if (createGameButton.Pressed && MultiplayerManager.Party == null) { MultiplayerManager.Connect(); MultiplayerManager.Party.playerlist.Modify(Connection.MyIP(), true, true); GameEnvironment.ScreenFade.TransitionToScene("hostSelectionState", 5); } else if (joinGameButton.Pressed) { MultiplayerManager.Connect(MultiplayerManager.LobbyPort); GameEnvironment.ScreenFade.TransitionToScene("portSelectionState", 5); } else if (returnButton.Pressed) { GameEnvironment.ScreenFade.TransitionToScene("modeSelectionState", 5); } }
public override void HandleInput(InputHelper inputHelper) { base.HandleInput(inputHelper); for (int i = 0; i < buttonList.Count; i++) { if (buttonList[i].Pressed) { MultiplayerManager.Connect(MultiplayerManager.Lobby.Ports[i]); MultiplayerManager.Party.Send("Join", MultiplayerManager.Lobby.Ports[i]); ClearButtonsList(); MultiplayerManager.Lobby.Disconnect(); GameEnvironment.ScreenFade.TransitionToScene("clientSelectionState", 5); } } if (returnButton.Pressed) { MultiplayerManager.Lobby.Disconnect(); GameEnvironment.ScreenFade.TransitionToScene("hostClientSelectionState", 5); } }