public static Schema.KRPC.Event ToProtobufMessage(this Service.Messages.Event evnt) { var result = new Schema.KRPC.Event(); result.Stream = evnt.Stream.ToProtobufMessage(); return(result); }
public static object Decode(ByteString value, Type type, IConnection client) { if (ReferenceEquals(type, null)) { throw new ArgumentNullException(nameof(type)); } var stream = value.CreateCodedInput(); if (type.IsEnum) { return(stream.ReadSInt32()); } switch (Type.GetTypeCode(type)) { case TypeCode.Double: return(stream.ReadDouble()); case TypeCode.Single: return(stream.ReadFloat()); case TypeCode.Int32: return(stream.ReadSInt32()); case TypeCode.Int64: return(stream.ReadSInt64()); case TypeCode.UInt32: return(stream.ReadUInt32()); case TypeCode.UInt64: return(stream.ReadUInt64()); case TypeCode.Boolean: return(stream.ReadBool()); case TypeCode.String: return(stream.ReadString()); default: if (type.Equals(typeof(byte[]))) { return(stream.ReadBytes().ToByteArray()); } if (IsAClassType(type)) { if (client == null) { throw new ArgumentException("Client not passed when decoding remote object"); } var id = stream.ReadUInt64(); return(id == 0 ? null : (RemoteObject)Activator.CreateInstance(type, client, id)); } if (IsATupleType(type)) { return(DecodeTuple(stream, type, client)); } if (IsAListType(type)) { return(DecodeList(stream, type, client)); } if (IsASetType(type)) { return(DecodeSet(stream, type, client)); } if (IsADictionaryType(type)) { return(DecodeDictionary(stream, type, client)); } if (IsAMessageType(type)) { var message = (IMessage)Activator.CreateInstance(type); message.MergeFrom(stream); return(message); } if (type == typeof(Event)) { var message = new Schema.KRPC.Event(); message.MergeFrom(stream); return(new Event((Connection)client, message)); } throw new ArgumentException(type + " is not a serializable type"); } }