Esempio n. 1
0
        public ICefValue Serialize(object source, Stack <object> seen, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(source?.GetType()))
            {
                throw new InvalidOperationException();
            }

            using (var value = CefDictionaryValue.Create())
                using (var dict = CefDictionaryValue.Create())
                {
                    value.SetString(ObjectSerializer.TypeIdPropertyName, ObjectSerializer.DictionaryTypeId);

                    foreach (DictionaryEntry dictionaryEntry in (IDictionary)source)
                    {
                        var cefValue = objectSerializer.Serialize(dictionaryEntry.Value, seen);
                        dict.SetValue(dictionaryEntry.Key.ToString(), cefValue);
                    }
                    value.SetDictionary(ObjectSerializer.ValuePropertyName, dict);

                    var result = CefValue.Create();
                    result.SetDictionary(value);

                    return(result);
                }
        }
Esempio n. 2
0
        public static void SetTime <TIndex>(this CefValue @this, DateTime value, TIndex index = default(TIndex))
        {
            SetTime(_ =>
            {
                var valueType = @this.GetValueType();
                switch (valueType)
                {
                case CefValueType.List:
                    using (var listValue = @this.GetList())
                    {
                        if (typeof(TIndex) == typeof(int))
                        {
                            listValue.SetBinary((int)Convert.ChangeType(index, typeof(int)), _);
                        }
                    }
                    break;

                case CefValueType.Dictionary:
                    using (var dictValue = @this.GetDictionary())
                    {
                        if (typeof(TIndex) == typeof(string))
                        {
                            dictValue.SetBinary((string)Convert.ChangeType(index, typeof(string)), _);
                        }
                    }
                    break;

                default:
                    @this.SetBinary(_);
                    break;
                }
            }, value);
        }
Esempio n. 3
0
        public object Deserialize(CefValue value, Type targetType, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(value, targetType))
            {
                throw new InvalidOperationException();
            }

            object result = null;

            if (value.IsType(CefTypes.Time) && targetType == typeof(DateTime))
            {
                result = value.GetTime();
            }
            else if (targetType == typeof(decimal))
            {
                var cefValueType = value.GetValueType();
                switch (cefValueType)
                {
                case CefValueType.Int:
                    result = Convert.ToDecimal(value.GetInt());
                    break;

                case CefValueType.Double:
                    result = Convert.ToDecimal(value.GetDouble());
                    break;
                }
            }

            return(result);
        }
Esempio n. 4
0
        public CefValue Serialize(object source, HashSet <object> seen, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(source?.GetType()))
            {
                throw new InvalidOperationException();
            }

            var actualSource = (PropertyDescriptor)source;
            var result       = CefValue.Create();

            using (var resultDict = CefDictionaryValue.Create())
                using (var value = CefDictionaryValue.Create())
                {
                    resultDict.SetString(ObjectSerializer.TypeIdPropertyName, PropertyDescriptor.TypeId);

                    value.SetInt64(nameof(actualSource.Id), actualSource.Id);
                    value.SetString(nameof(PropertyDescriptor.Name), actualSource.Name);
                    value.SetValue(nameof(PropertyDescriptor.Value),
                                   objectSerializer.Serialize(actualSource.Value, new HashSet <object>()));

                    resultDict.SetDictionary(ObjectSerializer.ValuePropertyName, value);
                    result.SetDictionary(resultDict);
                }

            return(result);
        }
Esempio n. 5
0
        public object Deserialize(CefValue value, Type targetType, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(value, targetType))
            {
                throw new InvalidOperationException();
            }

            return(value.Copy());
        }
Esempio n. 6
0
        public bool CanHandle(CefValue cefValue, Type targetType)
        {
            var cefValueType = cefValue.GetValueType();

            return((targetType?.IsPrimitive == true && SupportedTypes.Contains(cefValueType)) ||
                   (cefValueType == CefValueType.Int && targetType == typeof(object)) ||
                   (cefValueType == CefValueType.Double && targetType == typeof(object)) ||
                   (cefValueType == CefValueType.Bool && targetType == typeof(object)));
        }
Esempio n. 7
0
 public void Complete(CefValue value)
 {
     Volatile.Write(ref _result, CastToDotnetType(value));
     try
     {
         _event?.Set();
     }
     catch (ObjectDisposedException) { }
 }
        internal static CefV8Value CastCefValueToCefV8Value(CefV8Context context, CefValue value, out bool isNew)
        {
            isNew = true;

            if (value is null)
            {
                return(CefV8Value.CreateNull());
            }

            if (!value.IsValid)
            {
                throw new InvalidCastException();
            }

            CefValueType valueType = value.Type;

            switch (valueType)
            {
            case CefValueType.String:
                return(new CefV8Value(value.GetString()));

            case CefValueType.Int:
                return(new CefV8Value(value.GetInt()));

            case CefValueType.Bool:
                return(new CefV8Value(value.GetBool()));

            case CefValueType.Null:
                return(CefV8Value.CreateNull());

            case CefValueType.Double:
                return(new CefV8Value(value.GetDouble()));

            case CefValueType.Binary:
                CefBinaryValue v = value.GetBinary();
                if (v.Size == 1)
                {
                    return(CefV8Value.CreateUndefined());
                }

                XrayHandle handle = XrayHandle.FromCfxBinaryValue(v);
                if (handle == XrayHandle.Zero)
                {
                    return(context.GetGlobal());
                }

                isNew = (handle.dataType != XrayDataType.Object && handle.dataType != XrayDataType.Function);
                return(handle.ToCefV8Value(context.Frame));
            }

            throw new NotSupportedException();
        }
Esempio n. 9
0
        public object Deserialize(CefValue value, Type targetType, int?index = null, string key = null)
        {
            var underlyingType = Nullable.GetUnderlyingType(targetType);

            if (underlyingType != null)
            {
                targetType = underlyingType;
            }

            var deserializer = Deserializers.FirstOrDefault(s => s.CanHandle(value, targetType));

            return(deserializer?.Deserialize(value, targetType, this));
        }
Esempio n. 10
0
        public CefValue Serialize(object source, HashSet <object> seen, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(source.GetType()))
            {
                throw new InvalidOperationException();
            }

            var result = CefValue.Create();

            result.SetString((string)source);

            return(result);
        }
Esempio n. 11
0
        private static bool IsDictionary(CefValue value)
        {
            var result = value.GetValueType() == CefValueType.Dictionary;

            if (result)
            {
                using (var dict = value.GetDictionary())
                {
                    result = dict.HasKey(ObjectSerializer.TypeIdPropertyName) &&
                             dict.GetString(ObjectSerializer.TypeIdPropertyName) == ObjectSerializer.DictionaryTypeId;
                }
            }

            return(result);
        }
Esempio n. 12
0
        public object Deserialize(CefValue value, Type targetType, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(value, targetType))
            {
                throw new InvalidOperationException();
            }

            object result = null;

            using (var dictVal = value.GetDictionary())
            {
                var typeId = dictVal.GetString(ObjectSerializer.TypeIdPropertyName);
                using (var actualValue = dictVal.GetDictionary(ObjectSerializer.ValuePropertyName))
                {
                    KnownTypes.TryGetValue(typeId, out var type);
                    if (type != null && (targetType == typeof(object) || targetType.IsAssignableFrom(type)))
                    {
                        targetType = type;
                    }

                    try
                    {
                        result = Activator.CreateInstance(targetType);
                        var properties = targetType.GetProperties()
                                         .Select(p =>
                                                 new { Prop = p, DataMember = p.GetCustomAttribute <DataMemberAttribute>() })
                                         .ToDictionary(k => k.DataMember?.Name ?? k.Prop.Name, v => v.Prop);
                        var keys = actualValue.GetKeys();
                        foreach (var dictKey in keys)
                        {
                            if (properties.TryGetValue(dictKey, out var matchingProperty))
                            {
                                matchingProperty.SetValue(result,
                                                          objectSerializer.Deserialize(actualValue.GetValue(dictKey),
                                                                                       matchingProperty.PropertyType));
                            }
                        }
                    }
                    catch
                    {
                        //TODO:logging
                    }
                }
            }

            return(result);
        }
Esempio n. 13
0
        public static long Get(CefV8Context context, XrayObject target, CefListValue args, out CefV8Value value)
        {
            CefV8Value   thisArg   = GetSafeThisArg(context, target);
            CefValue     arg3      = args.GetValue(3);
            CefValueType valueType = arg3.Type;

            if (valueType == CefValueType.Int)
            {
                value = thisArg.GetValueByIndex(arg3.GetInt());
                return(0);
            }

            string name = arg3.GetString();

            value = thisArg.GetValue(name);
            return(0);
        }
Esempio n. 14
0
        public object Deserialize(CefValue value, Type targetType, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(value, targetType))
            {
                throw new InvalidOperationException();
            }

            using (var dict = value.GetDictionary())
                using (var val = dict.GetDictionary(ObjectSerializer.ValuePropertyName))
                {
                    var id        = val.GetInt64(nameof(PropertyDescriptor.Id));
                    var name      = val.GetString(nameof(PropertyDescriptor.Name));
                    var propValue = val.GetValue(nameof(PropertyDescriptor.Value)).Copy();

                    return(new CefPropertyDescriptor(id, name, propValue));
                }
        }
Esempio n. 15
0
        protected override bool Execute(string name, CefV8Value obj, CefV8Value[] arguments, out CefV8Value returnValue, out string exception)
        {
            exception   = null;
            returnValue = null;
            string paramSampler = arguments[0].GetStringValue();

            switch (name)
            {
            //获取异常信息
            case "GetHitchs":
                //异常信息
                string machineCode = string.Empty;
                if (paramSampler == "#1")
                {
                    machineCode = GlobalVars.MachineCode_QZDZYJ_1;
                }
                else if (paramSampler == "#2")
                {
                    machineCode = GlobalVars.MachineCode_QZDZYJ_2;
                }
                equInfHitchs = CommonDAO.GetInstance().GetEquInfHitchsByTime(machineCode, DateTime.Now);
                returnValue  = CefV8Value.CreateString(Newtonsoft.Json.JsonConvert.SerializeObject(equInfHitchs.Select(a => new { MachineCode = a.MachineCode, HitchTime = a.HitchTime.ToString("yyyy-MM-dd HH:mm"), HitchDescribe = a.HitchDescribe })));
                break;

            case "OpenAutoMaker":
                CefProcessMessage OpenAutoMaker = CefProcessMessage.Create("OpenAutoMaker");
                int f = 0;
                foreach (CefV8Value item in arguments)
                {
                    CefValue model = CefValue.Create();
                    model.SetString(item.GetStringValue());
                    OpenAutoMaker.Arguments.SetValue(f, model);
                    f++;
                }

                CefV8Context.GetCurrentContext().GetBrowser().SendProcessMessage(CefProcessId.Browser, OpenAutoMaker);
                break;

            default:
                returnValue = null;
                break;
            }

            return(true);
        }
Esempio n. 16
0
        public ICefValue Serialize(object obj, Stack <object> seen, ObjectSerializer objectSerializer)
        {
            var type = obj?.GetType();

            if (!CanHandle(type))
            {
                throw new InvalidOperationException();
            }

            if (type == typeof(string))
            {
                var result = CefValue.Create();
                result.SetString((string)obj);

                return(result);
            }

            using (var value = CefDictionaryValue.Create())
                using (var dict = CefDictionaryValue.Create())
                {
                    value.SetString(ObjectSerializer.TypeIdPropertyName, GetTypeId(type));
                    var properties   = type.GetProperties();
                    var shouldFilter = type.GetCustomAttribute <DataContractAttribute>() != null;

                    foreach (var propertyDesc in properties
                             .Where(p => p.GetIndexParameters().Length <= 0)
                             .Select(p => new { Property = p, DataMember = p.GetCustomAttribute <DataMemberAttribute>() })
                             .Where(p => p.DataMember != null || !shouldFilter))
                    {
                        var propertyValue = propertyDesc.Property.GetValue(obj);
                        var name          = propertyDesc.DataMember?.Name ?? propertyDesc.Property.Name;

                        var cefValue = objectSerializer.Serialize(propertyValue, seen);
                        dict.SetValue(name, cefValue);
                    }

                    value.SetDictionary(ObjectSerializer.ValuePropertyName, dict);

                    var result = CefValue.Create();
                    result.SetDictionary(value);

                    return(result);
                }
        }
Esempio n. 17
0
        public CefValue Serialize(object obj, HashSet <object> seen)
        {
            CefValue result;

            var type       = obj?.GetType();
            var serializer = Serializers.FirstOrDefault(s => s.CanHandle(type));

            if (serializer != null && HandleSeen(seen, obj, type))
            {
                result = serializer.Serialize(obj, seen, this);
            }
            else
            {
                result = CefValue.Create();
                result.SetNull();
            }

            return(result);
        }
Esempio n. 18
0
        public object Deserialize(CefValue source, Type targetType, ObjectSerializer objectSerializer)
        {
            if (!CanHandle(source, targetType))
            {
                throw new InvalidOperationException();
            }

            using (var lstVal = source.GetList())
            {
                var elementType = targetType.GetElementType();
                var array       = Activator.CreateInstance(targetType, lstVal.Count) as Array;

                for (var i = 0; i < lstVal.Count; i++)
                {
                    array.SetValue(objectSerializer.Deserialize(lstVal.GetValue(i), elementType), i);
                }

                return(array);
            }
        }
Esempio n. 19
0
        public CefValue Serialize(object source, HashSet <object> seen, ObjectSerializer objectSerializer)
        {
            if (source is CefValue value)
            {
                return(value);
            }
            else if (source is CefDictionaryValue)
            {
                var result = CefValue.Create();
                result.SetDictionary((CefDictionaryValue)source);
                return(result);
            }
            else if (source is CefListValue)
            {
                var result = CefValue.Create();
                result.SetList((CefListValue)source);
                return(result);
            }

            return(null);
        }
Esempio n. 20
0
        public CefValue Serialize(object obj, HashSet <object> seen, ObjectSerializer objectSerializer)
        {
            var type = obj.GetType();

            if (!CanHandle(type))
            {
                throw new InvalidOperationException();
            }

            var result = CefValue.Create();

            if (type == typeof(DateTime))
            {
                result.SetTime((DateTime)obj);
            }
            else if (type == typeof(decimal))
            {
                result.SetDouble(Convert.ToDouble((decimal)obj));
            }
            return(result);
        }
Esempio n. 21
0
        private static object CastToDotnetType(CefValue value)
        {
            if (value == null)
            {
                return(null);
            }

            if (!value.IsValid)
            {
                throw new InvalidCastException();
            }

            switch (value.Type)
            {
            case CefValueType.String:
                return(value.GetString());

            case CefValueType.Int:
                return(value.GetInt());

            case CefValueType.Bool:
                return(value.GetBool());

            case CefValueType.Null:
                return(null);

            case CefValueType.Double:
                return(value.GetDouble());

            case CefValueType.Binary:
                CefBinaryValue v = value.GetBinary();
                if (v.Size == 1)
                {
                    return(V8Undefined.Value);
                }
                return(XrayHandle.FromCfxBinaryValue(v).ToObject());
            }

            throw new NotImplementedException();
        }
Esempio n. 22
0
        public ICefValue Serialize(object obj, Stack <object> seen)
        {
            ICefValue result;

            var type       = obj?.GetType();
            var serializer = Serializers.FirstOrDefault(s => s.CanHandle(type));

            using (HandleSeen(seen, obj, type, out var canSerialize))
            {
                if (serializer != null && canSerialize)
                {
                    result = serializer.Serialize(obj, seen, this);
                }
                else
                {
                    result = CefValue.Create();
                    result.SetNull();
                }
            }

            return(result);
        }
Esempio n. 23
0
        public CefValue Serialize(object obj, HashSet <object> seen, ObjectSerializer objectSerializer)
        {
            var type = obj?.GetType();

            if (!CanHandle(type))
            {
                throw new InvalidOperationException();
            }

            var array = (Array)obj;

            using (var value = CefListValue.Create())
            {
                for (var i = 0; i < array.Length; i++)
                {
                    value.SetValue(i, objectSerializer.Serialize(array.GetValue(i), seen));
                }

                var result = CefValue.Create();
                result.SetList(value);
                return(result);
            }
        }
Esempio n. 24
0
 public bool CanHandle(CefValue cefValue, Type targetType)
 {
     return(targetType == typeof(CefValue));
 }
Esempio n. 25
0
 public bool CanHandle(CefValue cefValue, Type targetType)
 {
     return(cefValue.GetValueType() == CefValueType.List &&
            (targetType?.IsArray == true || targetType == typeof(object)));
 }
Esempio n. 26
0
        internal unsafe static CefValue CastCefV8ValueToCefValue(CefV8Context context, CefV8Value value, out bool isXray)
        {
            isXray = false;
            if (value == null)
            {
                return(null);
            }

            if (!value.IsValid)
            {
                throw new InvalidCastException();
            }

            CefValue v;

            switch (value.Type)
            {
            case CefV8ValueType.Undefined:
                v = new CefValue();
                v.SetBinary(new byte[1]);
                return(v);

            case CefV8ValueType.Null:
                v = new CefValue();
                v.SetNull();
                return(v);

            case CefV8ValueType.Bool:
                v = new CefValue();
                v.SetBool(value.GetBoolValue());
                return(v);

            case CefV8ValueType.Int:                     // TYPE_INT, TYPE_UINT
            case CefV8ValueType.UInt:
                v = new CefValue();
                v.SetInt(value.GetIntValue());
                return(v);

            case CefV8ValueType.Double:
                v = new CefValue();
                v.SetDouble(value.GetDoubleValue());
                return(v);

            case CefV8ValueType.Date:
                v = new CefValue();
                v.SetBinary(XrayHandle.FromDateTime(value.GetDateValue().ToDateTime()).ToCfxBinaryValue());
                return(v);

            case CefV8ValueType.String:
                v = new CefValue();
                if (!value.CopyV8StringToCefValue(v))
                {
                    throw new CefRuntimeException("Can't copy the string.");
                }
                return(v);

            case CefV8ValueType.Object:
                isXray = true;
                if (value.IsArray)                         //TYPE_OBJECT (array)
                {
                    throw new NotImplementedException();
                }
                if (value.IsArrayBuffer)                         //TYPE_OBJECT (arraybuffer)
                {
                    throw new NotImplementedException();
                }
                v = new CefValue();
                v.SetBinary(XrayObject.Wrap(context, value).CreateHandle().ToCfxBinaryValue());
                return(v);
            }
            throw new NotImplementedException();
        }
 protected override void OnAccessibilityLocationChange(CefValue value)
 {
 }
Esempio n. 28
0
 public bool CanHandle(CefValue cefValue, Type targetType)
 {
     return(cefValue.GetValueType() == CefValueType.String &&
            (targetType == typeof(string) || targetType == typeof(object)));
 }
Esempio n. 29
0
 public CefPropertyDescriptor(long id, string name, CefValue value)
 {
     Id        = id;
     ListValue = value;
     Name      = name;
 }
Esempio n. 30
0
 public bool CanHandle(CefValue cefValue, Type targetType)
 {
     return(cefValue.GetValueType() == CefValueType.Dictionary && targetType == typeof(PropertyDescriptor));
 }