Skip to content

Commit 3695d9e

Browse files
authored
Merge branch 'Corona-Studio:main' into main
2 parents 882c252 + 76f477a commit 3695d9e

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

ConnectX.Server/InterconnectServerLinkHolder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private async Task KeepInterconnectLinkHeartBeatAsync(CancellationToken stopping
7878
continue;
7979
}
8080

81-
await _dispatcher.SendAsync(tcpSession, new HeartBeat(), stoppingToken);
81+
_dispatcher.SendAsync(tcpSession, new HeartBeat(), stoppingToken).Forget();
8282
}
8383

8484
foreach (var (endPoint, session) in sessionsNeedToReconnect)

ConnectX.Server/Managers/ClientManager.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Hive.Both.General.Dispatchers;
55
using Hive.Network.Abstractions;
66
using Hive.Network.Abstractions.Session;
7+
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Hosting;
89
using Microsoft.Extensions.Logging;
910

@@ -14,14 +15,17 @@ namespace ConnectX.Server.Managers;
1415
public class ClientManager : BackgroundService
1516
{
1617
private readonly IDispatcher _dispatcher;
18+
private readonly IServiceScopeFactory _serviceScopeFactory;
1719
private readonly ILogger _logger;
1820
private readonly ConcurrentDictionary<SessionId, WatchDog> _watchDogMapping = new();
1921

2022
public ClientManager(
2123
IDispatcher dispatcher,
24+
IServiceScopeFactory serviceScopeFactory,
2225
ILogger<ClientManager> logger)
2326
{
2427
_dispatcher = dispatcher;
28+
_serviceScopeFactory = serviceScopeFactory;
2529
_logger = logger;
2630

2731
_dispatcher.AddHandler<ShutdownMessage>(OnReceivedShutdownMessage);
@@ -75,10 +79,18 @@ private void OnReceivedHeartBeat(MessageContext<HeartBeat> ctx)
7579
ctx.Dispatcher.SendAsync(ctx.FromSession, new ShutdownMessage()).Forget();
7680
ctx.Dispatcher.RemoveHandler<HeartBeat>(OnReceivedHeartBeat);
7781
return;
78-
}
82+
}
83+
84+
watchDog.Received();
85+
86+
using var scope = _serviceScopeFactory.CreateScope();
87+
var interconnectServerManager = scope.ServiceProvider.GetRequiredService<InterconnectServerManager>();
88+
89+
// if the session is registered for interconnect, we don't need to send heartbeat back
90+
if (interconnectServerManager.IsServerRegisteredForInterconnect(ctx.FromSession.Id))
91+
return;
7992

8093
ctx.Dispatcher.SendAsync(ctx.FromSession, new HeartBeat()).Forget();
81-
watchDog.Received();
8294
}
8395

8496
protected override async Task ExecuteAsync(CancellationToken stoppingToken)

ConnectX.Server/Managers/InterconnectServerManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public InterconnectServerManager(
4343
_dispatcher.AddHandler<QueryRemoteServerRoomInfo>(OnQueryRemoteServerRoomInfoReceived);
4444
}
4545

46+
public bool IsServerRegisteredForInterconnect(SessionId sessionId)
47+
{
48+
return _sessionMapping.ContainsKey(sessionId);
49+
}
50+
4651
private void OnClientSessionDisconnected(SessionId sessionId)
4752
{
4853
if (!_sessionMapping.TryRemove(sessionId, out var session))

0 commit comments

Comments
 (0)