1 /* 2 * hunt-amqp-client: AMQP Client Library for D Programming Language. Support for RabbitMQ and other AMQP Server. 3 * 4 * Copyright (C) 2018-2019 HuntLabs 5 * 6 * Website: https://www.huntlabs.net 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 module hunt.amqp.client.AmqpConnection; 12 13 //import hunt.codegen.annotations.Fluent; 14 //import hunt.codegen.annotations.VertxGen; 15 //import hunt.core.AsyncResult; 16 //import hunt.core.Future; 17 import hunt.amqp.Handler; 18 import hunt.Object; 19 import hunt.amqp.client.AmqpReceiver; 20 import hunt.amqp.client.AmqpSender; 21 import hunt.amqp.client.AmqpReceiverOptions; 22 import hunt.amqp.client.AmqpSenderOptions; 23 24 25 /** 26 * Once connected to the broker or router, you get a connection. This connection is automatically opened. 27 */ 28 interface AmqpConnection { 29 30 bool isClosed(); 31 32 /** 33 * Registers a handler called on disconnection. 34 * 35 * @param handler the exception handler. 36 */ 37 AmqpConnection exceptionHandler(Handler!Throwable handler); 38 39 /** 40 * Closes the AMQP connection, i.e. allows the Close frame to be emitted. 41 * 42 * @param done the close handler notified when the connection is closed. May be {@code null}. 43 * @return the connection 44 */ 45 AmqpConnection close(AsyncResultHandler!Void done); 46 47 /** 48 * Like {@link #close(Handler)} but returns a {@code Future} of the asynchronous result 49 */ 50 // Future<Void> close(); 51 52 /** 53 * Creates a receiver used to consume messages from the given address. The receiver has no handler and won't 54 * start receiving messages until a handler is explicitly configured. 55 * 56 * @param address The source address to attach the consumer to, must not be {@code null} 57 * @param completionHandler the handler called with the receiver. The receiver has been opened. 58 * @return the connection. 59 */ 60 AmqpConnection createReceiver(string address, Handler!AmqpReceiver completionHandler); 61 62 /** 63 * Like {@link #createReceiver(string, Handler)} but returns a {@code Future} of the asynchronous result 64 */ 65 //Future<AmqpReceiver> createReceiver(string address); 66 67 /** 68 * Creates a receiver used to consumer messages from the given address. 69 * 70 * @param address The source address to attach the consumer to. 71 * @param receiverOptions The options for this receiver. 72 * @param completionHandler The handler called with the receiver, once opened. Note that the {@code messageHandler} 73 * can be called before the {@code completionHandler} if messages are awaiting delivery. 74 * @return the connection. 75 */ 76 AmqpConnection createReceiver(string address, AmqpReceiverOptions receiverOptions, 77 Handler!AmqpReceiver completionHandler); 78 79 /** 80 * Like {@link #createReceiver(string, AmqpReceiverOptions, Handler)} but returns a {@code Future} of the asynchronous result 81 */ 82 // Future<AmqpReceiver> createReceiver(string address, AmqpReceiverOptions receiverOptions); 83 84 /** 85 * Creates a dynamic receiver. The address is provided by the broker and is available in the {@code completionHandler}, 86 * using the {@link AmqpReceiver#address()} method. this method is useful for request-reply to generate a unique 87 * reply address. 88 * 89 * @param completionHandler the completion handler, called when the receiver has been created and opened. 90 * @return the connection. 91 */ 92 AmqpConnection createDynamicReceiver(Handler!AmqpReceiver completionHandler); 93 94 /** 95 * Like {@link #createDynamicReceiver(Handler)} but returns a {@code Future} of the asynchronous result 96 */ 97 // Future<AmqpReceiver> createDynamicReceiver(); 98 99 /** 100 * Creates a sender used to send messages to the given address. The address must be set. For anonymous sender, check 101 * {@link #createAnonymousSender(Handler)}. 102 * 103 * @param address The target address to attach to, must not be {@code null} 104 * @param completionHandler The handler called with the sender, once opened 105 * @return the connection. 106 * @see #createAnonymousSender(Handler) 107 */ 108 AmqpConnection createSender(string address, Handler!AmqpSender completionHandler); 109 110 /** 111 * Like {@link #createSender(string, Handler)} but returns a {@code Future} of the asynchronous result 112 */ 113 // Future<AmqpSender> createSender(string address); 114 115 /** 116 * Creates a sender used to send messages to the given address. The address must be set. For anonymous sender, check 117 * {@link #createAnonymousSender(Handler)}. 118 * 119 * @param address The target address to attach to, allowed to be {@code null} if the {@code options} 120 * configures the sender to be attached to a dynamic address (provided by the broker). 121 * @param options The AMQP sender options 122 * @param completionHandler The handler called with the sender, once opened 123 * @return the connection. 124 * @see #createAnonymousSender(Handler) 125 */ 126 AmqpConnection createSender(string address, AmqpSenderOptions options, 127 Handler!AmqpSender completionHandler); 128 129 /** 130 * Like {@link #createSender(string, AmqpSenderOptions, Handler)} but returns a {@code Future} of the asynchronous result 131 */ 132 //Future<AmqpSender> createSender(string address, AmqpSenderOptions options); 133 134 /** 135 * Creates an anonymous sender. 136 * <p> 137 * Unlike "regular" sender, this sender is not associated to a specific address, and each message sent must provide 138 * an address. This method can be used in request-reply scenarios where you create a sender to send the reply, 139 * but you don't know the address, as the reply address is passed into the message you are going to receive. 140 * 141 * @param completionHandler The handler called with the created sender, once opened 142 * @return the connection. 143 */ 144 AmqpConnection createAnonymousSender(Handler!AmqpSender completionHandler); 145 146 /** 147 * Like {@link #createAnonymousSender(Handler)} but returns a {@code Future} of the asynchronous result 148 */ 149 // Future<AmqpSender> createAnonymousSender(); 150 151 }