Esempio n. 1
0
    void OnReceived(IAsyncResult result)
    {
        // this is what had been passed into BeginReceive as the second parameter:
        UdpClient socket = result.AsyncState as UdpClient;

        // points towards whoever had sent the message:
        IPEndPoint source = new IPEndPoint(0, 0);

        // get the actual message and fill out the source:
        byte[] message = socket.EndReceive(result, ref source);

        // do what you'd like with `message` here:
        string returnData = Encoding.ASCII.GetString(message);

        IncomingMessage = "Got this" + returnData;
        //Debug.Log("Got this: " + returnData);

        latestMessage = JsonUtility.FromJson <Message>(returnData);
        try{
            switch (latestMessage.cmd)
            {
            case commands.NEW_CLIENT:
                NewPlayerArrived();
                NewPlayer p = JsonUtility.FromJson <NewPlayer>(returnData);
                if (myID == "newID")
                {
                    myID = p.player.id;
                }
                PlayersToSpawnList.Add(p.player.id);
                break;

            case commands.UPDATE:    //When we receive this command from server, update all our cubes.
                latestGameState = JsonUtility.FromJson <GameState>(returnData);

                break;

            case commands.CLIENT_REMOVED:                                           // Someone dropped from the server.
                DroppedPlayer d = JsonUtility.FromJson <DroppedPlayer>(returnData); //Store that player.
                Debug.Log("Player Left The Game:");
                PlayerRemoved();
                PlayersToDestroyList.Add(d.id);    //Destroy that player by its id.;
                break;

            case commands.GET_PLAYERS_IN_GAME:
                //When a new player connects, get/make an object(list) of all players already in the game.
                PlayersAlreadyInGame pigl = JsonUtility.FromJson <PlayersAlreadyInGame>(returnData);
                //we need to loop through this list and add them to the spawn list.
                for (int i = 0; i < pigl.players.Length; i++)
                {
                    if (pigl.players[i].id != myID)
                    {
                        PlayersToSpawnList.Add(pigl.players[i].id);
                    }
                }

                break;

            default:
                Debug.Log("Error");
                break;
            }
        }
        catch (Exception e) {
            Debug.Log(e.ToString());
        }

        // schedule the next receive operation once reading is done:
        socket.BeginReceive(new AsyncCallback(OnReceived), socket);
    }
    void OnReceived(IAsyncResult result)
    {
        UdpClient  socket = result.AsyncState as UdpClient;
        IPEndPoint source = new IPEndPoint(0, 0);

        byte[] message    = socket.EndReceive(result, ref source);
        string returnData = Encoding.ASCII.GetString(message);

        IncomingMessage = "Got this" + returnData;

        latestMessage = JsonUtility.FromJson <Message>(returnData);

        try
        {
            switch (latestMessage.cmd)
            {
            case commands.NEW_PLAYER:
                Debug.Log("New Player Arrived");
                Debug.Log(IncomingMessage);
                NewPlayer p = JsonUtility.FromJson <NewPlayer>(returnData);
                if (myID == null)
                {
                    myID = p.player.id;
                }
                SpawnList.Add(p.player.id);
                break;

            case commands.UPDATE:
                latestGameState = JsonUtility.FromJson <GameState>(returnData);
                break;

            case commands.PLAYER_REMOVED:
                DroppedPlayer d = JsonUtility.FromJson <DroppedPlayer>(returnData);
                Debug.Log("Player Left The Game:");
                Debug.Log(IncomingMessage);
                DestroyList.Add(d.id);
                break;

            case commands.ADD_PLAYERS:
                PlayersAlreadyInGame pigl = JsonUtility.FromJson <PlayersAlreadyInGame>(returnData);
                for (int i = 0; i < pigl.players.Length; i++)
                {
                    if (pigl.players[i].id != myID)
                    {
                        SpawnList.Add(pigl.players[i].id);
                    }
                }
                break;

            default:
                Debug.Log("Error");
                break;
            }
        }
        catch (Exception e)
        {
            Debug.Log(e.ToString());
        }

        socket.BeginReceive(new AsyncCallback(OnReceived), socket);
    }