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; }
private void SendReply(MmiMessage reply = null) { if (reply == null) { reply = new MmiMessage(); } MmiHelper.SendMessageAndData(socket, reply); }
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"); } } } }
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; } }