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); }
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); }