Пример #1
0
        public void I_should_be_able_to_split_the_group_into_individual_messages_and_handle_each_one_on_its_own()
        {
            IServiceBus bus = MockRepository.GenerateMock <IServiceBus>();

            PingMessage ping = new PingMessage();
            PongMessage pong = new PongMessage();

            MessageGroup group = MessageGroup.Build <MessageGroup>()
                                 .Add(ping)
                                 .Add(pong);

            bus.Expect(x => x.Publish(ping));
            bus.Expect(x => x.Publish(pong));

            group.Split(bus);

            bus.VerifyAllExpectations();
        }
Пример #2
0
 /// <summary>发送消息。如果有响应,可在消息到达事件<see cref="OnReceived"/>中获得。这里会实现大消息分包。</summary>
 /// <param name="message"></param>
 public virtual void Send(Message message)
 {
     var ms = message.GetStream();
     WriteLog("发送消息 [{0}] {1}", ms.Length, message);
     if (MaxMessageSize <= 0 || ms.Length < MaxMessageSize)
         OnSend(ms);
     else
     {
         var mg = new MessageGroup();
         mg.Split(ms, MaxMessageSize, message.Header);
         var count = 0;
         foreach (var item in mg)
         {
             if (item.Index == 1) count = item.Count;
             ms = item.GetStream();
             WriteLog("发送分组 Identity={0} {1}/{2} [{3}] [{4}]", item.Identity, item.Index, count, item.Data == null ? 0 : item.Data.Length, ms.Length);
             Debug.Assert(item.Index == count || ms.Length == MaxMessageSize, "分拆的组消息大小不合适!");
             OnSend(ms);
         }
     }
 }