public void WriteField <TBufferWriter>(ref Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, SiloAddress value) where TBufferWriter : IBufferWriter <byte> { if (value is null) { ReferenceCodec.WriteNullReference(ref writer, fieldIdDelta, expectedType); return; } ReferenceCodec.MarkValueField(writer.Session); writer.WriteStartObject(fieldIdDelta, expectedType, _codecFieldType); IPEndPointCodec.WriteField(ref writer, 0U, _iPEndPointType, value.Endpoint); Int32Codec.WriteField(ref writer, 1U, _int32Type, value.Generation); writer.WriteEndObject(); }
public void Deserialize <TInput>(ref Reader <TInput> reader, Exception value) { uint fieldId = 0; string message = null; string stackTrace = null; Exception innerException = null; Dictionary <object, object> data = null; int hResult = 0; while (true) { var header = reader.ReadFieldHeader(); if (header.IsEndBaseOrEndObject) { break; } fieldId += header.FieldIdDelta; switch (fieldId) { case 0: message = StringCodec.ReadValue(ref reader, header); break; case 1: stackTrace = StringCodec.ReadValue(ref reader, header); break; case 2: innerException = ReadValue(ref reader, header); break; case 3: hResult = Int32Codec.ReadValue(ref reader, header); break; case 4: data = _dictionaryCodec.ReadValue(ref reader, header); break; default: reader.ConsumeUnknownField(header); break; } } SetBaseProperties(value, message, stackTrace, innerException, hResult, data); }
public SiloAddress ReadValue <TReaderInput>(ref Reader <TReaderInput> reader, Field field) { if (field.WireType == WireType.Reference) { return(ReferenceCodec.ReadReference <SiloAddress, TReaderInput>(ref reader, field)); } ReferenceCodec.MarkValueField(reader.Session); int id = 0; Field header = default; IPEndPoint endpoint = default; int generation = default; while (true) { id = OrleansGeneratedCodeHelper.ReadHeader(ref reader, ref header, id); if (id == 0) { endpoint = IPEndPointCodec.ReadValue(ref reader, header); id = OrleansGeneratedCodeHelper.ReadHeader(ref reader, ref header, id); } if (id == 1) { generation = Int32Codec.ReadValue(ref reader, header); id = OrleansGeneratedCodeHelper.ReadHeaderExpectingEndBaseOrEndObject(ref reader, ref header, id); } if (id == -1) { break; } reader.ConsumeUnknownField(header); } return(SiloAddress.New(endpoint, generation)); }
public void WriteField <TBufferWriter>(ref Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, UndeserializableType value) where TBufferWriter : IBufferWriter <byte> { Int32Codec.WriteField(ref writer, fieldIdDelta, typeof(UndeserializableType), value.Number); }
public void Serialize <TBufferWriter>(ref Writer <TBufferWriter> writer, ObjectWithNewField obj) where TBufferWriter : IBufferWriter <byte> { // not serializing newField to simulate a binary that's created from a previous version of the object StringCodec.WriteField(ref writer, 0, typeof(string), obj.Blah); Int32Codec.WriteField(ref writer, 2, typeof(int), obj.Version); }