Esempio n. 1
0
        public override bool HandleMessage(PairSocket me, PairSocket remote, Envelope envelop)
        {
            var queue = envelop.ReadNext <string>();

            PubSubQueue pubSubQueue;

            lock (me.Queue)
            {
                if (!me.Queue.ContainsKey(queue))
                {
                    return(true);
                }

                pubSubQueue = me.Queue[queue];
            }

            var senderDate = DateConverter.ConvertToUnixTimestamp(DateTime.Now);

            var queueEnvelop = new Envelope(envelop.GetMessage());

            queueEnvelop.Append(PublishDeliveredProtocol.Command);
            queueEnvelop.Append(queue);
            queueEnvelop.Append((byte)PubSubQueueLostType.None);

            foreach (var item in pubSubQueue.GetClients())
            {
                if (item.PairSocket == remote)
                {
                    continue;
                }

                item.PairSocket.Socket.Send(queueEnvelop.ToByteArray());
            }

            var lastMsg = new Envelope(envelop.GetMessage());

            queueEnvelop.Append(PublishDeliveredProtocol.Command);
            queueEnvelop.Append(queue);
            queueEnvelop.Append((byte)PubSubQueueLostType.LastMessage);
            queueEnvelop.Append(senderDate);

            pubSubQueue.LastMessage = lastMsg;

            return(true);
        }