private IEnumerator InvokeRequest(IUnityHttpRequest request)
{
if ((ServiceFactory.Instance.GetService <INetworkReachability>() as NetworkReachability).NetworkStatus != 0)
{
if (request is UnityWwwRequest)
{
WWW wwwRequest = new WWW((request as UnityWwwRequest).RequestUri.AbsoluteUri, request.RequestContent, request.Headers);
if (wwwRequest == null)
{
yield return((object)null);
}
bool uploadCompleted2 = false;
while (!wwwRequest.get_isDone())
{
float uploadProgress = wwwRequest.get_uploadProgress();
if (!uploadCompleted2)
{
request.OnUploadProgressChanged(uploadProgress);
if (uploadProgress == 1f)
{
uploadCompleted2 = true;
}
}
yield return((object)null);
}
request.WwwRequest = (IDisposable)wwwRequest;
request.Response = new UnityWebResponseData(wwwRequest);
}
else
{
UnityRequest unityRequest = request as UnityRequest;
if (unityRequest == null)
{
yield return((object)null);
}
UnityWebRequestWrapper unityWebRequest = new UnityWebRequestWrapper(unityRequest.RequestUri.AbsoluteUri, unityRequest.Method)
{
DownloadHandler = new DownloadHandlerBufferWrapper()
};
if (request.RequestContent != null && request.RequestContent.Length != 0)
{
unityWebRequest.UploadHandler = new UploadHandlerRawWrapper(request.RequestContent);
}
bool uploadCompleted = false;
foreach (KeyValuePair <string, string> header in request.Headers)
{
unityWebRequest.SetRequestHeader(header.Key, header.Value);
}
AsyncOperation operation = unityWebRequest.Send();
while (!operation.get_isDone())
{
float progress = operation.get_progress();
if (!uploadCompleted)
{
request.OnUploadProgressChanged(progress);
if (progress == 1f)
{
uploadCompleted = true;
}
}
yield return((object)null);
}
request.WwwRequest = unityWebRequest;
request.Response = new UnityWebResponseData(unityWebRequest);
}
}
else
{
request.Exception = new WebException("Network Unavailable", WebExceptionStatus.ConnectFailure);
}
if (request.IsSync)
{
if (request.Response != null && !request.Response.IsSuccessStatusCode)
{
request.Exception = new HttpErrorResponseException(request.Response);
}
request.WaitHandle.Set();
}
else
{
if (request.Response != null && !request.Response.IsSuccessStatusCode)
{
request.Exception = new HttpErrorResponseException(request.Response);
}
ThreadPool.QueueUserWorkItem(delegate
{
try
{
request.Callback(request.AsyncResult);
}
catch (Exception exception)
{
_logger.Error(exception, "An exception was thrown from the callback method executed fromUnityMainThreadDispatcher.InvokeRequest method.");
}
});
}
}