public void Publish(IMessage message, ICompletionListener listener) { if (!IsConnected()) { throw new Exception("not connected"); } JsonObject envelope = new JsonObject(); // synchronized to ensure message sequence numbers are ordered lock (writeLock) { long seqNum = Interlocked.Increment(ref messageIdGenerator); envelope.Add(ProtocolConstants.OP_FIELD, ProtocolOpConstants.OP_MESSAGE); envelope.Add(ProtocolConstants.BODY_FIELD, ((JSONMessage)message)._rawData()); if (qos) { envelope.Add(ProtocolConstants.SEQ_NUM_FIELD, seqNum); } PublishContext ctx = new PublishContext(seqNum, envelope.ToString(), message, listener); if (maxMessageSize > 0 && ctx.GetJson().Length > maxMessageSize) { throw new Exception("maximum message size exceeded"); } requests.Put(seqNum, ctx); Queue(ctx); } }
public PublishContext(Int64 seqNum, String json, IMessage message, ICompletionListener listener) { this.seqNum = seqNum; this.json = json; this.message = message; this.listener = listener; }
public void SendReply(IMessage reply, IMessage request, ICompletionListener listener) { if (!IsConnected()) { throw new Exception("not connected"); } if (((JSONMessage)request).ReplyTo == null) { throw new ArgumentException("not a request message"); } JsonObject envelope = new JsonObject(); // synchronized to ensure message sequence numbers are ordered lock (writeLock) { long seqNum = Interlocked.Increment(ref messageIdGenerator); envelope.Add(ProtocolConstants.OP_FIELD, ProtocolOpConstants.OP_REPLY); envelope.Add(ProtocolConstants.SEQ_NUM_FIELD, seqNum); envelope.Add(ProtocolConstants.TO_FIELD, ((JSONMessage)request).ReplyTo); envelope.Add(ProtocolConstants.REQ_ID_FIELD, ((JSONMessage)request).ReqId); envelope.Add(ProtocolConstants.BODY_FIELD, ((JSONMessage)reply)._rawData()); PublishContext ctx = new PublishContext(seqNum, envelope.ToString(), reply, listener); if (protocol < 1) { throw new NotSupportedException("send reply is not supported with this server"); } if (maxMessageSize > 0 && ctx.GetJson().Length > maxMessageSize) { throw new Exception("maximum message size exceeded"); } requests.Put(seqNum, ctx); Queue(ctx); } }
internal PublishContext(Int64 seqNum, String json, IMessage message, ICompletionListener listener) : base(seqNum, json) { this.message = message; this.listener = listener; }
internal PublishListener(IMessage message, ICompletionListener listener) { this.message = message; this.listener = listener; }
internal PublishContext(Int64 seqNum, String json, IMessage message, ICompletionListener listener) : base(seqNum, json, (listener != null ? new PublishListener(message, listener) : null)) { }