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)); } }
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); }
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 }); } }