public void OnEvent(EventData eventData)
    {
        //server raised an event
        switch ((StarCollectorEventTypes)eventData.Code)
        {
        // store player ID
        case StarCollectorEventTypes.ReceivePlayerID:
            long playerId = (long)eventData.Parameters[0];
            PlayerID = playerId;
            Debug.Log("Received player ID, awaiting game state...");
            break;

        // spawn actor
        case StarCollectorEventTypes.CreateActor:
            byte       actorType = (byte)eventData.Parameters[0];
            long       actorID   = (long)eventData.Parameters[1];
            float      posX      = (float)eventData.Parameters[2];
            float      posY      = (float)eventData.Parameters[3];
            GameObject actor     = null;
            switch (actorType)
            {
            // Star
            case 0:
                actor = (GameObject)Instantiate(StarPrefab, new Vector3(posX, 0f, posY), Quaternion.identity);
                break;

            // Player
            case 1:
                long ownerID = (long)eventData.Parameters[4];
                actor = (GameObject)Instantiate(PlayerPrefab, new Vector3(posX, 0f, posY), Quaternion.identity);
                actor.SendMessage("SetOwnerID", ownerID);
                break;
            }
            actor.SendMessage("SetActorID", actorID);
            break;

        // destroy actor
        case StarCollectorEventTypes.DestroyActor:
            GameActor destroyActor = GameActor.Actors[(long)eventData.Parameters[0]];
            if (destroyActor != null)
            {
                destroyActor.Destruct();
            }
            break;

        // update actor
        case StarCollectorEventTypes.UpdateActor:
            GameActor updateActor = GameActor.Actors[(long)eventData.Parameters[0]];
            float     newPosX     = (float)eventData.Parameters[1];
            float     newPosY     = (float)eventData.Parameters[2];
            updateActor.SendMessage("UpdatePosition", new Vector3(newPosX, 0f, newPosY), SendMessageOptions.DontRequireReceiver);
            break;

        // log chat messages
        case StarCollectorEventTypes.ChatMessage:
            Debug.Log((string)eventData.Parameters[0]);
            break;
        }
    }
    public void OnEvent(EventData eventData)
    {
        Debug.Log((AckEventType)eventData.Code);
        //server raised an event
        switch ((AckEventType)eventData.Code)
        {
        // store player ID
        case AckEventType.AssignPlayerID:
            IActor    player        = GeneralFunc.Deserialize <IActor>(eventData.Parameters[0] as byte[]);
            GameActor playerCreated = Instantiate
                                      (
                playerPref,
                new Vector3(player.posX, 0.5f, player.posY),
                playerPref.transform.rotation
                                      ) as GameActor;
            playerCreated.SetActor(player);
            playerCreated.GetComponent <OwnerInfo>().SetOwnerID(player.peerID);
            StarCollectorClient.playerID = player.peerID;
            playerCreated.GetComponent <CheckRegion>().Load();
            break;

        // create actor
        case AckEventType.CreateActor:
            if (eventData.Parameters.ContainsKey((byte)Parameter.Creep))
            {
                List <IActor> listAllCreep = GeneralFunc.Deserialize <List <IActor> >(eventData.Parameters[(byte)Parameter.Creep] as byte[]);
                Debug.Log("count all creep :" + listAllCreep.Count);
                List <IActor> listSameCreep = GetListSameActor(listAllCreep, GameActor.listCreep);

                List <IActor> listNewCreep = listAllCreep.Except(listSameCreep).ToList();

                List <GameActor> listDeleteCreep = GameActor.listCreep.Where(a => !listAllCreep.Any(b => b.actorID == a.actor.actorID)).ToList();

                foreach (var creepDelete in listDeleteCreep)
                {
                    creepDelete.Destruct();
                }

                foreach (var creep in listNewCreep)
                {
                    GameActor creepCreated = Instantiate(creepPref, new Vector3(creep.posX, 0.5f, creep.posY), playerPref.transform.rotation) as GameActor;
                    creepCreated.SetActor(creep);
                    creepCreated.GetComponent <CheckRegion>().Load();
                }
            }
            if (eventData.Parameters.ContainsKey((byte)Parameter.Regions))
            {
                InterestRegions dataInterestRegion = GeneralFunc.Deserialize <InterestRegions>(eventData.Parameters[(byte)Parameter.Regions] as byte[]);

                if (dataInterestRegion.playerPosition != null)
                {
                    Debug.Log(string.Format("player position -------------- x: {0} - y: {1}", dataInterestRegion.playerPosition.x, dataInterestRegion.playerPosition.y));
                }

                //foreach (var data in dataInterestRegion.listRegion)
                //{
                //    Debug.Log(string.Format("x: {0} - y: {1}",data.x,data.y));
                //}

                AreaController.Instance.ShowInterestRegion(dataInterestRegion.listRegion);
            }
            break;

        case AckEventType.DestroyActor:
            if (eventData.Parameters.ContainsKey((byte)Parameter.Data))
            {
                IActor    playerDestroy    = GeneralFunc.Deserialize <IActor>(eventData.Parameters[(byte)Parameter.Data] as byte[]);
                GameActor gameActorDestroy = GameActor.listPlayer.Where(a => a.actor.actorID == playerDestroy.actorID).FirstOrDefault();
                if (gameActorDestroy != null)
                {
                    gameActorDestroy.Destruct();
                }
            }
            break;

        // log chat messages
        case AckEventType.ChatMessage:
            break;
        }
    }