private void AfterUserMainStatus(IAsyncResult result)
{
HttpResponseMessage resp = null;
BlipStatus status = null;
BlipCommunicationState state = BlipCommunicationState.OK;
Exception exp = null;
HttpStatusCode httpCode = HttpStatusCode.OK;
try
{
//pobieramy obiekt HttpClient, dzięki któremu został wysłany request
//przekazaliśmy ten obiekt jako state
var client = result.AsyncState as HttpClient;
//pobieramy odpowiedź
lock (httpAsyncClientLock)
{
resp = client.EndSend(result);
}
resp.EnsureStatusIsSuccessful();
//deserializujemy z json
status = resp.Content.ReadAsJsonDataContract<StatusesList>()[0];
//zgłaszamy zdarzenie że dane załadowaliśmy, przekazując nasze parametry zgłoszenia wraz ze statusem
}
catch (HttpStageProcessingException timeEx)
{
//gdy wystąpiły jakieś błędy w komunikacji
state = BlipCommunicationState.CommunicationError;
if (resp != null) httpCode = resp.StatusCode;
}
catch (ArgumentOutOfRangeException aorEx)
{
//gdy wystąpiły jakieś błędy w komunikacji
state = BlipCommunicationState.CommunicationError;
if (resp != null) httpCode = resp.StatusCode;
}
catch (Exception ex)
{
state = BlipCommunicationState.Error;
exp = ex;
}
finally
{
if (resp != null)
{
resp.Dispose();
resp = null;
}
}
if (((state & BlipCommunicationState.CommunicationError) == BlipCommunicationState.CommunicationError)
&& CommunicationError != null)
{
CommunicationError(null, new CommunicationErrorEventArgs(httpCode, BlipActions.AfterMainStatus));
return;
}
if ((state & BlipCommunicationState.Error) == BlipCommunicationState.Error && ExceptionOccure != null)
{
ExceptionOccure(null, new ExceptionEventArgs(exp));
return;
}
if (status != null && MainStatusLoaded != null)
{
MainStatusLoaded(null, new MainStatusLoadingEventArgs(status));
}
}