private CfrV8Value CreateV8Value(object value) { if (value is bool) { return(CfrV8Value.CreateBool((bool)value)); } else if (value is DateTime) { return(CfrV8Value.CreateDate(CfrTime.FromUniversalTime((DateTime)value))); } else if (value is double) { return(CfrV8Value.CreateDouble((double)value)); } else if (value is int) { return(CfrV8Value.CreateInt((int)value)); } else if (value is uint) { return(CfrV8Value.CreateUint((uint)value)); } else if (value is string) { return(CfrV8Value.CreateString((string)value)); } else if (value == null) { return(CfrV8Value.CreateUndefined()); } else { throw new ArgumentException($"Type \"{ value.GetType().Name }\" is not supported."); } }
private static CfrV8Value ClrToV8Value(object clrValue) { var type = clrValue.GetType(); var typeCode = Type.GetTypeCode(type); CfrV8Value value = null; switch (typeCode) { case TypeCode.Boolean: value = CfrV8Value.CreateBool((bool)clrValue); break; case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: value = CfrV8Value.CreateInt((int)clrValue); break; case TypeCode.SByte: case TypeCode.Byte: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: value = CfrV8Value.CreateUint((uint)clrValue); break; case TypeCode.Single: case TypeCode.Double: value = CfrV8Value.CreateDouble((double)clrValue); break; case TypeCode.Decimal: value = CfrV8Value.CreateDouble((double)Convert.ChangeType(clrValue, TypeCode.Double)); break; case TypeCode.DateTime: value = CfrV8Value.CreateDate(CfrTime.FromUniversalTime((DateTime)clrValue)); break; case TypeCode.Char: case TypeCode.String: value = CfrV8Value.CreateString((string)clrValue); break; } return(value); }
static ChromiumFxFactory() { Register <string>(CfrV8Value.CreateString); Register <Int64>((source) => CfrV8Value.CreateDouble((double)source)); Register <UInt64>((source) => CfrV8Value.CreateDouble((double)source)); Register <float>((source) => CfrV8Value.CreateDouble((double)source)); Register <Int32>(CfrV8Value.CreateInt); Register <Int16>((source) => CfrV8Value.CreateInt((int)source)); Register <UInt32>(CfrV8Value.CreateUint); Register <UInt16>((source) => CfrV8Value.CreateUint((UInt32)source)); Register <char>((source) => CfrV8Value.CreateString(new StringBuilder().Append(source).ToString())); Register <double>(CfrV8Value.CreateDouble); Register <decimal>((source) => CfrV8Value.CreateDouble((double)source)); Register <bool>(CfrV8Value.CreateBool); Register <DateTime>((source) => CfrV8Value.CreateDate(CfrTime.FromUniversalTime(source.ToUniversalTime()))); }
private void TransactionDownload(object sender, CfrV8HandlerExecuteEventArgs e) { if (e.Arguments.Length != 2 || !e.Arguments[0].IsDate || !e.Arguments[1].IsDate) { e.Exception = "Need to have 2 argument in date"; return; } var time = new CfrTime(); var start = time.ToUniversalTime(e.Arguments[0].DateValue); var end = time.ToUniversalTime(e.Arguments[1].DateValue); var oThread = new Thread(() => { var filename = GetFilename("Excel File|*.xlsx"); var isSuccess = CreateTransactionReport(filename, start, end.AddDays(1)); if (isSuccess) { Process.Start(filename); } }); oThread.SetApartmentState(ApartmentState.STA); oThread.Start(); }
public bool GetSimpleValue(IJavascriptObject decoratedValue, out object res, Type targetType = null) { res = null; var value = decoratedValue.Convert(); if (value.IsObject) { return(false); } if ((value.IsUndefined) || (value.IsNull)) { return(true); } if (value.IsString) { res = value.StringValue; return(true); } if (value.IsBool) { res = value.BoolValue; return(true); } if (targetType.IsUnsigned()) { if (value.IsUint) { res = value.UintValue; } } else { if (value.IsInt) { res = value.IntValue; } } if ((res == null) && (value.IsDouble)) { res = value.DoubleValue; } if (res != null) { if (targetType != null) { res = Convert.ChangeType(res, targetType); } return(true); } if (value.IsDate) { var dateValue = value.DateValue; res = CfrTime.ToUniversalTime(dateValue); return(true); } return(false); }
public CfrV8Value ConvertValue(object data) { if (data == null) { return(CfrV8Value.CreateNull()); } var typObject = data.GetType(); var retValue = CfrV8Value.CreateUndefined(); switch (typObject.Name) { case "Boolean": retValue = Convert.ToBoolean(data); break; case "ExpandoObject": IDictionary <string, object> keyValues = data as IDictionary <string, object>; var resultx = CfrV8Value.CreateObject(new CfrV8Accessor(), new CfrV8Interceptor()); foreach (var keypair in keyValues) { resultx.SetValue(keypair.Key, ConvertValue(keypair.Value), CfxV8PropertyAttribute.ReadOnly); } retValue = resultx; break; case "DBNull": retValue = CfrV8Value.CreateNull(); break; case "DateTime": var newValt = Convert.ToDateTime(data); var univerTime = newValt.ToUniversalTime(); retValue = CfrV8Value.CreateDate(CfrTime.FromUniversalTime(univerTime)); break; case "Decimal": case "Double": case "Single": retValue = Convert.ToDouble(data); break; case "Byte": case "UInt16": case "UInt32": case "UInt64": retValue = Convert.ToUInt64(data); break; case "SByte": case "Int16": case "Int32": case "Int64": retValue = Convert.ToInt64(data); break; case "String": retValue = (string)data; break; default: if (typObject.IsEnum) { retValue = Enum.GetName(typObject, data); } else if (typObject.IsArray) { var pos = 0; if (typObject.Name == "Byte[]") { var arr_byte = (byte[])data; var result = CfrV8Value.CreateArray(arr_byte.Length); foreach (var item in arr_byte) { result.SetValue(pos++, ConvertValue(item)); } retValue = result; } else { var arr = (object[])data; var result = CfrV8Value.CreateArray(arr.Length); foreach (var item in arr) { result.SetValue(pos++, ConvertValue(item)); } retValue = result; } } else if (typObject.Name.StartsWith("Dictionary")) { var dictionary = (IDictionary <string, object>)data; var result = CfrV8Value.CreateObject(new CfrV8Accessor(), new CfrV8Interceptor()); foreach (var keypair in dictionary) { result.SetValue(keypair.Key, ConvertValue(keypair.Value), CfxV8PropertyAttribute.ReadOnly); } retValue = result; } else if (typObject.IsClass) { var propertyInfoes = typObject.GetProperties(); var result = CfrV8Value.CreateObject(new CfrV8Accessor(), new CfrV8Interceptor()); foreach (var item in propertyInfoes) { result.SetValue(item.Name, ConvertValue(item.GetValue(data)), CfxV8PropertyAttribute.ReadOnly); } retValue = result; } break; } return(retValue); }
public IJavascriptObject CreateDateTime(DateTime value) { return(CfrV8Value.CreateDate(CfrTime.FromUniversalTime(value.ToUniversalTime())).ConvertBasic()); }
public static CfrV8Value GetCfrObject(this JSObject _, object item) { var nameDict = new Dictionary <string, string>(); var accessor = new CfrV8Accessor(); var o = CfrV8Value.CreateObject(accessor); var t = item.GetType(); foreach (var p in t.GetProperties()) { var name = p.Name.Substring(0, 1).ToLower() + p.Name.Substring(1); nameDict[name] = p.Name; o.SetValue(name, CfxV8AccessControl.Default, CfxV8PropertyAttribute.DontDelete); } accessor.Get += (s, e) => { var name = nameDict[e.Name]; var p = t.GetProperty(name); var value = p.GetValue(item, null); var valueType = value?.GetType(); if (value == null) { e.Retval = CfrV8Value.CreateNull(); } else if (valueType == typeof(string) || valueType == typeof(Guid)) { e.Retval = CfrV8Value.CreateString((string)value); } else if (valueType == typeof(int) || valueType == typeof(short) || valueType == typeof(long)) { e.Retval = CfrV8Value.CreateInt((int)value); } else if (valueType == typeof(decimal)) { e.Retval = CfrV8Value.CreateDouble(Convert.ToDouble(value)); } else if (valueType == typeof(float) || valueType == typeof(double)) { e.Retval = CfrV8Value.CreateDouble(Convert.ToDouble(value)); } else if (valueType == typeof(bool)) { e.Retval = CfrV8Value.CreateBool(Convert.ToBoolean(value)); } else if (valueType == typeof(DateTime)) { e.Retval = CfrV8Value.CreateDate(CfrTime.FromUniversalTime((DateTime)value)); } else { e.Retval = CfrV8Value.CreateNull(); } e.SetReturnValue(true); }; return(o); }