void RemovePlayer(Net_PlayerDisconnected discPlayer)
    {
        Debug.Log("Removing thing");
        Net_PlayerInfo player = discPlayer.player;

        for (int i = 0; i < players.Count; i++)
        {
            if (players[i].userName == player.userName)
            {
                players.Remove(players[i]);
                break;
            }
        }
        players.Remove(player);
        HubScene.Instance.RemovePlayers(player.userName);

        if (player.playerType == "host" && HubScene.Instance != null)
        {
            DisconnectFromServer();
        }
    }
Beispiel #2
0
    private void UpdateMessagePump()
    {
        if (!isStarted)
        {
            return;
        }

        int recHostId;                          //Id for the platform where the message comes from
        int connectionId;                       //Which user is sending the message?
        int channelId;                          //Which lane is he sending that message from

        byte[] recBuffer = new byte[BYTE_SIZE]; //Holds the message that comes through
        int    dataSize;                        //Size of the message

        NetworkEventType type = NetworkTransport.Receive(out recHostId, out connectionId, out channelId, recBuffer, BYTE_SIZE, out dataSize, out error);

        switch (type)
        {
        case NetworkEventType.Nothing:
            break;

        case NetworkEventType.ConnectEvent:
            Debug.Log(string.Format("User {0} has connected through host {1}", connectionId, recHostId));
            playerCount.Add(connectionId);
            break;

        case NetworkEventType.DisconnectEvent:
            Debug.Log(string.Format("User {0} has disconnected ;-;", connectionId));
            if (playerCount.Count > 0)
            {
                playerCount.Remove(connectionId);
            }

            Net_PlayerInfo player = GetCurrentPlayer(connectionId);
            if (player != null)
            {
                Net_HubInfo hub = GetPlayerHub(player);
                if (hub != null)
                {
                    Net_PlayerDisconnected discPlayer = new Net_PlayerDisconnected(player);
                    hub.players.Remove(player);
                    SendActivePlayers(discPlayer, hub.players, reliableChannel);
                    if (player.playerType == "host")
                    {
                        Debug.Log("remove hubs!~!!");
                        SendClients(hub);
                        hubs.Remove(hub);
                    }
                }
            }
            break;

        case NetworkEventType.DataEvent:
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream    ms        = new MemoryStream(recBuffer);
            NetMsg          msg       = (NetMsg)formatter.Deserialize(ms);

            OnData(connectionId, channelId, recHostId, msg);
            break;

        default:
        case NetworkEventType.BroadcastEvent:
            Debug.Log("Unexpected network event type");
            break;
        }
    }