Настольная программа подключается к серверу по сигналу.
Если выдернуть на клиенте кабель на 20 секунд и потом воткнуть,
то идет реконнект на сервер OnConnectedAsync и только потом отключается OnDisconnectedAsync (30 секунд) предыдущий коннект.
Получается соединение восстановилось, а сервер уведомляет, что клиент отвалился.
При этом в хабе на сервере, даже клиентский сокет не достать, только id соединения.
Сделал так( по логике вроде клиент может только один быть), но что-то смущает. Или норм?
private static readonly ConcurrentDictionary<string, int> connections = new ConcurrentDictionary<string, int>();
public override async Task OnConnectedAsync()
{
connections.AddOrUpdate(Context.UserIdentifier, 1, (k, v) => v + 1);
notifyService.ClientOnline(Context.UserIdentifier, Context.User.Identity.Name);
}
public override async Task OnDisconnectedAsync(Exception exception)
{
var count = connections.AddOrUpdate(Context.UserIdentifier, 0, (k, v) => v - 1);
if (count > 0)
return;
notifyService.ClientOffline(Context.UserIdentifier, Context.User.Identity.Name);
}