private static void ProcessFirstEnemiesSyncMessage(FirstEnemiesSyncMessage enemiesSyncMessage)
        {
            var serverEnemies = enemiesSyncMessage.Enemies;

            serverEnemies.ForEach(enemy =>
            {
                var enemyPrefab      = Resources.Load <GameObject>("Prefabs/Hero4");
                var enemyInstantiate =
                    Object.Instantiate(enemyPrefab, new Vector3(enemy.X, enemy.Y, 0), Quaternion.identity);
                enemyInstantiate.name = enemy.Name;
            });
        }
        public static void ProcessMessage(string message)
        {
            var messageWrapper = JsonConvert.DeserializeObject <MessageWrapper>(message);

            switch (messageWrapper.MessageType)
            {
            case MessageType.PlayerJoin:
                var playerJoinMessage = JsonConvert.DeserializeObject <PlayerJoinMessage>(messageWrapper.Payload);
                ProcessPlayerJoinMessage(playerJoinMessage);
                break;

            case MessageType.PlayerState:
                var playerMoveMessage = JsonConvert.DeserializeObject <PlayerStateMessage>(messageWrapper.Payload);
                ProcessPlayerStateMessage(playerMoveMessage);
                break;

            case MessageType.FirstPlayersSync:
                var serverPlayers           = JsonConvert.DeserializeObject <List <ServerPlayer> >(messageWrapper.Payload);
                var firstPlayersSyncMessage = new FirstPlayersSyncMessage();
                firstPlayersSyncMessage.Players = serverPlayers;
                ProcessFirstPlayersSyncMessage(firstPlayersSyncMessage);
                break;

            case MessageType.FirstEnemiesSync:
                var enemies = JsonConvert.DeserializeObject <List <Enemy> >(messageWrapper.Payload);
                var firstEnemiesSyncMessage = new FirstEnemiesSyncMessage();
                firstEnemiesSyncMessage.Enemies = enemies;
                ProcessFirstEnemiesSyncMessage(firstEnemiesSyncMessage);
                break;

            case MessageType.EnemyState:
                var enemyStateMessage = JsonConvert.DeserializeObject <EnemyStateMessage>(messageWrapper.Payload);
                ProcessEnemyStateMessage(enemyStateMessage);
                break;

            case MessageType.PlayerWave:
                //TODO do nothing
                break;

            case MessageType.EnemyHitted:
                var enemyHittedMessage = JsonConvert.DeserializeObject <EnemyHittedMessage>(messageWrapper.Payload);
                ProcessEnemyHittedMessage(enemyHittedMessage);
                break;

            case MessageType.FirstMapSync:
                var groundBoxesMessage = JsonConvert.DeserializeObject <List <GroundBoxElement> >(messageWrapper.Payload);
                ProcessFirstMapSyncMessage(groundBoxesMessage);
                break;

            case MessageType.MapChanged:
                var mapChangedMessage = JsonConvert.DeserializeObject <GroundBoxElementDestructMessage>(messageWrapper.Payload);
                ProcessMapChangedMessage(mapChangedMessage);
                break;

            case MessageType.PlayerThrowBomb:
                var playerThrowBombMessage = JsonConvert.DeserializeObject <PlayerThrowBombMessage>(messageWrapper.Payload);
                ProcessPlayerThrowBombMessage(playerThrowBombMessage);
                break;

            case MessageType.BombExploded:
                var bombExplodedMessage = JsonConvert.DeserializeObject <BombExplosionMessage>(messageWrapper.Payload);
                ProcessBombExplosionMessage(bombExplodedMessage);
                break;

            default:
                throw new UnityException();
            }
        }