void FromAdapter_RemoveClient(Guid[] clientId) { foreach (var client in clientId) { if (client != this.clientId && clientTable.Remove(client) && isStarted) { RemoteClientRemoved?.Invoke(this, new ClientIdEventArgs(client)); } } }
void RemoveAdapterFromAdapterOfClients(Guid remoteClientId, IRemoteHubAdapter<byte[]> adapter) { lock (adapterOfClients) //lock while changing { if (adapterOfClients.TryGetValue(remoteClientId, out var old) && old == adapter) { adapterOfClients.TryRemove(remoteClientId, out _); RemoteClientRemoved?.Invoke(this, new RemoteClientChangedEventArgs(remoteClientId, adapter)); } else { return; } } //broadcast var allAdapters = adapters.Keys.ToArray(); foreach (var target in allAdapters) { if (target != adapter) target.RemoveClient(remoteClientId); } }