Esempio n. 1
0
        public void test_exception()
        {
            var sessionid = Guid.NewGuid().ToString();
            var version   = (byte)1;

            var msg = new NetMQMessage();

            msg.Append(new byte[] { version });                                                                      //版本号
            msg.Append("action");                                                                                    //动作
            msg.Append(sessionid);                                                                                   //sessionid
            msg.Append(new byte[] { 14, 2, 3 });                                                                     //客户端密钥
            msg.Append(new byte[] { 61, 2, 3 });                                                                     //服务端密钥
            msg.Append(Encoding.UTF8.GetBytes($"c=exceptionaction&o=123&r=false&t=123123&token={GetToken(Token)}")); //信息头
            msg.Append(Encoding.UTF8.GetBytes("seed=123123"));                                                       //信息体

            PushSocket.SendMultipartMessage(msg);

            var receiveMsg = PullSocket.ReceiveMultipartMessage();

            Console.WriteLine(receiveMsg);
            var headers = receiveMsg[5].ConvertToString().ToQueryDic();

            Assert.AreEqual(Convert.ToString((int)StatusCode.BadRequest), headers["code"]);
            Assert.AreEqual(ExceptionAction.ErrorCode, headers["errorCode"]);
            Assert.AreEqual(ExceptionAction.ErrorMsg, headers["errorMsg"]);
        }
        public void MessageHandler_SendsCorrectPackets_ToCorrectRoutes()
        {
            //Allow proper decoding of orders.
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = { new OrderJsonConverter() }
            };

            // Create list of packets to test
            var debug = new DebugPacket();
            var log = new LogPacket();
            var backtest = new BacktestResultPacket();
            var handled = new HandledErrorPacket();
            var error = new RuntimeErrorPacket();
            var packetList = new List<Packet>
                {
                    log,
                    debug,
                    backtest,
                    handled,
                    error
                };

            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                var count = 0;
                while (count < packetList.Count)
                {
                    _messageHandler.Send(packetList[count]);

                    var message = pullSocket.ReceiveMultipartMessage();

                    var payload = message[0].ConvertToString();
                    var packet = JsonConvert.DeserializeObject<Packet>(payload);

                    Assert.IsTrue(message.FrameCount == 1);

                    if (PacketType.Debug == packet.Type)
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(debug));

                    if (PacketType.HandledError == packet.Type)
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(handled));

                    if (PacketType.BacktestResult == packet.Type)
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(backtest));

                    if (PacketType.RuntimeError == packet.Type)
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(error));

                    if (PacketType.Log == packet.Type)
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(log));

                    count++;
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// This 0MQ Pull socket accepts certain messages from a 0MQ Push socket
        /// </summary>
        /// <param name="port">The port on which to listen</param>
        /// <param name="handler">The handler which will display the repsonses</param>
        public void Run(string port, IDesktopMessageHandler handler)
        {
            //Allow proper decoding of orders.
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = { new OrderJsonConverter() }
            };

            using (var pullSocket = new PullSocket(">tcp://localhost:" + port))
            {
                while (!_stopServer)
                {
                    var message = pullSocket.ReceiveMultipartMessage();

                    // There should only be 1 part messages
                    if (message.FrameCount != 1) continue;

                    var payload = message[0].ConvertToString();

                    var packet = JsonConvert.DeserializeObject<Packet>(payload);

                    switch (packet.Type)
                    {
                        case PacketType.BacktestNode:
                            var backtestJobModel = JsonConvert.DeserializeObject<BacktestNodePacket>(payload);
                            handler.Initialize(backtestJobModel);
                            break;
                        case PacketType.LiveNode:
                            var liveJobModel = JsonConvert.DeserializeObject<LiveNodePacket>(payload);
                            handler.Initialize(liveJobModel);
                            break;
                        case PacketType.Debug:
                            var debugEventModel = JsonConvert.DeserializeObject<DebugPacket>(payload);
                            handler.DisplayDebugPacket(debugEventModel);
                            break;
                        case PacketType.HandledError:
                            var handleErrorEventModel = JsonConvert.DeserializeObject<HandledErrorPacket>(payload);
                            handler.DisplayHandledErrorPacket(handleErrorEventModel);
                            break;
                        case PacketType.BacktestResult:
                            var backtestResultEventModel = JsonConvert.DeserializeObject<BacktestResultPacket>(payload);
                            handler.DisplayBacktestResultsPacket(backtestResultEventModel);
                            break;
                        case PacketType.RuntimeError:
                            var runtimeErrorEventModel = JsonConvert.DeserializeObject<RuntimeErrorPacket>(payload);
                            handler.DisplayRuntimeErrorPacket(runtimeErrorEventModel);
                            break;
                        case PacketType.Log:
                            var logEventModel = JsonConvert.DeserializeObject<LogPacket>(payload);
                            handler.DisplayLogPacket(logEventModel);
                            break;
                    }
                }
            }
        }
        public void MessageHandler_WillSend_NewLiveJob_ToCorrectRoute()
        {
            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                _messageHandler.SetAuthentication(new LiveNodePacket());

                var message = pullSocket.ReceiveMultipartMessage();

                var payload = message[0].ConvertToString();
                var packet  = JsonConvert.DeserializeObject <Packet>(payload);

                Assert.IsTrue(message.FrameCount == 1);
                Assert.IsTrue(PacketType.LiveNode == packet.Type);
                Assert.IsTrue(payload == JsonConvert.SerializeObject(new LiveNodePacket()));
            }
        }
        public void MessageHandler_WillSend_MultipartMessage()
        {
            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                var logPacket = new LogPacket
                {
                    Message = "1"
                };

                var tx = JsonConvert.SerializeObject(logPacket);

                _messageHandler.Transmit(logPacket);

                var message = pullSocket.ReceiveMultipartMessage();

                Assert.IsTrue(message.FrameCount == 1);
                Assert.IsTrue(message[0].ConvertToString() == tx);
            }
        }
        public void MessageHandler_WillSend_MultipartMessage()
        {
            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                var logPacket = new LogPacket
                {
                    Message = "1"
                };

                var tx = JsonConvert.SerializeObject(logPacket);

                _messageHandler.Transmit(logPacket);

                var message = pullSocket.ReceiveMultipartMessage();

                Assert.IsTrue(message.FrameCount == 1);
                Assert.IsTrue(message[0].ConvertToString() == tx);
            }
        }
Esempio n. 7
0
        //服务器向客户端下发数据
        protected virtual void ProcessResponse(object o, NetMQSocketEventArgs e)
        {
            //TODO https://netmq.readthedocs.io/en/latest/poller/   #Performance
            var msg = responseSocket.ReceiveMultipartMessage();//TryReceiveMultipartMessage();
            //msg[0].Buffer //版本号
            var action    = msg[1].ConvertToString();
            var sessionid = msg[2].ConvertToString();

            var clientkey = msg[3].Buffer;
            var serverkey = msg[4].Buffer;

            var header  = msg[5].Buffer;
            var content = msg[6].Buffer;

            var response = new PirateXResponsePackage()
            {
                HeaderBytes  = header,
                ContentBytes = content
            };

            var protocolPackage = NetSend.GetProtocolPackage(sessionid);

            //将消息下发到客户端
            if (protocolPackage == null)
            {
                return;
            }
            if (protocolPackage.PackKeys == null)
            {
                protocolPackage.PackKeys = serverkey;
            }
            if (protocolPackage.UnPackKeys == null)
            {
                protocolPackage.UnPackKeys = clientkey;
            }

            var bytes = protocolPackage.PackPacketToBytes(response);

            NetSend.Send(sessionid, bytes);
        }
Esempio n. 8
0
        private void SocketListener(object sender, DoWorkEventArgs e)
        {
            using (var pullSocket = new PullSocket(_host + _port))
            {
                while (!e.Cancel)
                {
                    var message = pullSocket.ReceiveMultipartMessage();

                    // There should only be 1 part messages
                    if (message.FrameCount != 1)
                    {
                        continue;
                    }

                    var payload = message[0].ConvertToString();

                    var packet = JsonConvert.DeserializeObject <Packet>(payload);

                    switch (packet.Type)
                    {
                    case PacketType.LiveResult:
                        var liveResultEventModel = JsonConvert.DeserializeObject <LiveResultPacket>(payload);
                        _packetQueue.Enqueue(liveResultEventModel);
                        break;

                    case PacketType.BacktestResult:
                        var backtestResultEventModel = JsonConvert.DeserializeObject <BacktestResultPacket>(payload);
                        _packetQueue.Enqueue(backtestResultEventModel);
                        break;

                    case PacketType.Log:
                        var logEventModel = JsonConvert.DeserializeObject <LogPacket>(payload);
                        _packetQueue.Enqueue(logEventModel);
                        break;
                    }
                }
            }
        }
        public void MessageHandler_SendsCorrectPackets_ToCorrectRoutes()
        {
            //Allow proper decoding of orders.
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = { new OrderJsonConverter() }
            };

            // Create list of packets to test
            var debug      = new DebugPacket();
            var log        = new LogPacket();
            var backtest   = new BacktestResultPacket();
            var handled    = new HandledErrorPacket();
            var error      = new RuntimeErrorPacket();
            var packetList = new List <Packet>
            {
                log,
                debug,
                backtest,
                handled,
                error
            };

            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                var count = 0;
                while (count < packetList.Count)
                {
                    _messageHandler.Send(packetList[count]);

                    var message = pullSocket.ReceiveMultipartMessage();

                    var payload = message[0].ConvertToString();
                    var packet  = JsonConvert.DeserializeObject <Packet>(payload);

                    Assert.IsTrue(message.FrameCount == 1);

                    if (PacketType.Debug == packet.Type)
                    {
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(debug));
                    }

                    if (PacketType.HandledError == packet.Type)
                    {
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(handled));
                    }

                    if (PacketType.BacktestResult == packet.Type)
                    {
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(backtest));
                    }

                    if (PacketType.RuntimeError == packet.Type)
                    {
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(error));
                    }

                    if (PacketType.Log == packet.Type)
                    {
                        Assert.IsTrue(payload == JsonConvert.SerializeObject(log));
                    }

                    count++;
                }
            }
        }
        public void connect()
        {
            string name = AppDomain.CurrentDomain.FriendlyName;

            endpoint = ConfigurationManager.AppSettings["broker"];
            using (responder = new PullSocket())
            {
                responder.Connect(endpoint);
                while (this.running)
                {
                    try
                    {
                        NetMQMessage msgList = responder.ReceiveMultipartMessage();

                        msgList.Pop();

                        foreach (var msg in msgList)
                        {
                            string result = msg.ConvertToString();

                            int size = msg.MessageSize;
                            if (size <= 5)
                            {
                                continue;
                            }
                            try
                            {
                                var strMsg = JsonConvert.DeserializeObject <TaskMessage>(result);
                                if (this.onReceive != null)
                                {
                                    this.onReceive(strMsg);
                                }
                            }
                            catch (Exception ex)
                            {
                                if (onError != null)
                                {
                                    this.onError(String.Format("消息:{0},反序列化异常:{1}", result, ex.Message));
                                }
                            }
                        }
                    }
                    catch (NetMQ.TerminatingException te)
                    {
                        if (onError != null)
                        {
                            this.onError(String.Format("连接终止异常:" + te.Message));
                        }
                        break;
                    }
                    catch (Exception ex)
                    {
                        if (onError != null)
                        {
                            this.onError(String.Format("异常:" + ex.Message));
                        }
                        break;
                    }
                }
            }
        }
        public void MessageHandler_WillSend_NewLiveJob_ToCorrectRoute()
        {
            using (var pullSocket = new PullSocket(">tcp://localhost:" + _port))
            {
                _messageHandler.SetAuthentication(new LiveNodePacket());

                var message = pullSocket.ReceiveMultipartMessage();

                var payload = message[0].ConvertToString();
                var packet = JsonConvert.DeserializeObject<Packet>(payload);

                Assert.IsTrue(message.FrameCount == 1);
                Assert.IsTrue(PacketType.LiveNode == packet.Type);
                Assert.IsTrue(payload == JsonConvert.SerializeObject(new LiveNodePacket()));
            }
        }
        /// <summary>
        /// This 0MQ Pull socket accepts certain messages from a 0MQ Push socket
        /// </summary>
        /// <param name="port">The port on which to listen</param>
        /// <param name="handler">The handler which will display the repsonses</param>
        public void Run(string port, IDesktopMessageHandler handler)
        {
            //Allow proper decoding of orders.
            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Converters = { new OrderJsonConverter() }
            };

            using (var pullSocket = new PullSocket(">tcp://localhost:" + port))
            {
                while (!_stopServer)
                {
                    var message = pullSocket.ReceiveMultipartMessage();

                    // There should only be 1 part messages
                    if (message.FrameCount != 1)
                    {
                        continue;
                    }

                    var payload = message[0].ConvertToString();

                    var packet = JsonConvert.DeserializeObject <Packet>(payload);

                    switch (packet.Type)
                    {
                    case PacketType.BacktestNode:
                        var backtestJobModel = JsonConvert.DeserializeObject <BacktestNodePacket>(payload);
                        handler.Initialize(backtestJobModel);
                        break;

                    case PacketType.LiveNode:
                        var liveJobModel = JsonConvert.DeserializeObject <LiveNodePacket>(payload);
                        handler.Initialize(liveJobModel);
                        break;

                    case PacketType.Debug:
                        var debugEventModel = JsonConvert.DeserializeObject <DebugPacket>(payload);
                        handler.DisplayDebugPacket(debugEventModel);
                        break;

                    case PacketType.HandledError:
                        var handleErrorEventModel = JsonConvert.DeserializeObject <HandledErrorPacket>(payload);
                        handler.DisplayHandledErrorPacket(handleErrorEventModel);
                        break;

                    case PacketType.BacktestResult:
                        var backtestResultEventModel = JsonConvert.DeserializeObject <BacktestResultPacket>(payload);
                        handler.DisplayBacktestResultsPacket(backtestResultEventModel);
                        break;

                    case PacketType.RuntimeError:
                        var runtimeErrorEventModel = JsonConvert.DeserializeObject <RuntimeErrorPacket>(payload);
                        handler.DisplayRuntimeErrorPacket(runtimeErrorEventModel);
                        break;

                    case PacketType.Log:
                        var logEventModel = JsonConvert.DeserializeObject <LogPacket>(payload);
                        handler.DisplayLogPacket(logEventModel);
                        break;
                    }
                }
            }
        }