/// <summary> /// Poll an message from a queue. /// </summary> /// <param name="queueName">Queue name (e.g. "/queue/foo").</param> /// <param name="timeout">Time, in miliseconds, before the agent stops waiting for a message, if the timeout is bigger than 0. If timeout is reached a TimeoutException is thrown. If the value is zero, than the agent will wait forever. A negative value means that the client doesn't want to wait if there are no messages is local agent's queue.</param> /// <param name="acceptRequest">An AcceptRequest instance.</param> /// <returns>A NetNotification instance. In case of connection fail or if there are no messages in local agent's queue when timeout is negative null is returned.</returns> public NetNotification Poll(String queueName, long timeout, AcceptRequest acceptRequest) { if (IsClosed()) { return(null); } NetPoll poll = new NetPoll(queueName, timeout); NetAction action = new NetAction(NetAction.ActionType.POLL); action.PollMessage = poll; NetMessage netMessage = new NetMessage(action); protocolHandler.HandleOutgoingMessage(netMessage, acceptRequest); NetNotification notification = protocolHandler.GetSyncMessage(queueName, netMessage); if (notification == BrokerProtocolHandler.UnblockNotification) { throw new TimeoutException(); } if (notification == BrokerProtocolHandler.NoMessageNotification) { return(null); } return(notification); }
/// <summary> /// Acknowledge a queue message. /// </summary> /// <param name="quequeName">Queue name (e.g. "/queue/foo" or "myQueue@/topic/foo").</param> /// <param name="messageId">The received message identifier.</param> /// <param name="acceptRequest">An AcceptRequest instance.</param> public void Acknowledge(string quequeName, string messageId, AcceptRequest acceptRequest) { if (IsClosed()) { return; } NetAcknowledge netAck = new NetAcknowledge(quequeName, messageId); NetAction action = new NetAction(NetAction.ActionType.ACKNOWLEDGE); action.AcknowledgeMessage = netAck; NetMessage netMessage = new NetMessage(action); protocolHandler.HandleOutgoingMessage(netMessage, acceptRequest); }
/// <summary> /// Cancel a previous subscription. /// </summary> /// <param name="subscription">A Subscription instance.</param> /// <param name="acceptRequest">An AcceptRequest instance.</param> public void Unsubscribe(Subscription subscription, AcceptRequest acceptRequest) { if (IsClosed()) { return; } NetUnsubscribe netUnsubscribe = new NetUnsubscribe(subscription.DestinationPattern, subscription.DestinationType); NetAction action = new NetAction(NetAction.ActionType.UNSUBSCRIBE); action.UnsbuscribeMessage = netUnsubscribe; NetMessage netMessage = new NetMessage(action, subscription.Headers); protocolHandler.HandleOutgoingMessage(netMessage, acceptRequest); protocolHandler.RemoveSubscription(subscription); }
/// <summary> /// Publish a message (to a topic). /// </summary> /// <param name="message">A broker message</param> /// <param name="destination">A destination (e.g. "/topic/foo")</param> /// <param name="acceptRequest">An AcceptRequest instance.</param> public void Publish(NetBrokerMessage message, string destination, AcceptRequest acceptRequest) { if (IsClosed()) { return; } NetPublish publish = new NetPublish(destination, NetAction.DestinationType.TOPIC, message); NetAction action = new NetAction(NetAction.ActionType.PUBLISH); action.PublishMessage = publish; NetMessage netMessage = new NetMessage(action, message.Headers); protocolHandler.HandleOutgoingMessage(netMessage, acceptRequest); }
/// <summary> /// Subscribe to a destination. /// </summary> /// <param name="subscription">A Subscription instance.</param> /// <param name="acceptRequest">An AcceptRequest instance.</param> public void Subscribe(Subscription subscription, AcceptRequest acceptRequest) { if (IsClosed()) { return; } subscription.BrokerClient = this; NetSubscribe netSubscribe = new NetSubscribe(subscription.DestinationPattern, subscription.DestinationType); NetAction action = new NetAction(NetAction.ActionType.SUBSCRIBE); action.SubscribeMessage = netSubscribe; NetMessage netMessage = new NetMessage(action, subscription.Headers); protocolHandler.HandleOutgoingMessage(netMessage, acceptRequest); protocolHandler.AddSubscription(subscription); }