public void Default_Header_Transcoding() { ResonanceEncodingInformation encodeInfo = new ResonanceEncodingInformation(); encodeInfo.Completed = true; encodeInfo.ErrorMessage = "Test"; encodeInfo.HasError = true; encodeInfo.IsCompressed = true; encodeInfo.Token = Guid.NewGuid().ToString(); encodeInfo.Transcoding = "test"; encodeInfo.RPCSignature = RPCSignature.FromString("Method:Service.MyMethod"); encodeInfo.Type = ResonanceTranscodingInformationType.Response; ResonanceDefaultHeaderTranscoder transcoder = new ResonanceDefaultHeaderTranscoder(); using (MemoryStream mWrite = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(mWrite)) { transcoder.Encode(writer, encodeInfo); } ResonanceDecodingInformation decodeInfo = new ResonanceDecodingInformation(); using (MemoryStream mRead = new MemoryStream(mWrite.ToArray())) { using (BinaryReader reader = new BinaryReader(mRead)) { transcoder.Decode(reader, decodeInfo); } } Assert.AreEqual(encodeInfo.Completed, decodeInfo.Completed); Assert.AreEqual(encodeInfo.ErrorMessage, decodeInfo.ErrorMessage); Assert.AreEqual(encodeInfo.HasError, decodeInfo.HasError); Assert.AreEqual(encodeInfo.IsCompressed, decodeInfo.IsCompressed); Assert.AreEqual(encodeInfo.Token, decodeInfo.Token); Assert.AreEqual(encodeInfo.Transcoding, decodeInfo.Transcoding); Assert.AreEqual(encodeInfo.Type, decodeInfo.Type); Assert.AreEqual(encodeInfo.RPCSignature.ToString(), "Method:Service.MyMethod"); } }
/// <summary> /// Decodes the header using the specified binary reader and populates the specified decoding information. /// </summary> /// <param name="reader">The binary reader.</param> /// <param name="info">The decoding information.</param> public virtual void Decode(BinaryReader reader, ResonanceDecodingInformation info) { info.ProtocolVersion = reader.ReadByte(); info.Transcoding = reader.ReadShortASCII(); info.IsCompressed = reader.ReadBoolean(); info.Token = reader.ReadShortASCII(); info.Type = (ResonanceTranscodingInformationType)reader.ReadByte(); String rpcSignatureString = reader.ReadShortASCII(); if (!String.IsNullOrEmpty(rpcSignatureString)) { info.RPCSignature = RPCSignature.FromString(rpcSignatureString); } byte timeout = reader.ReadByte(); if (timeout > 0) { info.Timeout = timeout; } if (info.Type == ResonanceTranscodingInformationType.Response || info.Type == ResonanceTranscodingInformationType.MessageSyncACK) { info.Completed = reader.ReadBoolean(); info.HasError = reader.ReadBoolean(); info.ErrorMessage = reader.ReadUTF8(); } else if (info.Type == ResonanceTranscodingInformationType.Disconnect) { info.ErrorMessage = reader.ReadUTF8(); } info.ActualMessageStreamPosition = reader.ReadUInt32(); if (info.ProtocolVersion >= ProtocolVersion) { //Add new fields here... } }