public async Task <AkinatorQuestion> StartNewGame(CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var apiKey = await GetSession().ConfigureAwait(false); var url = AkiUrlBuilder.NewGame(apiKey, m_usedLanguage, m_usedServerType); var response = await m_webClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync(); var match = m_regexStartGameResult.Match(content); if (!match.Success && match.Groups.Count != 2) { throw new InvalidCastException($"Invalid result received from Akinator. Result was {response}"); } var result = JsonConvert.DeserializeObject <BaseResponse <NewGameParameters> >(match.Groups[1].Value, new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Ignore }); m_session = result.Parameters.Identification.Session; m_signature = result.Parameters.Identification.Signature; m_step = result.Parameters.StepInformation.Step; return(ToAkinatorQuestion(result.Parameters.StepInformation)); }
public async Task <AkinatorGuess[]> GetGuess(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.GetGuessUrl(BuildGuessRequest(), m_server); var response = await m_webClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <BaseResponse <Guess> >(content, new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }); m_lastGuessStep = m_step; return(result.Parameters.Characters.Select(p => new AkinatorGuess(p.Name, p.Description) { ID = p.Id, PhotoPath = p.PhotoPath, Probabilty = p.Probabilty }).ToArray()); }
public async Task <AkinatorQuestion> UndoAnswer(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); if (m_step == 0) { return(null); } var url = AkiUrlBuilder.UndoAnswer(m_session, m_signature, m_step, m_server); var response = await m_webClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <BaseResponse <Question> >(content, new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }); m_step = result.Parameters.Step; CurrentQuestion = ToAkinatorQuestion(result.Parameters); return(ToAkinatorQuestion(result.Parameters)); }
public async Task <AkinatorQuestion> StartNewGame(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var apiKey = await GetSession(cancellationToken).ConfigureAwait(false); var url = AkiUrlBuilder.NewGame(apiKey, _mServer, _mChildMode); var response = await _mWebClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var match = _mRegexStartGameResult.Match(content); if (!match.Success && match.Groups.Count != 2) { throw new ApiErrorException(url, content, "Invalid response while creating new game"); } var result = EnsureNoError <NewGameParameters>(url, match.Groups[1].Value); _mSession = result.Identification.Session; _mSignature = result.Identification.Signature; _mStep = result.StepInformation.Step; CurrentQuestion = ToAkinatorQuestion(result.StepInformation); return(CurrentQuestion); }
public async Task <AkinatorHallOfFameEntries[]> GetHallOfFame(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var hallOfFameRequestUrl = AkiUrlBuilder.MapHallOfFame(m_server); var response = await m_webClient.GetAsync(hallOfFameRequestUrl, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var data = XmlConverter.ToClass <HallOfFame>(content); return(ToHallOfFameEntry(data.Awards.Award)); }
public async Task <AkinatorQuestion> Answer(AnswerOptions answer, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.Answer(BuildAnswerRequest(answer), _mServer); var response = await _mWebClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = EnsureNoError <Question>(url, content); _mStep = result.Step; CurrentQuestion = ToAkinatorQuestion(result); return(CurrentQuestion); }
public async Task <AkinatorQuestion> Answer(AnswerOptions answer, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.Answer(BuildAnswerRequest(answer), m_usedLanguage, m_usedServerType); var response = await m_webClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <BaseResponse <Question> >(content, new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Ignore }); m_step = result.Parameters.Step; return(ToAkinatorQuestion(result.Parameters)); }
public async Task <AkinatorGuess[]> SearchCharacter(string search, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.SearchCharacter(search, _mSession, _mSignature, _mStep, _mServer); var response = await _mWebClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = EnsureNoError <Characters>(url, content); return(result.AllCharacters.Select(p => new AkinatorGuess(p.Name, p.Description) { ID = p.IdBase, PhotoPath = p.PhotoPath, }).ToArray()); }
public async Task <AkinatorGuess[]> GetGuess(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.GetGuessUrl(BuildGuessRequest(), _mServer); var response = await _mWebClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = EnsureNoError <Guess>(url, content); _mLastGuessStep = _mStep; return(result.Characters.Select(p => new AkinatorGuess(p.Name, p.Description) { ID = p.Id, PhotoPath = p.PhotoPath, Probabilty = p.Probabilty }).ToArray()); }
public async Task <AkinatorQuestion> ExclusionGame(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); if (_mStep == 0) { return(null); } var url = AkiUrlBuilder.Exclusion(_mSession, _mSignature, _mStep, _mServer); var response = await _mWebClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = EnsureNoError <Question>(url, content); _mStep = result.Step; CurrentQuestion = ToAkinatorQuestion(result); return(CurrentQuestion); }
public async Task <AkinatorGuess[]> SearchCharacter(string search, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); var url = AkiUrlBuilder.SearchCharacter(search, m_session, m_signature, m_step, m_server); var response = await m_webClient.GetAsync(url, cancellationToken).ConfigureAwait(false); var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = JsonConvert.DeserializeObject <BaseResponse <Characters> >(content, new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Ignore }); return(result.Parameters.AllCharacters.Select(p => new AkinatorGuess(p.Name, p.Description) { ID = p.IdBase, PhotoPath = p.PhotoPath, }).ToArray()); }