diff --git a/websocket/WebsocketResource.cs b/websocket/WebsocketResource.cs index 467cf80..04f731c 100644 --- a/websocket/WebsocketResource.cs +++ b/websocket/WebsocketResource.cs @@ -5,6 +5,7 @@ using ln.logging; using System.IO; using ln.types; using System.Text; +using System.Linq; namespace ln.http.resources.websocket { @@ -12,6 +13,9 @@ namespace ln.http.resources.websocket { public Func WebSocketFactory { get; } + public IEnumerable CurrentWebSockets { get { lock (this) { return currentWebSockets.ToArray(); }; } } + List currentWebSockets = new List(); + public WebsocketResource(Resource container,String resourceName, Func webSocketFactory) :base(container,resourceName) { @@ -25,14 +29,24 @@ namespace ln.http.resources.websocket public override HttpResponse GetResponse(HttpRequest httpRequest) { + WebSocket webSocket = null; try { - WebSocketFactory(httpRequest).Run(); + webSocket = WebSocketFactory(httpRequest); + lock (this) + currentWebSockets.Add(webSocket); + webSocket.Run(); } catch (Exception e) { Logging.Log(e); } + finally + { + if (webSocket != null) + lock (this) + currentWebSockets.Remove(webSocket); + } httpRequest.GetConnectionStream().Close(); return null;