/// <summary> /// Poll ongoing chat for info and any events occuring since last call to poll, <see cref="Cafex.LiveAssist.Bot.ChatInfo"/> /// </summary> /// <param name="chatContext">Reference to specific chat to poll</param> /// <returns>An instance of <c>ChatInfo</c></returns> public async Task <ChatInfo> Poll(ChatContext chatContext) { if (chatContext != null) { LPEvent chatEvent = await PollEvents(chatContext); if (chatEvent != null && chatEvent.chat.link != null) { foreach (Link link in chatEvent.chat.link) { if (link.rel.Equals("next")) { chatContext.NextEvents = RepairUri(link.href).AbsoluteUri; } } } else { return(null); } return(chatEvent.getChatInfo()); } else { return(null); } }
internal async Task <LPEvent> PollEvents(ChatContext chatContext) { LPEvent chatEvent = null; if (client != null && chatContext.NextEvents != null) { HttpResponseMessage response = await client.GetAsync(chatContext.NextEvents); if (response.IsSuccessStatusCode) { string content = await response.Content.ReadAsStringAsync(); chatEvent = JsonConvert.DeserializeObject <LPEvent>(content); response.Dispose(); } else { response.Dispose(); throw new ChatException($"Failed to poll events, received HTTP response code {response.StatusCode} from chat server"); } } else { return(null); } return(chatEvent); }