Esempio n. 1
0
        protected override bool XSend(ref Msg msg, SendReceiveOptions flags)
        {
            byte[] data = msg.Data;
            int    size = msg.Size;

            if (size > 0 && data[0] == 1)
            {
                // Process the subscription.
                if (m_subscriptions.Add(data, 1, size - 1))
                {
                    m_dist.SendToAll(ref msg, flags);
                    return(true);
                }
            }
            else if (size > 0 && data[0] == 0)
            {
                if (m_subscriptions.Remove(data, 1, size - 1))
                {
                    m_dist.SendToAll(ref msg, flags);
                    return(true);
                }
            }
            else
            {
                // upstream message unrelated to sub/unsub
                m_dist.SendToAll(ref msg, flags);

                return(true);
            }

            msg.Close();
            msg.InitEmpty();

            return(true);
        }
Esempio n. 2
0
        protected override bool XSend(Msg msg, SendReceiveOptions flags)
        {
            byte[] data = msg.Data;
            // Malformed subscriptions.
            if (data.Length < 1 || (data[0] != 0 && data[0] != 1))
            {
                throw InvalidException.Create();
            }

            // Process the subscription.
            if (data[0] == 1)
            {
                if (m_subscriptions.Add(data, 1))
                {
                    m_dist.SendToAll(msg, flags);
                }
            }
            else
            {
                if (m_subscriptions.Remove(data, 1))
                {
                    m_dist.SendToAll(msg, flags);
                }
            }

            return(true);
        }