Example #1
0
        private void GetEnemyShot(ResponseMessage msg)
        {
            if (IsPlayerGoing)
            {
                return;
            }
            var result = _serializer.DeserializeDynamic(msg.Text);

            switch ((string)result["message_type"])
            {
            case "get_enemy_shot":
                var enemyShot = _serializer.DeserializeObject <GetEnemyShot>(result);
                OnGetEnemyShot?.Invoke(this, new(enemyShot));
                break;

            case "get_enemy_answer":
                var enemyAnswer = _serializer.DeserializeObject <GetEnemyAnswer>(result);
                OnGetEnemyAnswer?.Invoke(this, new(enemyAnswer));
                break;

            case "player_turn":
                IsPlayerGoing = true;
                OnPlayerTurn?.Invoke(this, EventArgs.Empty);
                break;

            default:
                throw new("Unexpected message type");
            }
        }
Example #2
0
        public async Task <ConnectionCode> CreateGame(Player player, ImmutableArray <Ship> ships)
        {
            var         completionSource = new TaskCompletionSource <ConnectionCode>();
            IDisposable subscription     = null;

            subscription = _socket.MessageReceived.Subscribe(msg => {
                var connectionResult = _serializer.DeserializeDynamic(msg.Text);
                switch ((string)connectionResult["message_type"])
                {
                case "connection_code":
                    var connectionCode = _serializer.DeserializeObject <ConnectionCode>(connectionResult);
                    completionSource.SetResult(connectionCode);
                    break;

                case "game_connected":
                    var result = _serializer.DeserializeObject <ConnectionToGameResult>(connectionResult);
                    subscription.Dispose();
                    _reconnectSubscription.Dispose();
                    GameCreated?.Invoke(this, new(_socket, result.Go, result.Enemy));
                    break;

                default:
                    throw new("Unexpected message type");
                }
            });
            await Connect();

            var message = new CreateGameMessage(new(player, ships, null));
            var text    = _serializer.Serialize(message);

            _socket.Send(text);
            return(await completionSource.Task);
        }