/// <summary>Receiver for "DynamicMessageCreated" message</summary> public void OnDynamicMessageCreated(object _package = null) { //Checks whether package is valid before casting if (_package != null) { MPac_DynamicMessageCreated package = (MPac_DynamicMessageCreated)_package; //Checks whether client is interested in message if (CheckInterestList(package.MessagePrefix, package.MessageHeader)) { SubscribeToDynamicMessage(package); } } }
/// <summary>Creates subscriber List from MessageHeader.</summary> public void CreateSubscriberList(string _messageHeader) { //Adds reference to index in message buffer m_listReferences.Add(_messageHeader, m_subscriberList.Count); SubscriberList list = new SubscriberList(); list.m_messageHeader = _messageHeader; list.m_messageFunction = null; list.m_removeFunction = null; m_subscriberList.Add(list); //Informs global that a new Message has been created MPac_DynamicMessageCreated package = new MPac_DynamicMessageCreated(this, MessageHelper.GetPrefix(_messageHeader), _messageHeader); GlobalNoticeBoard.s_instance.AddMessage(MessageFormat.RapidBypass, MessageHeader.GLO_DynamicMessageCreated, package); }
/// <summary>Subscribe every function on prefix or message list to MessageHeader on LocalNoticeBoard.</summary> private void SubscribeToDynamicMessage(MPac_DynamicMessageCreated _messagePackage) { foreach (Interest interest in GetInterests(_messagePackage.MessagePrefix, _messagePackage.MessageHeader)) { string subscriptionKey = _messagePackage.MessageHeader + " ~ " + interest.m_messageFunction.Method; _messagePackage.NoticeBoard.SubscribeToMessage(_messagePackage.MessageHeader, interest.m_messageFunction, OnRemoveSubscriberList); //Adds active subscription to relevant list switch (interest.m_persistence) { case SubscriptionPersistence.Endless: { m_endlessActiveSubscriptions.Add(subscriptionKey, new ActiveSubscription( _messagePackage.NoticeBoard, _messagePackage.MessageHeader, interest.m_messageFunction, interest.m_unsubscribeFunction)); break; } case SubscriptionPersistence.SingleUse: { m_singleActiveSubscriptions.Add(subscriptionKey, new ActiveSubscription( _messagePackage.NoticeBoard, _messagePackage.MessageHeader, interest.m_messageFunction, interest.m_unsubscribeFunction)); m_hasSingle = true; break; } case SubscriptionPersistence.SoloFrame: { m_soloActiveSubscriptions.Add(subscriptionKey, new ActiveSubscription( _messagePackage.NoticeBoard, _messagePackage.MessageHeader, interest.m_messageFunction, interest.m_unsubscribeFunction)); m_hasSolo = true; break; } default: { break; } } } }