Esempio n. 1
0
    /// Handle incoming commands from the client.
    void ClientCommandHandler(NetworkMessage netMsg)
    {
        switch (netMsg.msgType)
        {
        case LevelMsgType.LevelRequest:
            /// Player has notified of current position. Check to see if regions of interest
            /// need to be updated.
        {
            LevelSyncMessage m = netMsg.ReadMessage <LevelSyncMessage>();
//                 Debug.Log ("Got message: " + netMsg.conn.connectionId + " : ");

            sendPlayerUpdate(netMsg.conn.connectionId, m.playerPosition, m.visibleRadius);

            updatePlayerProxy(netMsg.conn.connectionId);
        }
        break;

        case LevelMsgType.LevelUpdate:
            /// Player has changed the level in a way that affects other players.
        {
            Debug.Log("Changed level");
            BlockAddMessage m = netMsg.ReadMessage <BlockAddMessage>();
            levelStructure.setBlock(m.px + 0.5f, m.pz + 0.5f, m.height, m.blocktype, netMsg.conn.connectionId);
        }
        break;

        case LevelMsgType.EmoteSingleSender:
            /// Receiving a single emote from a player.
        {
            SendEmoteMessageAndClientID m = netMsg.ReadMessage <SendEmoteMessageAndClientID> ();
            sendAllClientEmote(m.netId, m.emoteType);
            Debug.Log("Emote Received from Client.");
        }
        break;

        case LevelMsgType.ResourceUpdate:
        {
            ResourceTakeMessage m = netMsg.ReadMessage <ResourceTakeMessage> ();
            int height            = Math.Max((int)(m.position.y), (int)WorldManager.minLevelHeight);
            int blockHeight       = (int)(height - WorldManager.minLevelHeight);
            levelStructure.updateResource(m.position.x + 0.5f, m.position.z + 0.5f, blockHeight, m.amount);
        }
        break;

        case LevelMsgType.PlayerFlagRequest:
        {
            PlayerFlagMessage m = netMsg.ReadMessage <PlayerFlagMessage> ();
            int height          = Math.Max((int)(m.position.y), (int)WorldManager.minLevelHeight);
            int blockHeight     = (int)(height - WorldManager.minLevelHeight);
            levelStructure.updateFlag(m.position.x + 0.5f, m.position.z + 0.5f, blockHeight, netMsg.conn.connectionId);
        }
        break;

        default:
        {
            Debug.Log("Unexpected message type");
        }
        break;
        }
    }
Esempio n. 2
0
    //Send clients updated lists of all players

    /*void sendPlayerList (int connectionId)
     * {
     *      foreach(KeyValuePair<int, ClientDetails> entry in playerMonitoring)
     *      {
     *              PlayerListMessage m = new PlayerListMessage ();
     *              m.emoteType = emote;
     *              m.connId = connId;
     *              NetworkServer.SendToClient (entry.Key, LevelMsgType.EmoteSingleSender, m);
     *      }
     * }*/

    //Send all clients an emote
    void sendAllClientEmote(NetworkInstanceId netId, int emote)
    {
        foreach (KeyValuePair <int, ClientDetails> entry in playerMonitoring)
        {
            SendEmoteMessageAndClientID m = new SendEmoteMessageAndClientID();
            m.emoteType = emote;
            m.netId     = netId;
            NetworkServer.SendToClient(entry.Key, LevelMsgType.EmoteSingleSender, m);
        }
    }
    public void ButtonAction()
    {
        buttons[CurMenuItem].sceneimage.color = buttons[CurMenuItem].PressedColor;
        GameObject        Player = this.transform.parent.gameObject;
        NetworkInstanceId netID  = Player.GetComponent <NetworkIdentity>().netId;

        Debug.Log("Sending emote with networkID: " + netID.ToString());
        Vector3 offset = new Vector3(0.0f, 2.5f, 0.0f);

        //IconObject DisplayEmote;
        if (CurMenuItem == 0)
        {
            SendEmoteMessageAndClientID m = new SendEmoteMessageAndClientID();
            m.emoteType = 0;
            m.netId     = netID;
            NetworkManager.singleton.client.Send(LevelMsgType.EmoteSingleSender, m);
        }
        else if (CurMenuItem == 1)
        {
            SendEmoteMessageAndClientID m = new SendEmoteMessageAndClientID();
            m.emoteType = 1;
            m.netId     = netID;
            NetworkManager.singleton.client.Send(LevelMsgType.EmoteSingleSender, m);
        }
        else if (CurMenuItem == 2)
        {
            SendEmoteMessageAndClientID m = new SendEmoteMessageAndClientID();
            m.emoteType = 2;
            m.netId     = netID;
            NetworkManager.singleton.client.Send(LevelMsgType.EmoteSingleSender, m);
        }
        else if (CurMenuItem == 3)
        {
            SendEmoteMessageAndClientID m = new SendEmoteMessageAndClientID();
            m.emoteType = 3;
            m.netId     = netID;
            NetworkManager.singleton.client.Send(LevelMsgType.EmoteSingleSender, m);
        }

        menuon = false;
    }
Esempio n. 4
0
    /// Handle incoming updates from the server.
    void ServerCommandHandler(NetworkMessage netMsg)
    {
        switch (netMsg.msgType)
        {
        case LevelMsgType.LevelResponse:
            // Received an updated region block from the server. Update
            // the cache, and ensure that the local visual representation
            // is consistent.
        {
            RegionBlock rb = netMsg.ReadMessage <RegionBlock>();
//                 Debug.Log ("Server Got message: " + rb.blockSize);

            MeshFilter mf = GetComponent <MeshFilter>();
            rb.convertToMesh(mf.mesh);

            Vector2         rbpos  = rb.getPosition();
            Vector3         llbpos = new Vector3(rbpos.x, WorldManager.minLevelHeight, rbpos.y);
            LocalLevelBlock llb    = findLevelBlock(llbpos);
            if (llb == null)
            {
                llb = addLevelBlock(rb, llbpos);

                // llb should now be valid.
                llb.region.placeBlocks(llb.gobject.transform);
            }
            else
            {
                // if version is newer than the one we already have, then update it.
                if (rb.timeLastChanged > llb.region.timeLastChanged)
                {
                    llb.region = rb;
//                         Debug.Log ("Got update ..................................>");
                    llb.region.placeBlocks(llb.gobject.transform);
                }
            }

            flushRegions();
        }
        break;

        case LevelMsgType.PlayerList:
            /// Message containing list of active players.
        {
        }
        break;

        case LevelMsgType.EmoteSingleSender:
            /// Handle incoming emotes from server
        {
            SendEmoteMessageAndClientID m = netMsg.ReadMessage <SendEmoteMessageAndClientID> ();
            displayEmote(m.emoteType, m.netId);
            Debug.Log("Incoming emote to client from server from network id: " + m.netId);
        }
        break;

        case LevelMsgType.PlayerFlagRequest:
        {
            PlayerFlagMessage m = netMsg.ReadMessage <PlayerFlagMessage> ();
            if (m.removed == false)
            {
                //Do UI message to player here informing them of failure to remove flag.
            }
            if (m.removed == true)
            {
                PlayerMove player = ClientScene.localPlayers[0].gameObject.GetComponent <PlayerMove>();
                player.playerFlagPlaced = false;
            }
        }
        break;

        default:
        {
            Debug.Log("Unexpected message type in LocalWorld");
        }
        break;
        }
    }