/// <summary>Unsubscribe from single use subscription.</summary> private void UnsubscribeSingleSubscription(string _messageHeader, SubscriberFunction _messageFunction) { if (m_useSingle && m_hasSingle) { string subscriptionKey = _messageHeader + " ~ " + _messageFunction.Method; //If in single active subscriptions, unsubscribe from LocalNoticeBoard if (m_singleActiveSubscriptions.ContainsKey(subscriptionKey)) { if (m_singleActiveSubscriptions[subscriptionKey].m_noticeBoard) { m_singleActiveSubscriptions[subscriptionKey].m_noticeBoard.UnsubscribeToMessage( m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader, _messageFunction, OnRemoveSubscriberList); } else { GlobalNoticeBoard.s_instance.UnsubscribeToMessage( m_singleActiveSubscriptions[subscriptionKey].m_staticMessageHeader, _messageFunction); } MPac_UnsubscribedLocalMessage package = new MPac_UnsubscribedLocalMessage( m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader, "Local Message: " + m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader + " ~Unsubscribed", m_singleActiveSubscriptions[subscriptionKey].m_dynamicMessageHeader); m_singleActiveSubscriptions[subscriptionKey].m_unsubscribeFunction?.Invoke(package); m_singleActiveSubscriptions.Remove(subscriptionKey); } if (m_singleActiveSubscriptions.Count == 0) { m_hasSingle = false; } } }
/// <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; } } }