public ZMessage Duplicate() { var message = new ZMessage(); foreach (ZFrame frame in this) { message.Add(frame.Duplicate()); } return(message); }
/// <summary> /// Forwards replies from the backend socket to the frontend socket. /// </summary> protected override bool BackendHandler(ZSocket sock, out ZMessage message, out ZError error) { error = default(ZError); message = null; // receiving scope // DEALER: normal movemsg ZMessage incoming = null; if (!sock.ReceiveMessage(ref incoming, /* ZSocketFlags.DontWait */ ZSocketFlags.None, out error)) { return(false); } using (incoming) { // STREAM: write frames: identity, body, identity, empty // Read identity int ic = (int)incoming[0].Length; var identityBytes = new byte[ic]; incoming[0].Read(identityBytes, 0, ic); // Remove DEALER's delimiter incoming.RemoveAt(1); // Append Identity frame var identity0 = new ZFrame(identityBytes); incoming.Add(identity0); // Append STREAM's empty delimiter frame incoming.Add(new ZFrame()); if (!SendMsg(FrontendSocket, incoming, out error)) { return(false); } } return(true); }
/// <summary> /// Send a ZAP reply to the handler socket /// </summary> /// <param name="status_code"></param> /// <param name="status_text"></param> /// <param name="metadata"></param> /// <returns></returns> public int RequestReply(string status_code, string status_text, byte[] metadata) { if (Verbose) { ZAuth.Info(string.Format("zauth: - ZAP reply status_code={0} status_text={1}", status_code, status_text)); } ZMessage msg = new ZMessage(); msg.Add(new ZFrame("1.0")); msg.Add(new ZFrame(Sequence)); msg.Add(new ZFrame(status_code)); msg.Add(new ZFrame(status_text)); msg.Add(new ZFrame(UserId != null ? UserId : "")); // rc = zmsg_addmem(msg, metadata, metasize); msg.Add(new ZFrame(metadata)); handler.SendMessage(msg); return(0); }