/// <summary>Unsubscribe previous frame solo subscriptions.</summary> private void UnsubscribeSoloSubscriptions() { if (m_useSolo && m_hasSolo) { //Unsubscribe previous solo subscriptions from LocalNoticeBoards foreach (KeyValuePair <string, ActiveSubscription> subscription in m_prevSoloActiveSubscriptions) { if (subscription.Value.m_noticeBoard) { subscription.Value.m_noticeBoard.UnsubscribeToMessage( subscription.Value.m_dynamicMessageHeader, subscription.Value.m_subscriberFunction, OnRemoveSubscriberList); //Creates LocalNoticeBoard unsubscription package MPac_UnsubscribedLocalMessage package = new MPac_UnsubscribedLocalMessage( subscription.Value.m_dynamicMessageHeader, "Local Message: " + subscription.Value.m_dynamicMessageHeader + " ~Unsubscribed", subscription.Value.m_dynamicMessageHeader); subscription.Value.m_unsubscribeFunction?.Invoke(package); } else { GlobalNoticeBoard.s_instance.UnsubscribeToMessage( subscription.Value.m_staticMessageHeader, subscription.Value.m_subscriberFunction); //Creates GlobalNoticeBoard unsubscription package MPac_UnsubscribedGlobalMessage package = new MPac_UnsubscribedGlobalMessage( subscription.Value.m_staticMessageHeader, "Global Message: " + subscription.Value.m_staticMessageHeader.ToString() + " ~Unsubscribed", subscription.Value.m_staticMessageHeader.ToString()); subscription.Value.m_unsubscribeFunction?.Invoke(package); } } m_prevSoloActiveSubscriptions.Clear(); //Transfer current buffer to previous buffer foreach (KeyValuePair <string, ActiveSubscription> subscription in m_soloActiveSubscriptions) { m_prevSoloActiveSubscriptions.Add(subscription.Key, subscription.Value); } m_soloActiveSubscriptions.Clear(); if (m_prevSoloActiveSubscriptions.Count == 0) { m_hasSolo = false; } } }
/// <summary>Unsubscribe from global subscription.</summary> private void UnsubscribeGlobalMessage(MessageHeader _messageHeader, Interest _interest) { string subscriptionKey = _messageHeader.ToString() + " ~ " + _interest.m_messageFunction.Method; GlobalNoticeBoard.s_instance.UnsubscribeToMessage(_messageHeader, _interest.m_messageFunction); //If UnsubscribeFunction, send unsub package MPac_UnsubscribedGlobalMessage package = new MPac_UnsubscribedGlobalMessage( _messageHeader, "Global Message: " + _messageHeader.ToString() + " ~Unsubscribed", _messageHeader.ToString()); _interest.m_unsubscribeFunction?.Invoke(package); //Removes active subscription to relevant list switch (_interest.m_persistence) { case SubscriptionPersistence.Endless: { m_endlessActiveSubscriptions.Remove(subscriptionKey); break; } case SubscriptionPersistence.SingleUse: { m_singleActiveSubscriptions.Remove(subscriptionKey); break; } case SubscriptionPersistence.SoloFrame: { m_soloActiveSubscriptions.Remove(subscriptionKey); m_prevSoloActiveSubscriptions.Remove(subscriptionKey); m_hasSolo = true; break; } default: { break; } } }