removeClient method

  1. @override
void removeClient(
  1. SocketClient client
)
override

Remove a client from the adapter.

Implementation

@override
void removeClient(SocketClient client) {
  _clients.remove(client.id);

  final user = client.authenticatedUser;
  if (user != null && user.getAuthIdentifier() != null) {
    _userClientMap.remove(user.getAuthIdentifierName());
  }

  // Remove from all rooms
  for (final room in client.rooms) {
    _rooms[room]?.remove(client);
    if (_rooms[room]?.isEmpty ?? false) {
      _rooms.remove(room);
    }
  }

  // Remove from all event subscriptions
  for (final subscribers in _eventSubscribers.values) {
    subscribers.remove(client);
  }
  _eventSubscribers.removeWhere((_, subscribers) => subscribers.isEmpty);
}