示例#1
0
//subscribe to a collection shard (pull)
        public virtual void Subscribe(SendChannel <T> channel, Task task)
        {
            //dependes - list people the need to run next
            dependents = dependents.Concat(new Task[] { task }).ToArray();
            //where to send to stuff
            outputChannels = outputChannels.Concat(new SendChannel <T>[] { channel }).ToArray();


            var tempMessage = new Message <T>(null);

            //ask current content for that shard
            //contentes - virtual method each one has to define to create the diff.
            foreach (var record in Contents())
            {
                //Console.WriteLine("Sending {0}", record);

                //if all the message is ready to send - fill up all the message in payload
                if (tempMessage.length == tempMessage.payload.Length)
                {
                    channel.Send(ref tempMessage);

                    tempMessage.length = 0;
                }

                tempMessage.payload[tempMessage.length++] = record;
            }
            //send even if the payload is not full...
            tempMessage.status = MessageStatus.FinalNonEmpty;
            //send to every single channel
            channel.Send(ref tempMessage);
        }
示例#2
0
        public ActionResult ReSend(SendChannel channel, string nkeys)
        {
            string temp = Regex.Replace(nkeys, @"\D", " ");

            string[] nums = temp.Split(' ');
            foreach (string k in nums)
            {
                if (string.IsNullOrEmpty(k))
                {
                    continue;
                }
                List <Privacy> plist = db.Privacies.Where(p => p.NucleusKey.Equals(k)).ToList();
                foreach (Privacy pp in plist)
                {
                    pp.SENDCHANEL &= ~channel;
                    if (channel == SendChannel.PFORCERX)
                    {
                        pp.SENDCHANEL &= ~SendChannel.PFORCERX_INVALID;
                        pp.SENDCHANEL &= ~SendChannel.PFORCERX_ONEKEY_DUP;
                    }
                    db.Entry(pp).State = System.Data.Entity.EntityState.Modified;
                }
                db.SaveChanges();
            }

            return(RedirectToAction("ReSend"));;
        }
        public override void Subscribe(SendChannel <Weighted <T> > channel, Task task)
        {
            source1.Subscribe(channel, task);

            var negation = new NegationChannel <T>(channel);

            source2.Subscribe(negation, task);
        }
示例#4
0
        /// <summary>
        /// 根据消息 标题 通道和发送目标发送消息
        /// </summary>
        /// <param name="title"></param>
        /// <param name="channel"></param>
        /// <param name="sendtoIds"></param>
        public void Send(string title, SendChannel channel, params int[] sendtoIds)
        {
            JMessage msg = new JMessage
            {
                Title     = title,
                SendToIds = sendtoIds,
                Channel   = channel,
                SenderId  = AppManager.Instance.GetCurrentUserId().ToInt()
            };

            _processer.Add(msg);
        }
示例#5
0
        public static void Main()
        {
            var conn        = new RabbitMQConnection("amqp://localhost");
            var sendChannel = new SendChannel(conn);


            int i = 0;

            while (i++ < 30)
            {
                Thread.Sleep(1000);
                Console.WriteLine(" [x] Sent {0}", i);
                sendChannel.Send(i, null);
            }

            Console.WriteLine(" Press [enter] to exit.");
            Console.ReadLine();
        }
 private void ProcessNewEvent(Event newEvent)
 {
     try
     {
         // посылаем событие подписчику
         SendChannel.SetData(newEvent);
     }
     catch (Exception ex)
     {
         // что-то произошло при передаче события, но это не повод для прекращения работы
         Log.Error(ex, "Ошибка передачи события " + newEvent, ex);
     }
     finally
     {
         lock (_counterLock)
         {
             --_activeEventsCount;
         }
     }
 }
示例#7
0
 public void AddReceiver(SendChannel <S, T> receiver)
 {
     this.onListener(receiver);
 }
        public override void Subscribe(SendChannel <Weighted <R> > channel, Task task)
        {
            var selectChannel = new SelectManyChannel <T, R>(channel, selector);

            source1.Subscribe(selectChannel, task);
        }
 public SelectManyChannel(SendChannel <Weighted <R> > channel, Func <T, IEnumerable <R> > s)
 {
     baseChannel = channel; selector = s;
 }
        public override void Subscribe(SendChannel <Weighted <T> > channel, Task task)
        {
            var whereChannel = new WhereChannel <T>(channel, predicate);

            source1.Subscribe(whereChannel, task);
        }
 public NegationChannel(SendChannel <Weighted <T> > channel)
 {
     baseChannel = channel;
 }
示例#12
0
 public override void Subscribe(SendChannel <Weighted <T> > channel, Task task)
 {
     source1.Subscribe(channel, task);
     source2.Subscribe(channel, task);
 }
示例#13
0
 public void Register(SendChannel channel, IMessageSender sender)
 {
     sendersDict[channel] = sender;
 }
 public SelectChannel(SendChannel <Weighted <R> > channel, Func <T, R> s)
 {
     baseChannel = channel; selector = s;
 }
示例#15
0
 public void Register(SendChannel channel, IMessageSender sender)
 {
     _router.Register(channel, sender);
 }
示例#16
0
 public void Send(Message m) => SendChannel.Send(m);
 public WhereChannel(SendChannel <Weighted <T> > channel, Func <T, bool> p)
 {
     baseChannel = channel; predicate = p;
 }