package org.opendaylight.protocol.pcep;
import java.net.InetAddress;
+import java.util.concurrent.Future;
import org.opendaylight.protocol.framework.ProtocolSession;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
* resources.
*
* @param message message to be sent
+ * @return Future promise which will be succeed when the message is enqueued in the socket.
*/
- public void sendMessage(Message message);
+ Future<Void> sendMessage(Message message);
public void close(TerminationReason reason);
package org.opendaylight.protocol.pcep.impl;
import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelFutureListener;
import io.netty.util.Timeout;
import io.netty.util.Timer;
import io.netty.util.TimerTask;
import java.util.Date;
import java.util.LinkedList;
import java.util.Queue;
+import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.opendaylight.protocol.framework.AbstractProtocolSession;
* @param msg to be sent
*/
@Override
- public void sendMessage(final Message msg) {
- try {
- this.channel.writeAndFlush(msg);
- this.lastMessageSentAt = System.nanoTime();
- if (!(msg instanceof KeepaliveMessage)) {
- logger.debug("Sent message: " + msg);
- }
- this.sentMsgCount++;
- } catch (final Exception e) {
- logger.warn("Message {} was not sent.", msg, e);
+ public Future<Void> sendMessage(final Message msg) {
+ final ChannelFuture f = this.channel.writeAndFlush(msg);
+ this.lastMessageSentAt = System.nanoTime();
+ if (!(msg instanceof KeepaliveMessage)) {
+ logger.debug("Message enqueued: {}", msg);
}
+ this.sentMsgCount++;
+
+ f.addListener(new ChannelFutureListener() {
+ @Override
+ public void operationComplete(final ChannelFuture arg) {
+ if (arg.isSuccess()) {
+ logger.debug("Message sent to socket: {}", msg);
+ } else {
+ logger.debug("Message not sent: {}", msg, arg.cause());
+ }
+ }
+ });
+
+ return f;
}
/**
import io.netty.channel.Channel;
import io.netty.util.HashedWheelTimer;
+import java.util.concurrent.Future;
+
import org.opendaylight.protocol.pcep.PCEPCloseTermination;
import org.opendaylight.protocol.pcep.PCEPSessionListener;
import org.opendaylight.protocol.pcep.TerminationReason;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.open.message.OpenBuilder;
+import com.google.common.util.concurrent.Futures;
+
public class ServerSessionMock extends PCEPSessionImpl {
private final MockPCE client;
}
@Override
- public void sendMessage(final Message msg) {
+ public Future<Void> sendMessage(final Message msg) {
this.lastMessageSentAt = System.nanoTime();
this.client.onMessage(this, msg);
+ return Futures.immediateFuture(null);
}
@Override