/// <summary> /// Initializes a new instance of the <see cref="MessageSinkParameters"/> class. /// </summary> /// <param name="config">The config.</param> /// <param name="data">The data.</param> public MessageSinkParameters(IMessageSinkConfiguration config, byte[] data) { if (config == null) { ThrowHelper.ThrowArgumentNullException("config"); } if (data == null) { ThrowHelper.ThrowArgumentNullException("data"); } ConfigurationToDeserialize = config; SerializedData = data; }
/// <summary> /// Initializes a new instance of the <see cref="MessageHeader"/> class. /// </summary> /// <param name="messageSinkId">The message sink id.</param> /// <param name="messageLength">Length of the message.</param> /// <param name="messageSinkConfiguration">The message sink configuration.</param> public MessageHeader(String messageSinkId, int messageLength, IMessageSinkConfiguration messageSinkConfiguration) { if (string.IsNullOrEmpty(messageSinkId)) { ThrowHelper.ThrowArgumentNullException("messageSinkId"); } if (messageLength < 0) { ThrowHelper.ThrowArgumentOutOfRangeException("messageLength"); } this.mMessageSinkId = messageSinkId; this.mMessageLength = messageLength; this.mMessageSinkConfiguration = messageSinkConfiguration; if (messageSinkConfiguration != null) { this.mMessageSinkConfigurationClassName = messageSinkConfiguration.GetType().FullName; } }
/// <summary> /// Writes the specified stream. /// </summary> /// <param name="stream">The stream.</param> /// <param name="data">The data.</param> /// <param name="messageSinkId">The message sink id.</param> /// <param name="messageSinkConfiguration">The message sink configuration.</param> /// <param name="maxMessageSize">Size of the max message.</param> /// <exception cref="MessageSecurityException"> /// Provided data size is larger than the maximum allowed message size. /// or /// Serialized message size is larger then the maximum allowed size. /// </exception> public void Write(NetworkStream stream, byte[] data, String messageSinkId, IMessageSinkConfiguration messageSinkConfiguration, int maxMessageSize) { if (stream == null) { ThrowHelper.ThrowArgumentNullException("stream"); } if (data == null) { ThrowHelper.ThrowArgumentNullException("data"); } if (maxMessageSize > 0 && data.Length > maxMessageSize) { throw new MessageSecurityException(string.Format("Provided data size ({0}) is larger than the maximum allowed message size ({1}).", data.Length.ToString(), maxMessageSize.ToString())); } using (MemoryStream ms = new MemoryStream()) { MessageHeader header = new MessageHeader(messageSinkId, data.Length, messageSinkConfiguration); using (MemoryStream outputStream = new MemoryStream()) { mFormatter.Write(outputStream, header); if (maxMessageSize > 0 && outputStream.Length > maxMessageSize) { throw new MessageSecurityException("Serialized message size is larger then the maximum allowed size."); } byte[] streamData = outputStream.ToArray(); byte[] lenBytes = Encoding.UTF8.GetBytes(streamData.Length.ToString()); ms.Write(lenBytes, 0, lenBytes.Length); // fejléc hossza ms.WriteByte((byte)0); // lezáró karakter ms.Write(streamData, 0, streamData.Length); // header info ms.Write(data, 0, data.Length); // data ms.WriteTo(stream); } } }