public IMessage Generalize(Type messageType)
        {
            IMessage message = (IMessage)ALSerialize.JsonDeserialize(this.Body, messageType);

            message.ID        = BitConverter.ToInt64(this.Header, 0);
            message.TypeName  = this.Topic;
            message.Timestamp = DateTime.FromBinary(BitConverter.ToInt64(this.Header, 8));
            return(message);
        }
 public static RawMessage Parse(IMessage message)
 {
     return(new RawMessage
     {
         Topic = message.TypeName,
         Header = BitConverter.GetBytes(message.ID).Concat(BitConverter.GetBytes(message.Timestamp.ToBinary())).ToArray(),
         Body = ALSerialize.JsonSerialize(message),
     });
 }
Exemple #3
0
        /// <summary>
        /// 发布消息
        /// </summary>
        /// <param name="message">消息</param>
        public virtual void Dispatch(IMessage message)
        {
            List <MessageListener> messageListeners;

            globalListeners.TryGetValue(message.TypeName, out messageListeners);
            if (messageListeners == null)
            {
                return;
            }
            foreach (var messageListener in messageListeners)
            {
                Task.Factory.StartNew(() =>
                {
                    var msg       = (IMessage)ALSerialize.JsonDeserialize(ALSerialize.JsonSerialize(message), messageListener.Target);
                    msg.ID        = message.ID;
                    msg.Timestamp = message.Timestamp;
                    msg.TypeName  = message.TypeName;
                    messageListener.Handler(msg);
                });
            }
        }