예제 #1
0
        /// <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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        /// <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));
            });
        }
예제 #4
0
 public RawMessageContainer(TodoMessageTypes payloadType, byte[] data)
 {
     PayloadType = payloadType;
     Data        = data;
 }