public SiteSettingsProperty(string propertyName, Type propertyType, SerializationType serializeAs, object defaultValue, bool readOnly)
 {
     PropertyName = propertyName;
     PropertyType = propertyType;
     ReadOnly = readOnly;
     SerializeAs = serializeAs;
     DefaultValue = defaultValue;
 }
        public ObjectReference(string name, object value)
        {
            m_name = name;
            Value = value;

            Type valueType = m_value != null ? m_value.GetType() : null;
            if (valueType == null)
                m_serializationType = SerializationType.Null;
            else if (valueType == typeof(IntPtr))
                m_serializationType = SerializationType.IntPtr;
            else if (valueType.IsPrimitive)
            {
                if (m_value is int && UnusedMarker.IsUnused((int)m_value))
                    m_serializationType = SerializationType.UnusedMarker;
                else if (m_value is uint && UnusedMarker.IsUnused((uint)m_value))
                    m_serializationType = SerializationType.UnusedMarker;
                else if (m_value is float && UnusedMarker.IsUnused((float)m_value))
                    m_serializationType = SerializationType.UnusedMarker;
                else
                    m_serializationType = SerializationType.Any;
            }
            else if (valueType == typeof(string))
                m_serializationType = SerializationType.String;
            else if (valueType.IsArray)
                m_serializationType = SerializationType.Array;
            else if (valueType.IsEnum)
                m_serializationType = SerializationType.Enum;
            else if (valueType.Implements<IList>() || valueType.Implements<IDictionary>())
            {
                if (valueType.IsGenericType)
                    m_serializationType = SerializationType.GenericEnumerable;
                else
                    m_serializationType = SerializationType.Enumerable;
            }
            else
            {
                if (m_value is Type)
                    m_serializationType = SerializationType.Type;
                else if (valueType.Implements<Delegate>())
                    m_serializationType = SerializationType.Delegate;
                else if (valueType.Implements<MemberInfo>())
                    m_serializationType = SerializationType.MemberInfo;
                else
                {
                    if (m_value is Vec3 && UnusedMarker.IsUnused((Vec3)m_value))
                        m_serializationType = SerializationType.UnusedMarker;
                    else if(m_forbiddenTypes.Contains(valueType))
                        m_serializationType = SerializationType.Null;
                    else
                        m_serializationType = SerializationType.Object;
                }
            }
        }
 public ISerializationStrategy Build(SerializationType type)
 {
     switch (type)
     {
         case SerializationType.Base64:
             return new Base64SerializationStrategy();
         case SerializationType.DataContractJson:
             return new DataContractJsonSerializationStrategy();
         case SerializationType.Xml:
             return new XmlSerializationStrategy();
     }
     throw new NotSupportedException();
 }
Beispiel #4
0
 public static void sendRequestToAllFarmers <T>(string address, object request, Action <T> callback, SerializationType serializationType = SerializationType.PLAIN, int timeout = 500, XmlSerializer xmlSerializer = null)
 {
     sendRequestToFarmer(address, request, -1, callback, serializationType, timeout, xmlSerializer);
 }
Beispiel #5
0
 public Func<RestListenerContext, object> this[string path, SerializationType serializeAs, Func<RestListenerContext, bool> condition = null]
 {
     set
     {
         path += BasePath;
         Action<RestListenerContext> handlerAction = context =>
         {
             using (StreamWriter writer = new StreamWriter(context.Response.OutputStream))
             {
                 object instanceToSerialize = value(context);
                 // TODO: if object is null then 404
                 if (serializeAs == SerializationType.Json)
                 {
                     context.Response.ContentType.Set("application/json");
                     string serializedObject = SimpleJson.SimpleJson.SerializeObject(instanceToSerialize);
                     // TODO: If serialization failed 404
                     context.Response.ContentLength64.Set(serializedObject.Length);
                     context.Response.StatusCode.Set(200);  // Everything is ok
                     writer.Write(serializedObject);
                 }
             }
             context.Response.Close();
         };
         this[path, condition] = handlerAction;
     }
 }
Beispiel #6
0
		/// <summary>
		/// Initializes a new instance of the <see cref="PeerNet.DataConnectionOptions"/> class.
		/// </summary>
		/// <param name="label">Label optional, if not given a random token is generated for this dataconnection.</param>
		/// <param name="metadata">Some metatdat to be given to the client on the other end</param>
		/// <param name="serialization">The serialization used for this dataconnection </param>
		/// <param name="reliable">If set to <c>true</c> reliable.</param>
		public DataConnectionOptions (string label, string metadata, SerializationType serialization, bool reliable)
		{
			this.Label = label ?? "dc_" + Util.token;
			this.MetaData = metadata ?? "";
			this.Reliable = reliable;
			this.Serialization = serialization;
		}
 public static void sendRequestToAllFarmers <T>(string address, object request, Action <T> callback, SerializationType serializationType = SerializationType.PLAIN, int timeout = 10000, XmlSerializer xmlSerializer = null)
 {
     foreach (Farmer farmer in Game1.otherFarmers.Values.Where(f => f.isActive() && f != Game1.player))
     {
         Task.Run(() => sendRequestToFarmer(address, request, farmer, callback, serializationType, timeout, xmlSerializer));
     }
 }
        public static async Task <T> sendRequestToFarmer <T>(string address, object request, Farmer farmer, Action <T> callback = null, SerializationType serializationType = SerializationType.PLAIN, int timeout = 500, XmlSerializer xmlSerializer = null)
        {
            long fromFarmer = farmer.UniqueMultiplayerID;

            if (xmlSerializer == null)
            {
                xmlSerializer = new XmlSerializer(typeof(T));
            }

            object objectData = request;

            if (serializationType == SerializationType.XML)
            {
                StringWriter writer = new StringWriter();
                xmlSerializer.Serialize(writer, request);
                objectData = writer.ToString();
            }
            else if (serializationType == SerializationType.JSON)
            {
                objectData = JsonConvert.SerializeObject(request);
            }

            Int16           id            = (Int16)random.Next(Int16.MinValue, Int16.MaxValue);
            string          returnAddress = address + "." + id;
            PyMessenger <T> messenger     = new PyMessenger <T>(returnAddress);

            sendMessage(new MPMessage(address, Game1.player, objectData, id, fromFarmer));

            object result = await Task.Run(() =>
            {
                while (true)
                {
                    List <T> msgs = new List <T>(messenger.receive());
                    if (msgs.Count() > 0)
                    {
                        messages.Remove(returnAddress);
                        return(msgs[0]);
                    }

                    timeout--;

                    if (timeout < 0)
                    {
                        return(default(T));
                    }
                    Thread.Sleep(1);
                }
            });

            callback?.Invoke((T)result);
            return((T)result);
        }
 public ObjectReference(string name, SerializationType type)
 {
     m_name = name;
     m_serializationType = type;
 }
			SerializationType MarkType(Type type)
			{
				SerializationType sType;
				if (!typeMap.TryGetValue(type, out sType)) {
					string assemblyName = null;
					string typeName = null;
					if (type.HasElementType) {
						Debug.Assert(type.IsArray);
						MarkType(type.GetElementType());
					} else if (type.IsGenericType && !type.IsGenericTypeDefinition) {
						MarkType(type.GetGenericTypeDefinition());
						foreach (Type typeArg in type.GetGenericArguments())
							MarkType(typeArg);
					} else if (type.IsGenericParameter) {
						throw new NotSupportedException();
					} else {
						var serializationBinder = fastSerializer.SerializationBinder;
						if (serializationBinder != null) {
							serializationBinder.BindToName(type, out assemblyName, out typeName);
						} else {
							assemblyName = type.Assembly.FullName;
							typeName = type.FullName;
							Debug.Assert(typeName != null);
						}
					}
					
					sType = new SerializationType(typeMap.Count, type);
					sType.TypeName = typeName;
					if (assemblyName != null) {
						if (!assemblyNameToID.TryGetValue(assemblyName, out sType.AssemblyNameID)) {
							sType.AssemblyNameID = assemblyNames.Count;
							assemblyNameToID.Add(assemblyName, sType.AssemblyNameID);
							assemblyNames.Add(assemblyName);
							Log("Registered assembly #{0}: {1}", sType.AssemblyNameID, assemblyName);
						}
					}
					typeMap.Add(type, sType);
					types.Add(sType);
					Log("Registered type %{0}: {1}", sType.ID, type);
					if (type == typeof(string)) {
						stringType = sType;
					}
				}
				return sType;
			}
 public ObjectReference(string name, SerializationType type)
 {
     this.Name = name;
     this.SerializationType = type;
 }
Beispiel #12
0
 bool IsReferenceType(SerializationType type)
 {
     return type == SerializationType.Enumerable ||
         type == SerializationType.GenericEnumerable ||
         type == SerializationType.Object ||
         type == SerializationType.MemberInfo ||
         type == SerializationType.MemberInfo ||
         type == SerializationType.Delegate ||
         type == SerializationType.Type;
 }
Beispiel #13
0
        public static Task <T> sendRequestToFarmer <T>(string address, object request, long uniqueMultiplayerId, Action <T> callback = null, SerializationType serializationType = SerializationType.PLAIN, int timeout = 500, XmlSerializer xmlSerializer = null)
        {
            return(Task.Run(() =>
            {
                long toFarmer = uniqueMultiplayerId;

                if (xmlSerializer == null)
                {
                    xmlSerializer = new XmlSerializer(typeof(T));
                }

                object objectData = request;

                if (serializationType == SerializationType.XML)
                {
                    StringWriter writer = new StringWriter();
                    xmlSerializer.Serialize(writer, request);
                    objectData = writer.ToString();
                }
                else if (serializationType == SerializationType.JSON)
                {
                    objectData = JsonConvert.SerializeObject(request);
                }
                int id = Guid.NewGuid().GetHashCode();
                string returnAddress = address + "." + id;
                PyMessenger <T> messenger = new PyMessenger <T>(returnAddress, null);

                int run = 0;
                bool received = false;
                T result = default(T);

                EventHandler <StardewModdingAPI.Events.ModMessageReceivedEventArgs> handler = (s, e) => checkForMessage(messenger, ref result, ref received, ref run);
                Helper.Events.Multiplayer.ModMessageReceived += handler;

                sendMessage(new MPMessage(address, Game1.player, objectData, id, toFarmer));
                if (timeout > 0)
                {
                    while (!received && run < 100 && timeout > 0)
                    {
                        timeout--;
                        Thread.Sleep(10);
                    }
                }

                Helper.Events.Multiplayer.ModMessageReceived -= handler;

                callback?.Invoke((T)result);

                return ((T)result);
            }));
        }
Beispiel #14
0
 public static Task <T> sendRequestToFarmer <T>(string address, object request, Farmer farmer, Action <T> callback = null, SerializationType serializationType = SerializationType.PLAIN, int timeout = 500, XmlSerializer xmlSerializer = null)
 {
     return(sendRequestToFarmer(address, request, farmer.UniqueMultiplayerID, callback, serializationType, timeout, xmlSerializer));
 }
Beispiel #15
0
 public static void sendDataToFarmer(string address, object data, long uniqueMultiplayerId, SerializationType serializationType = SerializationType.PLAIN, XmlSerializer xmlSerializer = null)
 {
     sendRequestToFarmer <bool>(address, data, uniqueMultiplayerId, null, serializationType, -1, xmlSerializer);
 }
Beispiel #16
0
        protected IMessage DeserializeMessage(ReadOnlyMemory <byte> body, Type objectType, SerializationType serializationType)
        {
            IMessage message = null;

            if (Serializers.TryGetValue(serializationType, out ISerializer serializer))
            {
                message = (IMessage)serializer.ByteArrayToObject(body.ToArray(), objectType);
            }
            else
            {
                Logger.LogError($"Cannot find serializer {serializationType} for Type {objectType.FullName} ...");
            }

            return(message);
        }
        object ReadValue(SerializationType etype, TypeSig argType, out TypeSig realArgType)
        {
            if (!recursionCounter.Increment())
            {
                throw new CABlobParserException("Too much recursion");
            }

            object result;

            switch (etype)
            {
            case SerializationType.Boolean:
                realArgType = module.CorLibTypes.Boolean;
                result      = reader.ReadByte() != 0;
                break;

            case SerializationType.Char:
                realArgType = module.CorLibTypes.Char;
                result      = (char)reader.ReadUInt16();
                break;

            case SerializationType.I1:
                realArgType = module.CorLibTypes.SByte;
                result      = reader.ReadSByte();
                break;

            case SerializationType.U1:
                realArgType = module.CorLibTypes.Byte;
                result      = reader.ReadByte();
                break;

            case SerializationType.I2:
                realArgType = module.CorLibTypes.Int16;
                result      = reader.ReadInt16();
                break;

            case SerializationType.U2:
                realArgType = module.CorLibTypes.UInt16;
                result      = reader.ReadUInt16();
                break;

            case SerializationType.I4:
                realArgType = module.CorLibTypes.Int32;
                result      = reader.ReadInt32();
                break;

            case SerializationType.U4:
                realArgType = module.CorLibTypes.UInt32;
                result      = reader.ReadUInt32();
                break;

            case SerializationType.I8:
                realArgType = module.CorLibTypes.Int64;
                result      = reader.ReadInt64();
                break;

            case SerializationType.U8:
                realArgType = module.CorLibTypes.UInt64;
                result      = reader.ReadUInt64();
                break;

            case SerializationType.R4:
                realArgType = module.CorLibTypes.Single;
                result      = reader.ReadSingle();
                break;

            case SerializationType.R8:
                realArgType = module.CorLibTypes.Double;
                result      = reader.ReadDouble();
                break;

            case SerializationType.String:
                realArgType = module.CorLibTypes.String;
                result      = ReadUTF8String();
                break;

            // It's ET.ValueType if it's eg. a ctor enum arg type
            case (SerializationType)ElementType.ValueType:
                if (argType == null)
                {
                    throw new CABlobParserException("Invalid element type");
                }
                realArgType = argType;
                result      = ReadEnumValue(GetEnumUnderlyingType(argType));
                break;

            // It's ET.Object if it's a ctor object arg type
            case (SerializationType)ElementType.Object:
            case SerializationType.TaggedObject:
                realArgType = ReadFieldOrPropType();
                var arraySig = realArgType as SZArraySig;
                if (arraySig != null)
                {
                    result = ReadArrayArgument(arraySig);
                }
                else
                {
                    TypeSig tmpType;
                    result = ReadValue((SerializationType)realArgType.ElementType, realArgType, out tmpType);
                }
                break;

            // It's ET.Class if it's eg. a ctor System.Type arg type
            case (SerializationType)ElementType.Class:
                var tdr = argType as TypeDefOrRefSig;
                if (tdr != null && tdr.DefinitionAssembly.IsCorLib() && tdr.Namespace == "System")
                {
                    if (tdr.TypeName == "Type")
                    {
                        result = ReadValue(SerializationType.Type, tdr, out realArgType);
                        break;
                    }
                    if (tdr.TypeName == "String")
                    {
                        result = ReadValue(SerializationType.String, tdr, out realArgType);
                        break;
                    }
                    if (tdr.TypeName == "Object")
                    {
                        result = ReadValue(SerializationType.TaggedObject, tdr, out realArgType);
                        break;
                    }
                }

                // Assume it's an enum that couldn't be resolved
                realArgType = argType;
                return(ReadEnumValue(null));

            case SerializationType.Type:
                realArgType = argType;
                result      = ReadType();
                break;

            case SerializationType.Enum:
                realArgType = ReadType();
                result      = ReadEnumValue(GetEnumUnderlyingType(realArgType));
                break;

            default:
                throw new CABlobParserException("Invalid element type");
            }

            recursionCounter.Decrement();
            return(result);
        }
Beispiel #18
0
        public void should_enumerate_member_specified_type_when_in_serialize_mode_and_configured_or_when_in_deserialize_mode(
            string name, Mode mode, SerializationType type, int count)
        {
            var nodes = CreateAccessModifierNode(Options.Create(x => x.Serialization(y => 
                { if (type == SerializationType.ActualType) y.UseActualType(); })),
                new SimpleValue(ModelInstance, typeof(Model).ToCachedType()), mode).ToList();

            nodes.GetNode(name).ShouldTotal(count);
        }
 protected virtual NestedModelSerializationRule SerializationRuleForField(string field, SerializationType type)
 {
     return(NestedModelSerializationRule.IdParameter);
 }
Beispiel #20
0
        public static SerializerData PopulateSerializerDataIDataReader(IDataReader dr, SerializationType type)
        {
            SerializerData data = new SerializerData();

            switch(type)
            {
                case SerializationType.Post:
                    //data.Bytes = dr["PostStringNameValues"] as byte[];
                    data.Keys = dr["PostPropertyNames"] as string;
                    data.Values = dr["PostPropertyValues"] as string;
                    break;
                case SerializationType.Section:
                    //data.Bytes = dr["SectionStringNameValues"] as byte[];
                    data.Keys = dr["SectionPropertyNames"] as string;
                    data.Values = dr["SectionPropertyValues"] as string;
                    break;
                case SerializationType.User:
                    //data.Bytes = dr["UserStringNameValues"] as byte[];
                    data.Keys = dr["UserPropertyNames"] as string;
                    data.Values = dr["UserPropertyValues"] as string;
                    break;
                default:
                    //data.Bytes = dr["StringNameValues"] as byte[];
                    data.Keys = dr["PropertyNames"] as string;
                    data.Values = dr["PropertyValues"] as string;
                    break;
            }

            return data;
        }
        internal KeyValuePair <string, object> ConvertKey(KeyValuePair <string, object> obj, SerializationType type)
        {
            var key   = obj.Key;
            var value = obj.Value;

            if (value is Array)
            {
                value = ((object[])value).Select((x) => ConvertKey(new KeyValuePair <string, object>("", x), type).Value);
            }
            else if (value is Model)
            {
                if (type != SerializationType.Plain && SerializationRuleForField(key, type) == NestedModelSerializationRule.IdParameter)
                {
                    key  += "_id";
                    value = ((Model)value).Id;
                }
                else
                {
                    value = ((Model)value).ToDictionary(type);
                }
            }
            else if (value is AbstractModel)
            {
                value = ((AbstractModel)value).ToDictionary(type);
            }
            #if NET40
            else if (value != null && value.GetType().IsEnum)
            #else
            else if (value != null && value.GetType().GetTypeInfo().IsEnum)
            #endif
            {
                value = EnumMagic.ConvertToString((Enum)value);
            }

            return(new KeyValuePair <string, object>(key, value));
        }
 internal string ToJson(SerializationType type = SerializationType.Shallow)
 {
     return(JsonConvert.SerializeObject(ToDictionary(type)));
 }
Beispiel #23
0
        private static OpCode GetSerializationTypeValue(SerializationType serializeAs)
        {
            switch (serializeAs)
            {
                case SerializationType.String:
                    return OpCodes.Ldc_I4_0;

                case SerializationType.Xml:
                    return OpCodes.Ldc_I4_1;

                case SerializationType.Binary:
                    return OpCodes.Ldc_I4_2;
            }

            throw new Exception();
        }
Beispiel #24
0
        object ReadValue(SerializationType etype, TypeSig argType, out TypeSig realArgType)
        {
            if (!recursionCounter.Increment())
                throw new CABlobParserException("Too much recursion");

            object result;
            switch (etype) {
            case SerializationType.Boolean:
                realArgType = module.CorLibTypes.Boolean;
                result = reader.ReadByte() != 0;
                break;

            case SerializationType.Char:
                realArgType = module.CorLibTypes.Char;
                result = (char)reader.ReadUInt16();
                break;

            case SerializationType.I1:
                realArgType = module.CorLibTypes.SByte;
                result = reader.ReadSByte();
                break;

            case SerializationType.U1:
                realArgType = module.CorLibTypes.Byte;
                result = reader.ReadByte();
                break;

            case SerializationType.I2:
                realArgType = module.CorLibTypes.Int16;
                result = reader.ReadInt16();
                break;

            case SerializationType.U2:
                realArgType = module.CorLibTypes.UInt16;
                result = reader.ReadUInt16();
                break;

            case SerializationType.I4:
                realArgType = module.CorLibTypes.Int32;
                result = reader.ReadInt32();
                break;

            case SerializationType.U4:
                realArgType = module.CorLibTypes.UInt32;
                result = reader.ReadUInt32();
                break;

            case SerializationType.I8:
                realArgType = module.CorLibTypes.Int64;
                result = reader.ReadInt64();
                break;

            case SerializationType.U8:
                realArgType = module.CorLibTypes.UInt64;
                result = reader.ReadUInt64();
                break;

            case SerializationType.R4:
                realArgType = module.CorLibTypes.Single;
                result = reader.ReadSingle();
                break;

            case SerializationType.R8:
                realArgType = module.CorLibTypes.Double;
                result = reader.ReadDouble();
                break;

            case SerializationType.String:
                realArgType = module.CorLibTypes.String;
                result = ReadUTF8String();
                break;

            // It's ET.ValueType if it's eg. a ctor enum arg type
            case (SerializationType)ElementType.ValueType:
                if (argType == null)
                    throw new CABlobParserException("Invalid element type");
                realArgType = argType;
                result = ReadEnumValue(GetEnumUnderlyingType(argType));
                break;

            // It's ET.Object if it's a ctor object arg type
            case (SerializationType)ElementType.Object:
            case SerializationType.TaggedObject:
                realArgType = ReadFieldOrPropType();
                var arraySig = realArgType as SZArraySig;
                if (arraySig != null)
                    result = ReadArrayArgument(arraySig);
                else {
                    TypeSig tmpType;
                    result = ReadValue((SerializationType)realArgType.ElementType, realArgType, out tmpType);
                }
                break;

            // It's ET.Class if it's eg. a ctor System.Type arg type
            case (SerializationType)ElementType.Class:
                var tdr = argType as TypeDefOrRefSig;
                if (tdr != null && tdr.DefinitionAssembly.IsCorLib() && tdr.Namespace == "System") {
                    if (tdr.TypeName == "Type") {
                        result = ReadValue(SerializationType.Type, tdr, out realArgType);
                        break;
                    }
                    if (tdr.TypeName == "String") {
                        result = ReadValue(SerializationType.String, tdr, out realArgType);
                        break;
                    }
                    if (tdr.TypeName == "Object") {
                        result = ReadValue(SerializationType.TaggedObject, tdr, out realArgType);
                        break;
                    }
                }

                // Assume it's an enum that couldn't be resolved
                realArgType = argType;
                return ReadEnumValue(null);

            case SerializationType.Type:
                realArgType = argType;
                result = ReadType();
                break;

            case SerializationType.Enum:
                realArgType = ReadType();
                result = ReadEnumValue(GetEnumUnderlyingType(realArgType));
                break;

            default:
                throw new CABlobParserException("Invalid element type");
            }

            recursionCounter.Decrement();
            return result;
        }
Beispiel #25
0
 public TypeInformation(Type type, string name, string namespaceName, string itemName, string keyName, string valueName, SerializationType isAttributeSuchAsDataContractPresent)
 {
     this.Type              = type;
     this.Name              = name;
     this.NamespaceName     = namespaceName;
     this.ItemName          = itemName;
     this.KeyName           = keyName;
     this.ValueName         = valueName;
     this.serializationType = isAttributeSuchAsDataContractPresent;
 }