Example #1
0
        public static Schema.KRPC.Event ToProtobufMessage(this Service.Messages.Event evnt)
        {
            var result = new Schema.KRPC.Event();

            result.Stream = evnt.Stream.ToProtobufMessage();
            return(result);
        }
Example #2
0
        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");
            }
        }