private void disconnect() { // leave group if (group != null) { group.Leave(); T.LogDebug("Left " + group + "."); } else { T.LogDebug("No group to leave."); } // stop listener if (listening) { if (regularMessageHandler != null) { connection.OnRegularMessage -= regularMessageHandler; } if (membershipMessageHandler != null) { connection.OnMembershipMessage -= membershipMessageHandler; } if (rt.threadSuspended) { lock (rt) { Monitor.Pulse(rt); rt.threadSuspended = false; } } } // Disconnect. connection.Disconnect(); }