public void Dispose() { WrappedSocketsMap.Clear(); IdentitySocketsMap.Clear(); IdentityConnectionSocketsMap.Clear(); StoredResponses.Clear(); StopProtocolJobs(); socket?.Dispose(); socket = null; }
private void HandleDisconnect(PairSocket remotePair) { if (remotePair.LastWill != null) { ProtocolHandler.HandleMessage(this, remotePair, remotePair.LastWill); } //Remove subscribers do cliente caso não seja do tipo Persistent List <PubSubQueue> queuesByPair; if (SubscriberSockets.TryGetValue(remotePair, out queuesByPair)) { for (var i = 0; i < queuesByPair.Count; i++) { var queue = queuesByPair[i]; queue.RemoveSubscriber(remotePair, false); if (queue.CanDispose) { Queue.Remove(queue.Name); } } } //Caso seja um cliente, libera os recursos alocados por ele if (remotePair != this) { WrappedSocketsMap.Remove(remotePair.Socket); IdentityConnectionSocketsMap.Remove(remotePair); remotePair.Dispose(); } remotePair.Close(); OnClientDisconnect?.Invoke(remotePair); }