private void ReceiveMessage(NetMQSocket socket, NetMQMessage message) { if (message[message.FrameCount - 2].MessageSize != 0) { RaiseError("ProtocolError", "Invalid event: Second to last argument must be an empty buffer!"); return; } List <byte[]> envelope = message.Take(message.FrameCount - 2).Select(n => n.ToByteArray()).ToList(); Event evt; try { evt = SerializerUtils.Deserialize(envelope, message.Last.ToByteArray()); } catch (Exception ex) { RaiseError("ProtocolError", $"Invalid event: {ex.Message}", ex.StackTrace); return; } if (Channels.TryGetValue(evt.Header.ResponseTo, out Channel ch)) { ch.ProcessAsync(evt); } else { EventReceived?.BeginInvoke(this, new EventReceivedArgs { Event = evt }, null, null); } }