コード例 #1
0
 void FromAdapter_RemoveClient(Guid[] clientId)
 {
     foreach (var client in clientId)
     {
         if (client != this.clientId && clientTable.Remove(client) && isStarted)
         {
             RemoteClientRemoved?.Invoke(this, new ClientIdEventArgs(client));
         }
     }
 }
コード例 #2
0
        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);
            }
        }