Example #1
0
        public static MmiMessage ReceiveMessageAndData(NetMQSocket socket)
        {
            MmiMessage message;

            lock (socket)
            {
                string json;
                bool more;
                var msg = new Msg();
                msg.InitEmpty();
                if (!socket.TryReceiveFrameString(Timeout, out json, out more))
                {
                    throw new NetMQException("Timeout during receive");
                }

                message = new MmiMessage { JsonString = json };
                message.FillFromJson(json);

                // receive data
                if (socket.HasIn)
                {
                    byte[] bytes;
                    if (!socket.TryReceiveFrameBytes(Timeout, out bytes))
                    {
                        throw new NetMQException("Timeout during receive bytes");
                    }

                    message.Values = BytesToArray(bytes, message.DataType, message.Shape);
                }
            }

            return message;
        }
Example #2
0
        private void SendReply(MmiMessage reply = null)
        {
            if (reply == null)
            {
                reply = new MmiMessage();
            }

            MmiHelper.SendMessageAndData(socket, reply);
        }
Example #3
0
        public static void SendMessageAndData(NetMQSocket socket, MmiMessage message)
        {
            message.TimeStamp = DateTime.Now;

            var values = message.Values;
            if (values != null)
            {
                if (message.Shape == null)
                {
                    var shape = new int[values.Rank];
                    for (var i = 0; i < values.Rank; i++)
                    {
                        shape[i] = values.GetLength(i);
                    }
                    message.Shape = shape;
                }

                if (string.IsNullOrEmpty(message.DataType))
                {
                    message.DataType = GetDataTypeName(values.GetValue(0).GetType());
                }
            }

            var json = message.ToJson();

            if (values == null)
            {
                lock (socket)
                {
                    if (!socket.TrySendFrame(Timeout, json))
                    {
                        throw new NetMQException("Timeout during send");
                    }
                }
            }
            else
            {
                lock (socket)
                {
                    var bytes = ArrayToBytes(values);

                    if (!socket.TrySendFrame(Timeout, json, true))
                    {
                        throw new NetMQException("Timeout during send");
                    }

                    if (!socket.TrySendFrame(Timeout, bytes))
                    {
                        throw new NetMQException("Timeout during send");
                    }
                }
            }
        }
Example #4
0
        private void ProcessMessage(MmiMessage msg)
        {
            dynamic arguments = null;
            if (msg.Arguments != null)
            {
                arguments = JObject.Parse(msg.Arguments);
            }

            switch (msg.Action)
            {
                case "initialize":
                    if (arguments == null || arguments.config_file == null)
                    {
                        throw new InvalidOperationException("config_file argument must be speficied for initialize()");
                    }

                    model.Initialize((string)arguments.config_file);
                    SendReply();
                    break;
                case "update":
                    break;
                case "finalize":
                    model.Finish();
                    SendReply();
                    running = false;
                    break;
                case "get_var":
                    break;
                case "set_var":
                    break;
            }
        }