Java源码示例:io.vertx.proton.ProtonSession
示例1
/**
* Initializes common fixture.
*/
@BeforeEach
public void setUp() {
connection = mock(ProtonConnection.class);
vertx = mock(Vertx.class);
eventBus = mock(EventBus.class);
receiver = mock(ProtonReceiver.class);
when(receiver.handler(any())).thenReturn(receiver);
when(receiver.closeHandler(any())).thenReturn(receiver);
when(receiver.setAutoAccept(any(Boolean.class))).thenReturn(receiver);
when(receiver.setPrefetch(any(Integer.class))).thenReturn(receiver);
when(receiver.setQoS(any(ProtonQoS.class))).thenReturn(receiver);
when(vertx.eventBus()).thenReturn(eventBus);
final ProtonSession session = mock(ProtonSession.class);
when(session.getConnection()).thenReturn(connection);
sender = mock(ProtonSender.class);
when(sender.getName()).thenReturn("mocked sender");
when(sender.isOpen()).thenReturn(Boolean.TRUE);
when(sender.getSession()).thenReturn(session);
}
示例2
private void connectHandler(ProtonConnection connection) {
connection.setContainer(containerId);
connection.openHandler(conn -> {
log.info("[{}]: Connection opened", containerId);
}).closeHandler(conn -> {
connection.close();
connection.disconnect();
log.info("[{}]: Connection closed", containerId);
}).disconnectHandler(protonConnection -> {
connection.disconnect();
log.debug("Disconnected");
}).open();
connection.sessionOpenHandler(ProtonSession::open);
connection.senderOpenHandler(sender -> senderOpenHandler(connection, sender));
connection.receiverOpenHandler(receiver -> receiverOpenHandler(connection, receiver));
}
示例3
private ProtonSession getDefaultSession() {
if (defaultSession == null) {
defaultSession = createSession();
defaultSession.closeHandler(result -> {
String msg = "The connections default session closed unexpectedly";
if (!result.succeeded()) {
msg += ": ";
msg += ": " + String.valueOf(result.cause());
}
Future<ProtonConnection> failure = Future.failedFuture(msg);
Handler<AsyncResult<ProtonConnection>> connCloseHandler = closeHandler;
if (connCloseHandler != null) {
connCloseHandler.handle(failure);
}
});
defaultSession.open();
// Deliberately not flushing, the sender/receiver open
// call will do that (if it doesn't happen otherwise).
}
return defaultSession;
}
示例4
/**
* This method is called when an AMQP BEGIN frame is received from a remote client. This method sets the incoming
* capacity in its BEGIN Frame to be communicated to the remote peer
*
*/
private void handleSessionOpen(final ProtonConnection conn, final ProtonSession session) {
log.debug("opening new session with client [container: {}, session window size: {}]",
conn.getRemoteContainer(), getConfig().getMaxSessionWindowSize());
session.setIncomingCapacity(getConfig().getMaxSessionWindowSize());
session.open();
}
示例5
/**
* Verify that a second response link to the same address is being accepted if the first is released before.
*/
@Test
public void testFreeSubscription() {
final ProtonConnection con1 = mock(ProtonConnection.class);
final ProtonSession session1 = mock(ProtonSession.class);
when(session1.getConnection()).thenReturn(con1);
final ProtonConnection con2 = mock(ProtonConnection.class);
final ProtonSender sender1 = mock(ProtonSender.class);
when(sender1.getSession()).thenReturn(session1);
final ProtonSender sender2 = mock(ProtonSender.class);
final RequestResponseEndpoint<ServiceConfigProperties> endpoint = getEndpoint(true);
// WHEN a first sender attaches
endpoint.onLinkAttach(con1, sender1, REPLY_RESOURCE);
// THEN open has to be called
verify(sender1).open();
// WHEN the connection closed
endpoint.onConnectionClosed(con1);
// WHEN a new link is attached
endpoint.onLinkAttach(con2, sender2, REPLY_RESOURCE);
// THEN open has to be called
verify(sender2).open();
}
示例6
/**
* Handler for session closing from the remote
*
* @param session related Proton session closed
*/
private void processOpenSession(ProtonSession session) {
session.closeHandler(ar -> {
if (ar.succeeded()) {
ar.result().close();
}
}).open();
}
示例7
@BeforeEach
public void setup() throws InterruptedException {
vertx = Vertx.vertx();
server = ProtonServer.create(vertx);
CountDownLatch latch = new CountDownLatch(1);
CompletableFuture<ProtonSender> futureSender = new CompletableFuture<>();
server.connectHandler(conn -> {
conn.closeHandler(c -> {
conn.close();
conn.disconnect();
});
conn.disconnectHandler(c -> {
conn.disconnect();
}).open();
conn.sessionOpenHandler(ProtonSession::open);
conn.receiverOpenHandler(receiver -> {
System.out.println("Receiver open");
receiver.setTarget(receiver.getRemoteTarget());
receiver.handler((delivery, message) -> {
Message response = Message.Factory.create();
response.setAddress(message.getAddress());
response.setBody(new AmqpValue(true));
response.setCorrelationId(message.getCorrelationId());
response.setReplyTo(message.getReplyTo());
try {
futureSender.get().send(response);
} catch (Exception e) {
e.printStackTrace();
}
});
receiver.open();
});
conn.senderOpenHandler(sender -> {
sender.setSource(sender.getRemoteSource());
sender.open();
futureSender.complete(sender);
});
}).listen(12347, res -> {
latch.countDown();
});
latch.await();
}
示例8
@BeforeEach
public void setup() throws Exception {
vertx = Vertx.vertx();
server = ProtonServer.create(vertx);
inbox = new LinkedBlockingDeque<>();
outbox = new LinkedBlockingDeque<>();
CountDownLatch latch = new CountDownLatch(1);
server.connectHandler(conn -> {
conn.closeHandler(c -> {
conn.close();
conn.disconnect();
});
conn.disconnectHandler(c -> {
conn.disconnect();
}).open();
conn.sessionOpenHandler(ProtonSession::open);
conn.receiverOpenHandler(receiver -> {
log.debug("Receiver open");
receiver.setTarget(receiver.getRemoteTarget());
receiver.handler((delivery, message) -> {
inbox.add(message);
});
receiver.open();
});
conn.senderOpenHandler(sender -> {
vertx.setPeriodic(100, id -> {
try {
Message m = outbox.poll(0, TimeUnit.SECONDS);
if (m != null) {
sender.send(m);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// Try again later
}
});
sender.open();
});
}).listen(0, res -> latch.countDown());
latch.await();
actualPort = server.actualPort();
log.debug("Using port {}", actualPort);
}
示例9
@Override
public ProtonConnection sessionOpenHandler(Handler<ProtonSession> remoteSessionOpenHandler) {
this.sessionOpenHandler = remoteSessionOpenHandler;
return this;
}
示例10
@Override
public ProtonSession setIncomingCapacity(int bytes) {
session.setIncomingCapacity(bytes);
return this;
}
示例11
@Override
public ProtonSession setCondition(ErrorCondition condition) {
session.setCondition(condition);
return this;
}
示例12
/**
* Sets a default handler on a session that is invoked when an AMQP <em>end</em> frame
* is received from the peer.
* <p>
* The default handler sends an <em>end</em> frame and then frees up the resources
* maintained for the session by invoking its <em>free</em> method.
*
* @param session The session to set the handler on.
* @throws NullPointerException if session is {@code null}.
*/
public static void setDefaultCloseHandler(final ProtonSession session) {
session.closeHandler(remoteClose -> {
session.close();
session.free();
});
}
示例13
/**
* Invoked when a client initiates a session (which is then opened in this method).
* <p>
* Subclasses should override this method if other behaviour shall be implemented on session open.
*
* @param con The connection of the session.
* @param session The session that is initiated.
*/
protected void handleSessionOpen(final ProtonConnection con, final ProtonSession session) {
log.debug("opening new session with client [container: {}]", con.getRemoteContainer());
session.open();
}