Skip to content

Instantly share code, notes, and snippets.

@jaredjenkins
Last active December 16, 2015 10:39
Show Gist options
  • Save jaredjenkins/5421868 to your computer and use it in GitHub Desktop.
Save jaredjenkins/5421868 to your computer and use it in GitHub Desktop.
Unity HTTP Background Worker
while(taskQueue.Count > 0)
{
WebRequest httpRequest = null;
HttpWebResponse response = null;
Stream stream = null;
bool requestSucceeded = false;
var request = taskQueue.Dequeue();
request.Attempts ++;
try{
httpRequest = WebRequest.Create(request.Url);
response = (HttpWebResponse) httpRequest.GetResponse();
Logger.Log(LogType.Log, "Starting Request {0}, Attempt {1}", request.Url, request.Attempts);
if(response.StatusCode == HttpStatusCode.OK)
{
byte[] data = null;
if(response.ContentLength > 0)
{
stream = response.GetResponseStream();
byte[] buffer = new byte[16*1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
data = ms.ToArray();
}
}
var apiResponse = new ApiResponse(request, data);
completedTasksQueue.Enqueue(apiResponse);
//remove this item
requestSucceeded = true;
Logger.Log(LogType.Log, "Request succeeded");
} else {
Logger.Log(LogType.Log, "Request failed response.StatusCode {0}", response.StatusCode);
}
} catch (System.Net.WebException wex) {
Logger.Log(LogType.Warning, "Web Exception {1}", wex.GetType().Name, wex.Message);
} catch (System.IO.IOException iox){
Logger.Log(LogType.Warning, "Web Exception {1}", iox.GetType().Name, iox.Message);
} finally {
if(response != null){
response.Close();
}
if(stream != null){
stream.Close();
}
}
LastEventTimeStamp = DateTime.UtcNow;
if(!requestSucceeded && request.Attempts < maxRetryCount){
Logger.Log(LogType.Log, "Request failed, but retrying ... ");
taskQueue.Enqueue(request);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment