Esempio n. 1
0
        public static void DoTests(object hostObject)
        {
            var cb = ClassBox.Get(hostObject.GetType());

            Console.WriteLine("\n***Basic Tests***");
            var d = new JsonDecoder();
            // no param
            WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes(
                "[\"IncI\", null]")));
            //return value
            WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes(
                "[\"getI\", null]")));
            // param object
            WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes(
                "[\"add\", {\"x\": 123, \"y\": 321}]")));
            // complex param
            WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes(
                "[\"dofoo\", [{ \"a\": \"happy\", \"b\": 123 }, 7]]")));
            // bad method call
            WriteResult(cb.SerializedCall(hostObject, d, Encoding.UTF8.GetBytes(
                "[\"badCall\", null]")));
        }
Esempio n. 2
0
        public static void PerformanceTest()
        {
            int repeats = 10000000;
            TimeSpan baseTime = TimeSpan.MinValue;

            Action<string, Action> test = (n, t) =>
                {
                    Console.Write(n + ":");
                    DateTime startTime;
                    TimeSpan result;
                    startTime = DateTime.Now;
                    for (int j = 0; j < repeats; j++)
                        t();
                    result = DateTime.Now - startTime;
                    var spaces = new String(' ', 20 - n.Length);
                    if (baseTime == TimeSpan.MinValue)
                    {
                        baseTime = result;
                        Console.WriteLine(spaces + result.ToString());
                    }
                    else
                    {
                        Console.WriteLine(String.Format("{0}{1} {2}ns",
                            spaces,
                            result.ToString(),
                            (result - baseTime).TotalMilliseconds / repeats * 1000000
                            ));
                    }
                };

            RPCTest tester = new RPCTest();
            EventTest et = new EventTest();
            et.ev1 += () => tester.IncI();
            byte[] bytes = Encoding.UTF8.GetBytes("[\"IncI\",null]");
            ClassBox callbox = ClassBox.Get(tester.GetType());
            JsonDecoder d = new JsonDecoder();
            d.Parse(bytes);

            var dynamicFunc = tester.GetType().GetMethod("IncI").CreateDynamicFunc();
            var eventFunc = et.GetType().GetEvent("ev1").CreateDynamicFunc();

            test("Direct", () => tester.IncI());
            test("DynamicFunc", () => dynamicFunc(tester, null));
            test("DynamicFunc(Event)", () => eventFunc(et, null));
            test("CallBox(Direct)", () => callbox.Call(tester, "IncI", null));
            test("CallBox", () => callbox.SerializedCall(tester, d));
            test("CallBox(Full)", () => callbox.SerializedCall(tester, d, bytes));
        }