private static void TestMsgPack(int count)
        {
            //msgpack
            MessagePackObjectDictionary dict = new MessagePackObjectDictionary();

            //var key1 = new MsgPack.MessagePackObject("key1");
            //var value1 = new MsgPack.MessagePackObject(new byte[] { 1, 2, 3, 4, 5 });
            dict["key1"] = new byte[] { 1, 2, 3, 4, 5 };
            var key2 = new MsgPack.MessagePackObject("key2");

            dict[key2]     = 12345;
            dict["adfadf"] = "adfasdf";
            ArraySegment <byte> bytes;

            //byte[] bytes = null;
            //var serializer = MsgPack.Serialization.MessagePackSerializer.Get<MessagePackObjectDictionary>();
            //上面的方法比下面的少做一次转换,可能更合适
            MsgPack.MessagePackObject obj = new MsgPack.MessagePackObject(dict);
            DateTime begin = DateTime.Now;

            for (var i = 0; i < count; i++)
            {
                bytes = PackSeg(obj);
                //bytes = serializer.PackSingleObject(obj);
            }
            var time1 = DateTime.Now;

            {
                var time  = (time1 - begin).TotalSeconds;
                var speed = count / time;
                Console.WriteLine("msgpack.pack bytes=" + bytes.Count + ", time=" + time + ", speed(c/s)=" + speed);
            }
            for (var i = 0; i < count; i++)
            {
                //var obj2 =serializer.UnpackSingleObject(bytes);
                var obj2 = UnPackSeg(bytes);
                //看起来上面的方法比下面这个更快一点点
                //var obj2 = serializer.UnpackSingleObject(bytes);
                var num = obj2.AsDictionary()["key2"].AsInt32();
            }
            var time2 = DateTime.Now;
            {
                var time  = (time2 - time1).TotalSeconds;
                var speed = count / time;
                Console.WriteLine("msgpack.unpack bytes=" + bytes.Count + ", time=" + time + ", speed(c/s)=" + speed);
            }
        }
Exemplo n.º 2
0
    // Client thread which does not block Update()
    void NetMQClient()
    {
        string IPHeader = ">tcp://" + IP + ":";
        var    timeout  = new System.TimeSpan(0, 0, 1); //1sec

        // Necessary to handle this NetMQ issue on Unity editor
        // https://github.com/zeromq/netmq/issues/526
        AsyncIO.ForceDotNet.Force();
        NetMQConfig.ManualTerminationTakeOver();
        NetMQConfig.ContextCreate(true);

        string subport = "";

        Debug.Log("Connect to the server: " + IPHeader + PORT + ".");
        var       requestSocket = new RequestSocket(IPHeader + PORT);
        double    t             = 0;
        const int N             = 1000;
        bool      is_connected  = false;

        for (int k = 0; k < N; k++)
        {
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
            requestSocket.SendFrame("SUB_PORT");
            is_connected = requestSocket.TryReceiveFrameString(timeout, out subport);
            sw.Stop();
            t = t + sw.Elapsed.Milliseconds;
            //Debug.Log("Round trip time:" + sw.Elapsed + "[sec].");
            if (is_connected == false)
            {
                break;
            }
        }
        Debug.Log("Round trip average time:" + t / N + "[msec].");

        requestSocket.Close();

        if (is_connected)
        {
            //
            var subscriberSocket = new SubscriberSocket(IPHeader + subport);
            subscriberSocket.Subscribe(ID);

            var msg = new NetMQMessage();
            while (is_connected && stop_thread_ == false)
            {
                Debug.Log("Receive a multipart message.");
                is_connected = subscriberSocket.TryReceiveMultipartMessage(timeout, ref (msg));
                if (is_connected)
                {
                    Debug.Log("Unpack a received multipart message.");
                    try
                    {
                        //Debug.Log(msg[0].ConvertToString());
                        var message = MsgPack.Unpacking.UnpackObject(msg[1].ToByteArray());
                        MsgPack.MessagePackObject mmap = message.Value;
                        lock (thisLock_)
                        {
                            data_ = JsonUtility.FromJson <Pupil.PupilData3D>(mmap.ToString());
                        }
                        //Debug.Log(message);
                    }
                    catch
                    {
                        Debug.Log("Failed to unpack.");
                    }
                }
                else
                {
                    Debug.Log("Failed to receive a message.");
                    Thread.Sleep(1000);
                }
            }
            subscriberSocket.Close();
        }
        else
        {
            Debug.Log("Failed to connect the server.");
        }

        // Necessary to handle this NetMQ issue on Unity editor
        // https://github.com/zeromq/netmq/issues/526
        Debug.Log("ContextTerminate.");
        NetMQConfig.ContextTerminate();
    }
Exemplo n.º 3
0
        static void runobserveNodes()
        {
            var linkto = "127.0.0.1:1892";
            var node   = new Node(null, linkto, null, true);//观察节点

            node.actor.beObserver = true;

            var pipeline = node.sys.GetPipeline(null, "this/node");

            while (pipeline.IsVaild)
            {
                Console.WriteLine("localCmd a1=a系统的plevel(5)联向b系统的plevel(6)  a2=>:a系统的plevel(5)联向b系统的plevel(5) a3=a系统的plevel(5)联向b系统的plevel(2)");
                Console.WriteLine("localCmd b1=断开a系统的plevel(5)到b系统的plevel(6)连接  b2=>:断开a系统的plevel(5)到b系统的plevel(5)连接 b3=断开a系统的plevel(5)联向b系统的plevel(2)连接");

                var line = Console.ReadLine();
                if (string.IsNullOrEmpty(line) == false)
                {
                    if (line == "exit")
                    {
                        //node.actor.Dispose();
                        node.sys.Dispose();

                        break;
                    }
                    if (line == "a1" || line == "a2" || line == "a3" || line == "b1" || line == "b2" || line == "b3")
                    {
                        switch (line)
                        {
                        case "a1":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2896"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;

                        case "a2":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2895"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;

                        case "a3":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_ConnectTo("127.0.0.1:2892"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;

                        case "b1":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2896"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;

                        case "b2":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2895"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;

                        case "b3":
                        {
                            var msg      = node.actor.makeCmd_SendMsg("127.0.0.1:1895", node.actor.makeCmd_DisconnectTo("127.0.0.1:2892"));
                            var localcmd = node.actor.makeCmd_FakeRemote(msg);
                            pipeline.Tell(localcmd);
                        }
                        break;
                        }
                    }
                    else
                    {
                        var cmds = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
                        var dict = new MsgPack.MessagePackObjectDictionary();
                        dict["cmd"] = (UInt16)AllPet.Module.CmdList.Local_Cmd;
                        var list = new MsgPack.MessagePackObject[cmds.Length];
                        for (var i = 0; i < cmds.Length; i++)
                        {
                            list[i] = cmds[i];
                        }
                        dict["params"] = list;
                        pipeline.Tell(new MsgPack.MessagePackObject(dict));
                    }
                }
            }
        }