public override async Task CreatePairing(CreatePairingRequest request, IServerStreamWriter <PairingStatusResponse> responseStream, ServerCallContext context)
        {
            var token = _tokenService.GenerateToken();

            try
            {
                var username = GetUsername(request.Username, request.TwitterLogged);
                var ticketId = await _playFabService.CreateTicket(username, token);

                _logger.LogInformation($"New token created for user {username}: {token}");
                await responseStream.WriteAsync(CreateMatchStatusResponse("TokenCreated", token));

                await Task.Delay(_multiplayerSettings.Token.TicketStatusWait);

                var matchResult = await _playFabService.CheckTicketStatus(username, ticketId);

                while (!matchResult.Finished && !context.CancellationToken.IsCancellationRequested)
                {
                    await responseStream.WriteAsync(CreateMatchStatusResponse(matchResult.Status, token));

                    await Task.Delay(_multiplayerSettings.Token.TicketStatusWait);

                    matchResult = await _playFabService.CheckTicketStatus(username, ticketId);
                }

                await responseStream.WriteAsync(CreateMatchStatusResponse(matchResult.Status, token, matchResult.MatchId));

                await _repository.CreateMatch(matchResult.MatchId, username, matchResult.Opponent);
            }
            catch
            {
                await responseStream.WriteAsync(CreateMatchStatusResponse("Canceled", token));
            }
        }
示例#2
0
        public async Task <string> CreatePairing(string username, bool isTwitterUser, Action <string, string, string> matchIdCallback)
        {
            var request = new CreatePairingRequest()
            {
                Username = username, TwitterLogged = isTwitterUser
            };

            using var stream = _multiplayerGameManagerClient.CreatePairing(request);
            PairingStatusResponse response = null;

            while (await stream.ResponseStream.MoveNext(CancellationToken.None))
            {
                response = stream.ResponseStream.Current;
                matchIdCallback(response.MatchId, response.Status, response.Token);
            }

            return(response.MatchId);
        }
示例#3
0
        public async Task <string> CreatePairing(string username, bool isTwitterUser, Action <string, string, string> matchIdCallback)
        {
            var request = new CreatePairingRequest()
            {
                Username = username, TwitterLogged = isTwitterUser
            };
            var channel = GrpcChannel.ForAddress(_serverUrl);
            var client  = new MultiplayerGameManager.MultiplayerGameManagerClient(channel);

            using var stream = client.CreatePairing(request, GetRequestMetadata());
            PairingStatusResponse response = null;

            while (await stream.ResponseStream.MoveNext(CancellationToken.None))
            {
                response = stream.ResponseStream.Current;
                matchIdCallback(response.MatchId, response.Status, response.Token);
            }

            return(response.MatchId);
        }
        public override async Task CreatePairing(CreatePairingRequest request, IServerStreamWriter <PairingStatusResponse> responseStream, ServerCallContext context)
        {
            var apiRequest = new GameApi.Proto.CreatePairingRequest()
            {
                Username = request.Username, TwitterLogged = request.TwitterLogged
            };

            using var stream = _multiplayerGameManagerClient.CreatePairing(apiRequest);

            GameApi.Proto.PairingStatusResponse response = null;
            while (await stream.ResponseStream.MoveNext(context.CancellationToken))
            {
                response = stream.ResponseStream.Current;

                await responseStream.WriteAsync(new PairingStatusResponse
                {
                    MatchId = response.MatchId,
                    Status  = response.Status,
                    Token   = response.Token
                });
            }
        }