Skip to content

Commit

Permalink
fix nre - Inumedia#109
Browse files Browse the repository at this point in the history
  • Loading branch information
koderhari committed Nov 6, 2017
1 parent b338657 commit 9f7b35e
Showing 1 changed file with 43 additions and 14 deletions.
57 changes: 43 additions & 14 deletions SlackAPI/Request.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

namespace SlackAPI
{


class RequestState<K>
where K : Response
{
Expand Down Expand Up @@ -69,39 +71,66 @@ internal void GotResponse(IAsyncResult result)
{
try
{
response = (HttpWebResponse)request.EndGetResponse(result);
response = (HttpWebResponse)request?.EndGetResponse(result);
Success = true;
}
catch (WebException we)
{
// If we don't get a response, let the exception bubble up as we can't do anything
if (we.Response == null)
{
var defaultResponse = default(K);
defaultResponse.ok = false;
defaultResponse.error = we.ToString();
if (callback != null)
callback(defaultResponse);
var defaultResponse = CreateDefaultResponseForError(we);
callback?.Invoke((K)defaultResponse);
return;
}

//Anything that doesn't return error 200 throws an exception. Sucks. :l
response = (HttpWebResponse)we.Response;
//TODO: Handle timeouts, etc?
}

catch (Exception e)
{
var defaultResponse = CreateDefaultResponseForError(e);
callback?.Invoke((K)defaultResponse);
return;
}

K responseObj;

using (Stream responseReading = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseReading))
if (response == null)
{
responseObj = (K)CreateDefaultResponseForError(new Exception("Empty response"));
callback?.Invoke(responseObj);
return;
}

try
{
using (Stream responseReading = response.GetResponseStream())
using (StreamReader reader = new StreamReader(responseReading))
{
string responseData = reader.ReadToEnd();
responseObj = responseData.Deserialize<K>();
}
}
catch (Exception e)
{
string responseData = reader.ReadToEnd();
responseObj = responseData.Deserialize<K>();
responseObj = (K)CreateDefaultResponseForError(e);
}

if(callback != null)
callback(responseObj);
callback?.Invoke(responseObj);
}

private Response CreateDefaultResponseForError(Exception e)
{
var defaultResponse = new DefaultResponse();
defaultResponse.ok = false;
defaultResponse.error = e.ToString();
return defaultResponse;
}

class DefaultResponse: Response
{

}
}

Expand Down

0 comments on commit 9f7b35e

Please # to comment.