/// <summary> /// Encodes the specified encoding information. /// </summary> /// <param name="info">The encoding information.</param> /// <returns></returns> public virtual byte[] Encode(ResonanceEncodingInformation info) { info.IsCompressed = CompressionConfiguration.Enabled; info.Transcoding = _transcodingName; using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(ms)) { _headerTranscoder.Encode(writer, info); if (info.Type != ResonanceTranscodingInformationType.KeepAliveRequest && info.Type != ResonanceTranscodingInformationType.KeepAliveResponse && info.Type != ResonanceTranscodingInformationType.Disconnect && info.Type != ResonanceTranscodingInformationType.MessageSyncACK && !info.HasError) { byte[] msgData = null; using (MemoryStream msgMs = new MemoryStream()) { using (BinaryWriter msgWriter = new BinaryWriter(msgMs)) { Encode(msgWriter, info.Message); msgData = msgMs.ToArray(); } } if (EncryptionConfiguration.Enabled) { msgData = EncryptMessageData(msgData); } if (CompressionConfiguration.Enabled) { msgData = CompressMessageData(msgData); } writer.Write(msgData); } return(ms.ToArray()); } } }