🐛 crash on abnormal disconnecting from websocket server

This commit is contained in:
2023-10-19 20:20:40 +03:00
parent 893c73512a
commit ee9f3fbe3a
8 changed files with 66 additions and 19 deletions
+25
View File
@@ -0,0 +1,25 @@
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/.idea
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
+1
View File
@@ -1,6 +1,7 @@
.DS_Store .DS_Store
.idea .idea
.vs .vs
.vscode
obj obj
bin bin
*.user *.user
+1 -1
View File
@@ -1,4 +1,4 @@
<p align="center"> <p>
<img src="Images/ragon-logo.png" width="200" > <img src="Images/ragon-logo.png" width="200" >
</p> </p>
@@ -46,6 +46,9 @@ public class WebSocketServer : INetworkServer
public async void StartAccept(CancellationToken cancellationToken) public async void StartAccept(CancellationToken cancellationToken)
{ {
while (!cancellationToken.IsCancellationRequested) while (!cancellationToken.IsCancellationRequested)
{
WebSocketConnection connection = null!;
try
{ {
var context = await _httpListener.GetContextAsync(); var context = await _httpListener.GetContextAsync();
if (!context.Request.IsWebSocketRequest) if (!context.Request.IsWebSocketRequest)
@@ -58,11 +61,18 @@ public class WebSocketServer : INetworkServer
var webSocketContext = await context.AcceptWebSocketAsync(null); var webSocketContext = await context.AcceptWebSocketAsync(null);
var webSocket = webSocketContext.WebSocket; var webSocket = webSocketContext.WebSocket;
var peerId = _sequencer.Pop(); var peerId = _sequencer.Pop();
var connection = new WebSocketConnection(webSocket, peerId);
_connections[peerId] = connection; connection = new WebSocketConnection(webSocket, peerId);
}
catch (Exception ex)
{
_logger.Warn(ex);
continue;
}
_connections[connection.Id] = connection;
StartListen(connection, cancellationToken); StartListen(connection, cancellationToken);
} }
} }
@@ -97,6 +107,7 @@ public class WebSocketServer : INetworkServer
_sequencer.Push(connection.Id); _sequencer.Push(connection.Id);
_activeConnections.Remove(connection); _activeConnections.Remove(connection);
_networkListener.OnDisconnected(connection); _networkListener.OnDisconnected(connection);
} }
+3
View File
@@ -14,6 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
using Ragon.Protocol;
using Ragon.Server.Handler;
using Ragon.Server.IO; using Ragon.Server.IO;
using Ragon.Server.Lobby; using Ragon.Server.Lobby;
@@ -21,6 +23,7 @@ namespace Ragon.Server;
public interface IRagonServer public interface IRagonServer
{ {
BaseOperation ResolveHandler(RagonOperation operation);
RagonLobbyPlayer? GetPlayerByConnection(INetworkConnection connection); RagonLobbyPlayer? GetPlayerByConnection(INetworkConnection connection);
RagonLobbyPlayer? GetPlayerById(string id); RagonLobbyPlayer? GetPlayerById(string id);
} }
@@ -28,10 +28,10 @@ public class RagonWebHookPlugin
{ {
private Dictionary<string, string> _webHooks; private Dictionary<string, string> _webHooks;
private RagonServer _server; private IRagonServer _server;
private HttpClient _httpClient; private HttpClient _httpClient;
public RagonWebHookPlugin(RagonServer server, RagonServerConfiguration configuration) public RagonWebHookPlugin(IRagonServer server, RagonServerConfiguration configuration)
{ {
_webHooks = new Dictionary<string, string>(configuration.WebHooks); _webHooks = new Dictionary<string, string>(configuration.WebHooks);
_httpClient = new HttpClient(); _httpClient = new HttpClient();
@@ -46,7 +46,7 @@ public class RagonWebHookPlugin
var executor = context.Executor; var executor = context.Executor;
executor.Run(async () => executor.Run(async () =>
{ {
var authorizationOperation = (AuthorizationOperation) _server.ResolveOperation(RagonOperation.AUTHORIZE); var authorizationOperation = (AuthorizationOperation) _server.ResolveHandler(RagonOperation.AUTHORIZE);
var response = await _httpClient.PostAsync(new Uri(value), httpContent); var response = await _httpClient.PostAsync(new Uri(value), httpContent);
if (response.StatusCode != HttpStatusCode.OK) if (response.StatusCode != HttpStatusCode.OK)
{ {
+1 -1
View File
@@ -223,7 +223,7 @@ public class RagonServer : IRagonServer, INetworkListener
_server.Broadcast(sendData, NetworkChannel.UNRELIABLE); _server.Broadcast(sendData, NetworkChannel.UNRELIABLE);
} }
public BaseOperation ResolveOperation(RagonOperation operation) public BaseOperation ResolveHandler(RagonOperation operation)
{ {
return _handlers[(byte)operation]; return _handlers[(byte)operation];
} }
+7
View File
@@ -0,0 +1,7 @@
{
"sdk": {
"version": "7.0.0",
"rollForward": "latestMajor",
"allowPrerelease": false
}
}