/// <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);
                }
            }
        }
Beispiel #2
0
        /// <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;
                }
                }
            }
        }