Skip to content

Commit a296e2c

Browse files
committed
Add resource lifecycle events
1 parent 6e6649a commit a296e2c

File tree

1 file changed

+42
-27
lines changed

1 file changed

+42
-27
lines changed

WebSocketServer.cs

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,6 @@ public WebSocketServer()
4040
logLevel = Function.Call<string>(Hash.GET_CONVAR, "websocket_debug", "false") == "true" ? LogLevels.Debug : LogLevels.Info;
4141
authorization = Function.Call<string>(Hash.GET_CONVAR, "websocket_authorization", "");
4242

43-
webSockets = new List<WebSocket>();
44-
EventHandlers["WebSocketServer:broadcast"] += new Action<dynamic>((dynamic message) =>
45-
{
46-
lock (webSockets)
47-
{
48-
foreach (var webSocket in webSockets)
49-
{
50-
if (webSocket.IsConnected)
51-
{
52-
webSocket.WriteStringAsync((string) message, CancellationToken.None);
53-
}
54-
else
55-
{
56-
webSockets.Remove(webSocket);
57-
}
58-
}
59-
}
60-
});
61-
6243
IPAddress listeningHost = IPAddress.Loopback;
6344
IPAddress.TryParse(Function.Call<string>(Hash.GET_CONVAR, "websocket_host", "127.0.0.1"), out listeningHost);
6445
int listeningPort = Function.Call<int>(Hash.GET_CONVAR_INT, "websocket_port", 80);
@@ -92,17 +73,51 @@ public WebSocketServer()
9273
TriggerEvent("WebSocketServer:onMessage", msg);
9374
};
9475

95-
try
76+
EventHandlers["onResourceStart"] += new Action<dynamic>((dynamic resourceName) =>
9677
{
97-
server.Start();
98-
Tick += server.ListenAsync;
78+
if ((string) resourceName == "WebSocketServer")
79+
{
80+
try
81+
{
82+
server.Start();
83+
Tick += server.ListenAsync;
9984

100-
Log("Started at " + endpoint.ToString());
101-
}
102-
catch (Exception e)
85+
Log("Started at " + endpoint.ToString());
86+
}
87+
catch (Exception e)
88+
{
89+
Log("Can't start server at " + endpoint.ToString() + ": " + e.Message);
90+
}
91+
}
92+
});
93+
94+
EventHandlers["onResourceStop"] += new Action<dynamic>((dynamic resourceName) =>
10395
{
104-
Log("Can't start server at " + endpoint.ToString() + ": " + e.Message);
105-
}
96+
if ((string) resourceName == "WebSocketServer")
97+
{
98+
server.Stop();
99+
server.Dispose();
100+
}
101+
});
102+
103+
webSockets = new List<WebSocket>();
104+
EventHandlers["WebSocketServer:broadcast"] += new Action<dynamic>((dynamic message) =>
105+
{
106+
lock (webSockets)
107+
{
108+
foreach (var webSocket in webSockets)
109+
{
110+
if (webSocket.IsConnected)
111+
{
112+
webSocket.WriteStringAsync((string) message, CancellationToken.None);
113+
}
114+
else
115+
{
116+
webSockets.Remove(webSocket);
117+
}
118+
}
119+
}
120+
});
106121
}
107122

108123
private void Log(string message, LogLevels level = LogLevels.Info)

0 commit comments

Comments
 (0)