示例#1
0
    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
            {
            }
        }
    }
示例#2
0
    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);
            }
        }
    }
示例#3
0
 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;
 }
示例#4
0
 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);
     }
 }
示例#5
0
 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);
     }
 }