public StreamInfoResponse DoStreamInfoRequest(List <string> usernames, string cursor) { string queryString = CreateGetStreamString(ref usernames, cursor); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(queryString); webRequest.Method = "GET"; webRequest.ContentType = "application/json"; webRequest.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + AccessToken); webRequest.Headers.Add("Client-Id: " + ClientId); var webResponse = webRequest.GetResponse(); var responseStream = webResponse.GetResponseStream(); if (responseStream != null) { var streamReader = new StreamReader(responseStream, Encoding.Default); var json = streamReader.ReadToEnd(); StreamStatusJson response = JsonConvert.DeserializeObject <StreamStatusJson>(json); return(new StreamInfoResponse() { StreamChangeRequest = response, RateLimitRemaining = int.Parse(webResponse.Headers.Get("Ratelimit-Remaining")) }); } else { return(new StreamInfoResponse() { StreamChangeRequest = new StreamStatusJson(), RateLimitRemaining = 800, }); } }
public void SetStreamInfoInCache(string username, StreamStatusJson streamChangeInfo) { if (streamChangeInfo.data.Any()) { SetStreamInfoInCache(username, streamChangeInfo.data[0]); } else { _cache.Remove(CacheKeys.TwitchUsername + username); } }
public async Task <ActionResult> StreamChange(string username, [FromBody] StreamStatusJson request) { Task <List <TwitchUser> > twitchUsersTask = _context.TwitchUsers .AsQueryable() .Where(t => (t.ChannelName == username)) .ToListAsync(); StreamStatus previousStatus = GetStreamStatusFromCache(username); //await SendMessage(username + "'s stream was updated."); bool previousStatusOk = true; if (previousStatus == null) { previousStatusOk = false; } if (request.data.Any()) { await SendMessage(request.data[0].ToString()); //Stream Changed if (previousStatusOk && (request.data[0].id == previousStatus.id)) { //Duplicate Request. This might happen sometimes. No need to add to cache. return(Ok()); } else { //Going Online //TODO: Don't post messages if the stream was online before. if (previousStatusOk) { //Stream was updated. Handle game changes here } else { //await SendMessage("It went online"); await StreamOnline(await twitchUsersTask, request.data[0]); } } } else { //Stream Offline //await SendMessage("It went offline"); await StreamOffline(await twitchUsersTask); } SetStreamInfoInCache(username, request); return(Ok()); }