Ejemplo n.º 1
0
        /// <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());
                }
            }
        }