internal static UniqueKey ReadUniqueKey(this IBinaryTokenStreamReader @this) { ulong n0 = @this.ReadULong(); ulong n1 = @this.ReadULong(); ulong typeCodeData = @this.ReadULong(); string keyExt = @this.ReadString(); return(UniqueKey.NewKey(n0, n1, typeCodeData, keyExt)); }
internal static bool TryReadSimpleType(this IBinaryTokenStreamReader @this, out object result, out SerializationTokenType token) { token = @this.ReadToken(); byte[] bytes; switch (token) { case SerializationTokenType.True: result = true; break; case SerializationTokenType.False: result = false; break; case SerializationTokenType.Null: result = null; break; case SerializationTokenType.Object: result = new object(); break; case SerializationTokenType.Int: result = @this.ReadInt(); break; case SerializationTokenType.Uint: result = @this.ReadUInt(); break; case SerializationTokenType.Short: result = @this.ReadShort(); break; case SerializationTokenType.Ushort: result = @this.ReadUShort(); break; case SerializationTokenType.Long: result = @this.ReadLong(); break; case SerializationTokenType.Ulong: result = @this.ReadULong(); break; case SerializationTokenType.Byte: result = @this.ReadByte(); break; case SerializationTokenType.Sbyte: result = @this.ReadSByte(); break; case SerializationTokenType.Float: result = @this.ReadFloat(); break; case SerializationTokenType.Double: result = @this.ReadDouble(); break; case SerializationTokenType.Decimal: result = @this.ReadDecimal(); break; case SerializationTokenType.String: result = @this.ReadString(); break; case SerializationTokenType.Character: result = @this.ReadChar(); break; case SerializationTokenType.Guid: bytes = @this.ReadBytes(16); result = new Guid(bytes); break; case SerializationTokenType.Date: result = DateTime.FromBinary(@this.ReadLong()); break; case SerializationTokenType.TimeSpan: result = new TimeSpan(@this.ReadLong()); break; case SerializationTokenType.GrainId: result = @this.ReadGrainId(); break; case SerializationTokenType.ActivationId: result = @this.ReadActivationId(); break; case SerializationTokenType.SiloAddress: result = @this.ReadSiloAddress(); break; case SerializationTokenType.ActivationAddress: result = @this.ReadActivationAddress(); break; case SerializationTokenType.IpAddress: result = @this.ReadIPAddress(); break; case SerializationTokenType.IpEndPoint: result = @this.ReadIPEndPoint(); break; case SerializationTokenType.CorrelationId: result = new CorrelationId(@this.ReadBytes(CorrelationId.SIZE_BYTES)); break; default: result = null; return(false); } return(true); }
/// <summary> Read a <c>Type</c> value from the stream. </summary> internal static Type ReadSpecifiedTypeHeader(this IBinaryTokenStreamReader @this, SerializationManager serializationManager) { // Assumes that the SpecifiedType token has already been read var token = @this.ReadToken(); switch (token) { case SerializationTokenType.Boolean: return(typeof(bool)); case SerializationTokenType.Int: return(typeof(int)); case SerializationTokenType.Short: return(typeof(short)); case SerializationTokenType.Long: return(typeof(long)); case SerializationTokenType.Sbyte: return(typeof(sbyte)); case SerializationTokenType.Uint: return(typeof(uint)); case SerializationTokenType.Ushort: return(typeof(ushort)); case SerializationTokenType.Ulong: return(typeof(ulong)); case SerializationTokenType.Byte: return(typeof(byte)); case SerializationTokenType.Float: return(typeof(float)); case SerializationTokenType.Double: return(typeof(double)); case SerializationTokenType.Decimal: return(typeof(decimal)); case SerializationTokenType.String: return(typeof(string)); case SerializationTokenType.Character: return(typeof(char)); case SerializationTokenType.Guid: return(typeof(Guid)); case SerializationTokenType.Date: return(typeof(DateTime)); case SerializationTokenType.TimeSpan: return(typeof(TimeSpan)); case SerializationTokenType.IpAddress: return(typeof(IPAddress)); case SerializationTokenType.IpEndPoint: return(typeof(IPEndPoint)); case SerializationTokenType.GrainId: return(typeof(GrainId)); case SerializationTokenType.ActivationId: return(typeof(ActivationId)); case SerializationTokenType.SiloAddress: return(typeof(SiloAddress)); case SerializationTokenType.ActivationAddress: return(typeof(ActivationAddress)); case SerializationTokenType.CorrelationId: return(typeof(CorrelationId)); case SerializationTokenType.Request: return(typeof(InvokeMethodRequest)); case SerializationTokenType.Response: return(typeof(Response)); case SerializationTokenType.StringObjDict: return(typeof(Dictionary <string, object>)); case SerializationTokenType.Object: return(typeof(Object)); case SerializationTokenType.Tuple + 1: return(typeof(Tuple <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.Tuple + 2: return(typeof(Tuple <,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 2))); case SerializationTokenType.Tuple + 3: return(typeof(Tuple <, ,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 3))); case SerializationTokenType.Tuple + 4: return(typeof(Tuple <, , ,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 4))); case SerializationTokenType.Tuple + 5: return(typeof(Tuple <, , , ,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 5))); case SerializationTokenType.Tuple + 6: return(typeof(Tuple <, , , , ,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 6))); case SerializationTokenType.Tuple + 7: return(typeof(Tuple <, , , , , ,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 7))); case SerializationTokenType.Array + 1: var et1 = @this.ReadFullTypeHeader(serializationManager); return(et1.MakeArrayType()); case SerializationTokenType.Array + 2: var et2 = @this.ReadFullTypeHeader(serializationManager); return(et2.MakeArrayType(2)); case SerializationTokenType.Array + 3: var et3 = @this.ReadFullTypeHeader(serializationManager); return(et3.MakeArrayType(3)); case SerializationTokenType.Array + 4: var et4 = @this.ReadFullTypeHeader(serializationManager); return(et4.MakeArrayType(4)); case SerializationTokenType.Array + 5: var et5 = @this.ReadFullTypeHeader(serializationManager); return(et5.MakeArrayType(5)); case SerializationTokenType.Array + 6: var et6 = @this.ReadFullTypeHeader(serializationManager); return(et6.MakeArrayType(6)); case SerializationTokenType.Array + 7: var et7 = @this.ReadFullTypeHeader(serializationManager); return(et7.MakeArrayType(7)); case SerializationTokenType.Array + 8: var et8 = @this.ReadFullTypeHeader(serializationManager); return(et8.MakeArrayType(8)); case SerializationTokenType.List: return(typeof(List <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.Dictionary: return(typeof(Dictionary <,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 2))); case SerializationTokenType.KeyValuePair: return(typeof(KeyValuePair <,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 2))); case SerializationTokenType.Set: return(typeof(HashSet <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.SortedList: return(typeof(SortedList <,>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 2))); case SerializationTokenType.SortedSet: return(typeof(SortedSet <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.Stack: return(typeof(Stack <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.Queue: return(typeof(Queue <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.LinkedList: return(typeof(LinkedList <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.Nullable: return(typeof(Nullable <>).MakeGenericType(@this.ReadGenericArguments(serializationManager, 1))); case SerializationTokenType.ByteArray: return(typeof(byte[])); case SerializationTokenType.ShortArray: return(typeof(short[])); case SerializationTokenType.IntArray: return(typeof(int[])); case SerializationTokenType.LongArray: return(typeof(long[])); case SerializationTokenType.UShortArray: return(typeof(ushort[])); case SerializationTokenType.UIntArray: return(typeof(uint[])); case SerializationTokenType.ULongArray: return(typeof(ulong[])); case SerializationTokenType.FloatArray: return(typeof(float[])); case SerializationTokenType.DoubleArray: return(typeof(double[])); case SerializationTokenType.CharArray: return(typeof(char[])); case SerializationTokenType.BoolArray: return(typeof(bool[])); case SerializationTokenType.SByteArray: return(typeof(sbyte[])); case SerializationTokenType.NamedType: var typeName = @this.ReadString(); try { return(serializationManager.ResolveTypeName(typeName)); } catch (TypeAccessException ex) { throw new TypeAccessException("Named type \"" + typeName + "\" is invalid: " + ex.Message); } default: break; } throw new SerializationException("Unexpected '" + token + "' found when expecting a type reference"); }