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