Log web socket errors
This commit is contained in:
parent
f9a0fd732a
commit
3612c855cf
|
@ -11,15 +11,15 @@ namespace Ooui.AspNetCore
|
||||||
{
|
{
|
||||||
readonly Element element;
|
readonly Element element;
|
||||||
readonly string title;
|
readonly string title;
|
||||||
readonly bool disposeWhenDone;
|
readonly bool disposeAfterSession;
|
||||||
readonly ILogger logger;
|
readonly ILogger logger;
|
||||||
|
|
||||||
public ElementResult (Element element, string title = "", bool disposeWhenDone = true, ILogger logger = null)
|
public ElementResult (Element element, string title = "", bool disposeAfterSession = true, ILogger logger = null)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.disposeWhenDone = disposeWhenDone;
|
this.disposeAfterSession = disposeAfterSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task ExecuteResultAsync (ActionContext context)
|
public override async Task ExecuteResultAsync (ActionContext context)
|
||||||
|
@ -34,7 +34,7 @@ namespace Ooui.AspNetCore
|
||||||
element.Style.Height = GetCookieDouble (context.HttpContext.Request.Cookies, "oouiWindowHeight", 24, 480, 10000);
|
element.Style.Height = GetCookieDouble (context.HttpContext.Request.Cookies, "oouiWindowHeight", 24, 480, 10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
var sessionId = WebSocketHandler.BeginSession (context.HttpContext, element, disposeWhenDone);
|
var sessionId = WebSocketHandler.BeginSession (context.HttpContext, element, disposeAfterSession, logger);
|
||||||
var initialHtml = element.OuterHtml;
|
var initialHtml = element.OuterHtml;
|
||||||
var html = UI.RenderTemplate (WebSocketHandler.WebSocketPath + "?id=" + sessionId, title: title, initialHtml: initialHtml);
|
var html = UI.RenderTemplate (WebSocketHandler.WebSocketPath + "?id=" + sessionId, title: title, initialHtml: initialHtml);
|
||||||
var htmlBytes = Encoding.UTF8.GetBytes (html);
|
var htmlBytes = Encoding.UTF8.GetBytes (html);
|
||||||
|
|
|
@ -18,14 +18,15 @@ namespace Ooui.AspNetCore
|
||||||
static readonly ConcurrentDictionary<string, PendingSession> pendingSessions =
|
static readonly ConcurrentDictionary<string, PendingSession> pendingSessions =
|
||||||
new ConcurrentDictionary<string, PendingSession> ();
|
new ConcurrentDictionary<string, PendingSession> ();
|
||||||
|
|
||||||
public static string BeginSession (HttpContext context, Element element, bool disposeElementWhenDone)
|
public static string BeginSession (HttpContext context, Element element, bool disposeElementAfterSession, ILogger logger)
|
||||||
{
|
{
|
||||||
var id = Guid.NewGuid ().ToString ("N");
|
var id = Guid.NewGuid ().ToString ("N");
|
||||||
|
|
||||||
var s = new PendingSession {
|
var s = new PendingSession {
|
||||||
Element = element,
|
Element = element,
|
||||||
CreateTimeUtc = DateTime.UtcNow,
|
CreateTimeUtc = DateTime.UtcNow,
|
||||||
DisposeElementWhenDone = disposeElementWhenDone,
|
DisposeElementAfterSession = disposeElementAfterSession,
|
||||||
|
Logger = logger,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!pendingSessions.TryAdd (id, s)) {
|
if (!pendingSessions.TryAdd (id, s)) {
|
||||||
|
@ -35,7 +36,7 @@ namespace Ooui.AspNetCore
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task HandleWebSocketRequestAsync (HttpContext context, ILogger logger = null)
|
public static async Task HandleWebSocketRequestAsync (HttpContext context)
|
||||||
{
|
{
|
||||||
void BadRequest (string message)
|
void BadRequest (string message)
|
||||||
{
|
{
|
||||||
|
@ -104,7 +105,7 @@ namespace Ooui.AspNetCore
|
||||||
//
|
//
|
||||||
try {
|
try {
|
||||||
webSocket = await context.WebSockets.AcceptWebSocketAsync ("ooui").ConfigureAwait (false);
|
webSocket = await context.WebSockets.AcceptWebSocketAsync ("ooui").ConfigureAwait (false);
|
||||||
var session = new Ooui.WebSocketSession (webSocket, activeSession.Element, activeSession.DisposeElementWhenDone, w, h, token);
|
var session = new Ooui.WebSocketSession (webSocket, activeSession.Element, activeSession.DisposeElementAfterSession, w, h, token);
|
||||||
await session.RunAsync ().ConfigureAwait (false);
|
await session.RunAsync ().ConfigureAwait (false);
|
||||||
}
|
}
|
||||||
catch (System.Net.WebSockets.WebSocketException ex) when (ex.WebSocketErrorCode == System.Net.WebSockets.WebSocketError.ConnectionClosedPrematurely) {
|
catch (System.Net.WebSockets.WebSocketException ex) when (ex.WebSocketErrorCode == System.Net.WebSockets.WebSocketError.ConnectionClosedPrematurely) {
|
||||||
|
@ -112,7 +113,7 @@ namespace Ooui.AspNetCore
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
context.Abort ();
|
context.Abort ();
|
||||||
Console.WriteLine (ex);
|
activeSession?.Logger?.LogWarning (ex, "Web socket session failed");
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
webSocket?.Dispose ();
|
webSocket?.Dispose ();
|
||||||
|
@ -123,7 +124,8 @@ namespace Ooui.AspNetCore
|
||||||
{
|
{
|
||||||
public Element Element;
|
public Element Element;
|
||||||
public DateTime CreateTimeUtc;
|
public DateTime CreateTimeUtc;
|
||||||
public bool DisposeElementWhenDone;
|
public bool DisposeElementAfterSession;
|
||||||
|
public ILogger Logger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,12 @@ namespace Ooui
|
||||||
|
|
||||||
protected readonly List<Message> queuedMessages = new List<Message> ();
|
protected readonly List<Message> queuedMessages = new List<Message> ();
|
||||||
|
|
||||||
public Session (Element element, double initialWidth, double initialHeight)
|
protected readonly bool disposeElementAfterSession;
|
||||||
|
|
||||||
|
public Session (Element element, bool disposeElementAfterSession, double initialWidth, double initialHeight)
|
||||||
{
|
{
|
||||||
this.element = element;
|
this.element = element;
|
||||||
|
this.disposeElementAfterSession = disposeElementAfterSession;
|
||||||
this.initialWidth = initialWidth;
|
this.initialWidth = initialWidth;
|
||||||
this.initialHeight = initialHeight;
|
this.initialHeight = initialHeight;
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@ namespace Ooui
|
||||||
readonly string id;
|
readonly string id;
|
||||||
readonly Action<Message> handleElementMessageSent;
|
readonly Action<Message> handleElementMessageSent;
|
||||||
|
|
||||||
public WebAssemblySession (string id, Element element, bool disposeElementWhenDone, double initialWidth, double initialHeight)
|
public WebAssemblySession (string id, Element element, bool disposeElementAfterSession, double initialWidth, double initialHeight)
|
||||||
: base (element, initialWidth, initialHeight)
|
: base (element, disposeElementAfterSession, initialWidth, initialHeight)
|
||||||
{
|
{
|
||||||
this.id = id;
|
this.id = id;
|
||||||
handleElementMessageSent = QueueMessage;
|
handleElementMessageSent = QueueMessage;
|
||||||
|
|
|
@ -23,13 +23,10 @@ namespace Ooui
|
||||||
DateTime lastTransmitTime = DateTime.MinValue;
|
DateTime lastTransmitTime = DateTime.MinValue;
|
||||||
readonly TimeSpan throttleInterval = TimeSpan.FromSeconds (1.0 / UI.MaxFps);
|
readonly TimeSpan throttleInterval = TimeSpan.FromSeconds (1.0 / UI.MaxFps);
|
||||||
|
|
||||||
readonly bool disposeElementWhenDone;
|
public WebSocketSession (WebSocket webSocket, Element element, bool disposeElementAfterSession, double initialWidth, double initialHeight, CancellationToken serverToken)
|
||||||
|
: base (element, disposeElementAfterSession, initialWidth, initialHeight)
|
||||||
public WebSocketSession (WebSocket webSocket, Element element, bool disposeElementWhenDone, double initialWidth, double initialHeight, CancellationToken serverToken)
|
|
||||||
: base (element, initialWidth, initialHeight)
|
|
||||||
{
|
{
|
||||||
this.webSocket = webSocket;
|
this.webSocket = webSocket;
|
||||||
this.disposeElementWhenDone = disposeElementWhenDone;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create a new session cancellation token that will trigger
|
// Create a new session cancellation token that will trigger
|
||||||
|
@ -116,7 +113,7 @@ namespace Ooui
|
||||||
finally {
|
finally {
|
||||||
element.MessageSent -= handleElementMessageSent;
|
element.MessageSent -= handleElementMessageSent;
|
||||||
|
|
||||||
if (disposeElementWhenDone && (element is IDisposable disposable)) {
|
if (disposeElementAfterSession && (element is IDisposable disposable)) {
|
||||||
try {
|
try {
|
||||||
disposable.Dispose ();
|
disposable.Dispose ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue