// string typeStr = typeof(Console).AssemblyQualifiedName; var _Console = wrap.GetType(typeStr);// // "Hello from Client" _Console.WriteLine("Hello from Client"); // TestDllForCoreClr.MyArr // TestDll.dll var MyArr = wrap.GetType("TestDllForCoreClr.MyArr", "TestDll"); // // var Point1 = MyArr._new(1, 12, -4); // new MyArr(1, 12, -4); var Point2 = MyArr._new(0, -3, 18); // new MyArr(0, -3, 18); // PointX Console.WriteLine(" : "+Point1.x+" "+Point1.y+" "+Point1.z); Console.WriteLine(" : "+Point2.x+" "+Point2.y + " "+ Point2.z); var Point3 = Point1 + Point2; Console.WriteLine("\nPoint1 + Point2 = " + Point3.x + " " + Point3.y + " " + Point3.z); Point3 = Point1 - Point2; Console.WriteLine("Point1 - Point2 = "+ Point3.x + " " + Point3.y + " " + Point3.z); Point3 = -Point1; Console.WriteLine("-Point1 = " + Point3.x + " " + Point3.y + " " + Point3.z); Point2++; Console.WriteLine("Point2++ = "+ Point2.x + " " + Point2.y + " " + Point2.z); Point2--; Console.WriteLine("Point2-- = " + Point2.x + " " + Point2.y + " " + Point2.z);
// // //public static Assembly GetAssembly(string FileName, bool IsGlabalAssembly = false) // IsGlabalAssembly == true? typeof(string).GetTypeInfo().Assembly.Location // Server var assembly = wrap.GetAssembly("TestDll"); // var @TestClass = assembly.GetType("TestDllForCoreClr.TestClass"); // , . , // //public static Type GetType(string type, string FileName = "", bool IsGlabalAssembly = false) //var @TestClass = wrap.GetType("TestDllForCoreClr.TestClass", "TestDll");
var TO = @TestClass._new("Property from Constructor");
wrap.New(@TestClass,"Property from Constructor");
var Dictionary2 = wrap.GetType("System.Collections.Generic.Dictionary`2", "System.Collections"); var DictionaryIntString = wrap.GetGenericType(Dictionary2, "System.Int32", "System.String"); var dict = wrap.New(DictionaryIS);
var ClientDict = new Dictionary<int, string>() { [1] = "", [2] = "", [3] = "" }; // Json . // . var dict = connector.CoryTo(ClientDict);
// //public V GenericMethod<K, V>(Dictionary<K, V> param1, K param2, V param3) resGM = TO.GenericMethod(dict, 99, "Hello"); Console.WriteLine(" " + resGM);
Console.WriteLine("dict[2] " + dict[2]); dict[2] = ""; Console.WriteLine("dict[2] " + dict[2]);
foreach (string value in dict.Values) Console.WriteLine("Dict Values " + value);
// // public V GenericMethodWithRefParam<,V >( param, V param2, ref string param3) // ref . , . // RefParam, Value var OutParam = new ClientRPC.RefParam("TroLoLo"); resGM = TO.GenericMethodWithRefParam(5, "GenericMethodWithRefParam", OutParam); Console.WriteLine($@" Ref {resGM} {OutParam.Value}"); // var GenericArgs = new object[] { "System.String", "System.String" }; // : // var @Int32 = wrap.GetType("System.Int32"); //var GenericArgs = new object[] {@Int32, "System.String" }; // // // // resGM = TO.GenericMethodWithRefParam<String,String>(null, "GenericMethodWithRefParam", ref OutParam) resGM = TO.GenericMethodWithRefParam(GenericArgs, null, "GenericMethodWithRefParam", OutParam); Console.WriteLine($@" Ref {resGM} {OutParam.Value}"); // Test return null resGM = TO.GenericMethodWithRefParam(GenericArgs, null, null, OutParam); Console.WriteLine($@" Ref {resGM} {OutParam}");
public class RefParam { public dynamic Value; public RefParam(object Value) { this.Value = Value; } public RefParam() { this.Value = null; } public override string ToString() { return Value?.ToString(); } }
// public async Task<V> GenericMethodAsync<K, V>(K param, string param4 = "Test") var GenericArgs = new object[] { "System.Int32", "System.String" }; object resTask = await TO.async.GenericMethodAsync(GenericArgs , 44);
int res =await wrap.async.ReturnParam(task);
if (myObject1 == myObject2) Console.WriteLine(" ==");
if (myObject1.Equals(myObject2)) Console.WriteLine(" Equals");
if (MyArr.op_Equality(myObject1,myObject2)) Console.WriteLine(" op_Equality");
public object GetExpandoObject() { dynamic res = new ExpandoObject(); res.Name = "Test ExpandoObject"; res.Number = 456; res.toString = (Func<string>)(() => res.Name); res.Sum = (Func<int, int, int>)((x, y) => x + y); return res; }
var EO = TO.GetExpandoObject(); Console.WriteLine(" ExpandoObject " + EO.Name); Console.WriteLine(" ExpandoObject " + EO.Number); // var Delegate = EO.toString; Console.WriteLine(" toString " + Delegate()); // // ExpandoObject Console.WriteLine(" toString " + EO.toString()); var DelegateSum = EO.Sum; Console.WriteLine(" Sum " + DelegateSum(3,4)); // // ExpandoObject Console.WriteLine(" Sum " + EO.Sum(3,4)); // ExpandoObject }
string[] sa = new string[] { "", "", "", "", "" }; // var ServerSa = Connector.CoryTo(sa); // IEnumerable var en = ServerSa._as("IEnumerable"); var Enumerator = en.GetEnumerator(); while(Enumerator.MoveNext()) Console.WriteLine(Enumerator.Current); // var @IEnumerable = wrap.GetType("System.Collections.IEnumerable"); var @IEnumerator = wrap.GetType("System.Collections.IEnumerator"); // , en = ServerSa._as(@IEnumerable); Enumerator = en.GetEnumerator(); // IEnumerator Enumerator = Enumerator._as(@IEnumerator); while (Enumerator.MoveNext()) Console.WriteLine(Enumerator.Current);
var dict = connector.CoryTo(ClientDict);
public dynamic CoryTo(object obj) { // // string type = obj.GetType().AssemblyQualifiedName; var str = JsonConvert.SerializeObject(obj); return CoryTo(type, str); }
public dynamic CoryTo(object type, object obj) { var str = JsonConvert.SerializeObject(obj); return CoryTo(type, str); }
// type Type AutoWrapClient // public dynamic CoryTo(object type, string objToStr) { object result; var res = AutoWrapClient.TryInvokeMember(0, "JsonToObject", new object[] { type, objToStr }, out result, this); if (!res) throw new Exception(LastError); return result; }
static void TestSerializeObject(ClientRPC.TCPClientConnector connector) { // var obj = new TestDllForCoreClr.TestClass(" "); dynamic test = null; try { // test = connector.CoryTo(obj); } // // CoryTo catch (Exception) { Console.WriteLine(" " + connector.LastError); var assembly = wrap.GetAssembly("TestDll"); test = connector.CoryTo(obj); } Console.WriteLine(test.ObjectProperty); }
static Assembly LoadAssembly(string fileName) { var Dir = AppContext.BaseDirectory; string path = Path.Combine(Dir, fileName); Assembly assembly = null; if (File.Exists(path)) { try { var asm = System.Runtime.Loader.AssemblyLoadContext.GetAssemblyName(path); assembly = Assembly.Load(asm); } catch (Exception) { assembly = System.Runtime.Loader.AssemblyLoadContext.Default.LoadFromAssemblyPath(path); } } else throw new Exception(" " + path); return assembly; }
var objFromServ = connector.CoryFrom<Dictionary<int, string>>(dict); Console.WriteLine("dict[2] " + objFromServ[2]);
connector.CoryFrom<dynamic>(
if (LoadLocalServer) { // dotnet.exe c Server.dll, . connector = ClientRPC.TCPClientConnector.LoadAndConnectToLocalServer(GetParentDir(dir, 4) + $@"\Server\Server\bin\Release\netcoreapp1.1\Server.dll"); } else { // // // 5 connector = new ClientRPC.TCPClientConnector("127.0.0.1", port, false); // Tcp/IP . port = ClientRPC.TCPClientConnector.GetAvailablePort(6892); connector.Open(port, 2); }
public static TCPClientConnector LoadAndConnectToLocalServer(string FileName) { int port = 1025; port = GetAvailablePort(port); ProcessStartInfo startInfo = new ProcessStartInfo("dotnet.exe"); startInfo.Arguments = @""""+ FileName+ $@""" { port}"; Console.WriteLine(startInfo.Arguments); var server = Process.Start(startInfo); Console.WriteLine(server.Id); var connector = new TCPClientConnector("127.0.0.1", port); port++; port = GetAvailablePort(port); connector.Open(port, 2); return connector; }
wrap = ClientRPC.AutoWrapClient.GetProxy(connector);
// AutoWrapClient GC.Collect(); GC.WaitForPendingFinalizers(); Console.WriteLine("Press any key"); Console.ReadKey(); // , 50 // connector.ClearDeletedObject(); // , , Tcp/Ip connector.Close(); // , // if (LoadLocalServer) connector.CloseServer(); Console.WriteLine("Press any key"); Console.ReadKey();
var @DescribeEventMethods = wrap.GetType("NetObjectToNative.DescribeEventMethods", "Server"); string CodeModule = @DescribeEventMethods.GetCodeModuleForEvents(@EventTest);
public event Action<string, int> EventWithTwoParameter;
Target.EventWithTwoParameter += (arg1,arg2) => { if (EventWithTwoParameter!=null) { var EventWithTwoParameterObject = new {arg1=arg1,arg2=arg2}; EventWithTwoParameter(EventWithTwoParameterObject); } };
// value: // // arg1:System.String // arg2:System.Int32 static public void EventWithTwoParameter(dynamic value) { Console.WriteLine("EventWithTwoParameter " + wrap.toString(value)); // . Console.WriteLine($"EventWithTwoParameter arg1:{value.arg1} arg2:{value.arg2}"); value(ClientRPC.AutoWrapClient.FlagDeleteObject); }
Source: https://habr.com/ru/post/323096/
All Articles