wrap listener in try/catch

This commit is contained in:
Martijn Scheepers
2022-11-28 08:37:30 +01:00
parent dc092c6c77
commit c85def8478

View File

@@ -57,62 +57,69 @@ namespace UCS.IOTServer
private static void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
if (_Stopping == true)
try
{
listener.Close();
return;
}
listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
if (listener.IsListening)
{
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
if (request.HttpMethod == "GET")
HttpListener listener = (HttpListener)result.AsyncState;
if (_Stopping == true)
{
//PRTG message
RxLogEventFired?.Invoke(null, request.RawUrl);
PrtgMessage prtgMessage = new PrtgMessage(request.RawUrl);
if (prtgMessage.PrtgData == null)
{
SendFailed(context);
Errorlog.Error($"prtgmessage is null: {request.RawUrl}");
return;
}
IOTMessage iOTMessage = new IOTMessage(prtgMessage);
ReceiveEventFiredIOTServerObject?.Invoke(null, iOTMessage);
listener.Close();
return;
}
if (request.HttpMethod == "POST")
listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
if (listener.IsListening)
{
//Nodered message
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
if (request.HttpMethod == "GET")
{
string jsondata = reader.ReadToEnd();
RxLogEventFired?.Invoke(null, jsondata);
try
//PRTG message
RxLogEventFired?.Invoke(null, request.RawUrl);
PrtgMessage prtgMessage = new PrtgMessage(request.RawUrl);
if (prtgMessage.PrtgData == null)
{
NoderedMessage noderedMessage = JsonConvert.DeserializeObject<NoderedMessage>(jsondata);
if (noderedMessage == null)
SendFailed(context);
Errorlog.Error($"prtgmessage is null: {request.RawUrl}");
return;
}
IOTMessage iOTMessage = new IOTMessage(prtgMessage);
ReceiveEventFiredIOTServerObject?.Invoke(null, iOTMessage);
}
if (request.HttpMethod == "POST")
{
//Nodered message
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
{
string jsondata = reader.ReadToEnd();
RxLogEventFired?.Invoke(null, jsondata);
try
{
Errorlog.Error($"Noderedmesage is null: {jsondata}");
NoderedMessage noderedMessage = JsonConvert.DeserializeObject<NoderedMessage>(jsondata);
if (noderedMessage == null)
{
Errorlog.Error($"Noderedmesage is null: {jsondata}");
SendFailed(context);
return;
}
IOTMessage iOTMessage = new IOTMessage(noderedMessage);
ReceiveEventFiredIOTServerObject?.Invoke(null, iOTMessage);
}
catch (Exception ex)
{
Errorlog.Error(ex, $"Nodered json Deserialize error - {ex.Message}");
Errorlog.Error(jsondata);
SendFailed(context);
return;
}
IOTMessage iOTMessage = new IOTMessage(noderedMessage);
ReceiveEventFiredIOTServerObject?.Invoke(null, iOTMessage);
}
catch (Exception ex)
{
Errorlog.Error(ex, $"Nodered json Deserialize error - {ex.Message}");
Errorlog.Error(jsondata);
SendFailed(context);
return;
}
}
SendOk(context);
}
SendOk(context);
}
catch (Exception ex)
{
Errorlog.Error(ex, $"ListenerCallback Failed {ex.Message}");
}
}