/// <summary> /// Creates a RawMessageContainer from the parameters. /// </summary> /// <param name="type">Type of message to pass to container.</param> /// <param name="payload">Raw, serialized payload in bytes.</param> /// <returns>Serialized bytes.</returns> public byte[] SerializeMessageContainer(TodoMessageTypes type, byte[] payload) { var messageContainer = new RawMessageContainer(type, payload); var rawProtoContainer = Mapper.Map <RawMessageContainer, MessageContainerProto>(messageContainer); return(GetBytesFromProto <MessageContainerProto>(rawProtoContainer)); }
public static RawClientRequest BuildRawRequest <T>(T message, TodoMessageTypes payloadType, IClientNode client) { var messageStream = new MemoryStream(); Serializer.Serialize <T>(messageStream, message); var container = new MessageContainerProto() { Data = messageStream.ToArray(), PayloadType = (uint)payloadType }; var containerStream = new MemoryStream(); Serializer.Serialize <MessageContainerProto>(containerStream, container); return(new RawClientRequest(containerStream.ToArray(), client)); }
/// <summary> /// Registers message type enums to <typeparamref name="T"/> type. /// </summary> /// <typeparam name="T">Generic ICommMessage param to map enum to.</typeparam> /// <param name="type">MessageType enum value to map from when message is read.</param> public void RegisterType <T>(TodoMessageTypes type) where T : ICommMessage { if (_routes.ContainsKey(type)) { throw new Exception("Already handled"); } var subject = new Subject <ClientCommMessage <T> >(); _clientCommRouter.RegisterPublisher <T>(subject); // Add action to lookup for Publish step. _routes.Add(type, (rawMessage) => { var message = (T)rawMessage; // Using a closure here. Might be better to cache value in it's own dictionary // If this proves to leak memory or have debugging issues. // This packages up the request with relavent client info. subject.OnNext(Package <T>(message)); }); }
public RawMessageContainer(TodoMessageTypes payloadType, byte[] data) { PayloadType = payloadType; Data = data; }