use of javax.websocket.MessageHandler in project tomcat by apache.
the class WsSession method removeMessageHandler.
@Override
public void removeMessageHandler(MessageHandler listener) {
checkState();
if (listener == null) {
return;
}
MessageHandler wrapped = null;
if (listener instanceof WrappedMessageHandler) {
wrapped = ((WrappedMessageHandler) listener).getWrappedHandler();
}
if (wrapped == null) {
wrapped = listener;
}
boolean removed = false;
if (wrapped.equals(textMessageHandler) || listener.equals(textMessageHandler)) {
textMessageHandler = null;
removed = true;
}
if (wrapped.equals(binaryMessageHandler) || listener.equals(binaryMessageHandler)) {
binaryMessageHandler = null;
removed = true;
}
if (wrapped.equals(pongMessageHandler) || listener.equals(pongMessageHandler)) {
pongMessageHandler = null;
removed = true;
}
if (!removed) {
// becomes a problem
throw new IllegalStateException(sm.getString("wsSession.removeHandlerFailed", listener));
}
}
use of javax.websocket.MessageHandler in project tomcat by apache.
the class TestWebSocketFrameClientSSL method testBug56032.
@Test
public void testBug56032() throws Exception {
Tomcat tomcat = getTomcatInstance();
// No file system docBase required
Context ctx = tomcat.addContext("", null);
ctx.addApplicationListener(TesterFirehoseServer.Config.class.getName());
Tomcat.addServlet(ctx, "default", new DefaultServlet());
ctx.addServletMappingDecoded("/", "default");
TesterSupport.initSsl(tomcat);
tomcat.start();
WebSocketContainer wsContainer = ContainerProvider.getWebSocketContainer();
ClientEndpointConfig clientEndpointConfig = ClientEndpointConfig.Builder.create().build();
clientEndpointConfig.getUserProperties().put(Constants.SSL_TRUSTSTORE_PROPERTY, "test/org/apache/tomcat/util/net/ca.jks");
Session wsSession = wsContainer.connectToServer(TesterProgrammaticEndpoint.class, clientEndpointConfig, new URI("wss://localhost:" + getPort() + TesterFirehoseServer.Config.PATH));
// Process incoming messages very slowly
MessageHandler handler = new SleepingText(5000);
wsSession.addMessageHandler(handler);
wsSession.getBasicRemote().sendText("Hello");
// Wait long enough for the buffers to fill and the send to timeout
int count = 0;
int limit = TesterFirehoseServer.WAIT_TIME_MILLIS / 100;
System.out.println("Waiting for server to report an error");
while (TesterFirehoseServer.Endpoint.getErrorCount() == 0 && count < limit) {
Thread.sleep(100);
count++;
}
if (TesterFirehoseServer.Endpoint.getErrorCount() == 0) {
Assert.fail("No error reported by Endpoint when timeout was expected");
}
// Wait up to another 10 seconds for the connection to be closed -
// should be a lot faster.
System.out.println("Waiting for connection to be closed");
count = 0;
limit = (TesterFirehoseServer.SEND_TIME_OUT_MILLIS * 2) / 100;
while (TesterFirehoseServer.Endpoint.getOpenConnectionCount() != 0 && count < limit) {
Thread.sleep(100);
count++;
}
int openConnectionCount = TesterFirehoseServer.Endpoint.getOpenConnectionCount();
if (openConnectionCount != 0) {
Assert.fail("There are [" + openConnectionCount + "] connections still open");
}
// Close the client session.
wsSession.close();
}
use of javax.websocket.MessageHandler in project jetty.project by eclipse.
the class JsrEndpointEventDriver method onTextFrame.
@Override
public void onTextFrame(ByteBuffer buffer, boolean fin) throws IOException {
if (activeMessage == null) {
final MessageHandlerWrapper wrapper = jsrsession.getMessageHandlerWrapper(MessageType.TEXT);
if (wrapper == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("No TEXT MessageHandler declared");
}
return;
}
if (wrapper.wantsPartialMessages()) {
activeMessage = new TextPartialMessage(wrapper);
} else if (wrapper.wantsStreams()) {
final MessageReader stream = new MessageReader(new MessageInputStream());
activeMessage = stream;
dispatch(new Runnable() {
@SuppressWarnings("unchecked")
@Override
public void run() {
MessageHandler.Whole<Reader> handler = (Whole<Reader>) wrapper.getHandler();
handler.onMessage(stream);
}
});
} else {
activeMessage = new TextWholeMessage(this, wrapper);
}
}
activeMessage.appendFrame(buffer, fin);
if (fin) {
activeMessage.messageComplete();
activeMessage = null;
}
}
use of javax.websocket.MessageHandler in project tomcat by apache.
the class PojoEndpointBase method doOnOpen.
protected final void doOnOpen(Session session, EndpointConfig config) {
PojoMethodMapping methodMapping = getMethodMapping();
Object pojo = getPojo();
Map<String, String> pathParameters = getPathParameters();
// session
for (MessageHandler mh : methodMapping.getMessageHandlers(pojo, pathParameters, session, config)) {
session.addMessageHandler(mh);
}
if (methodMapping.getOnOpen() != null) {
try {
methodMapping.getOnOpen().invoke(pojo, methodMapping.getOnOpenArgs(pathParameters, session, config));
} catch (IllegalAccessException e) {
// Reflection related problems
log.error(sm.getString("pojoEndpointBase.onOpenFail", pojo.getClass().getName()), e);
handleOnOpenOrCloseError(session, e);
return;
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
handleOnOpenOrCloseError(session, cause);
return;
} catch (Throwable t) {
handleOnOpenOrCloseError(session, t);
return;
}
}
}
use of javax.websocket.MessageHandler in project jetty.project by eclipse.
the class MessageHandlerFactory method register.
public List<MessageHandlerMetadata> register(Class<? extends MessageHandler> handler) {
List<MessageHandlerMetadata> metadatas = new ArrayList<>();
boolean partial = false;
if (MessageHandler.Partial.class.isAssignableFrom(handler)) {
if (LOG.isDebugEnabled()) {
LOG.debug("supports Partial: {}", handler);
}
partial = true;
Class<?> onMessageClass = ReflectUtils.findGenericClassFor(handler, MessageHandler.Partial.class);
if (LOG.isDebugEnabled()) {
LOG.debug("Partial message class: {}", onMessageClass);
}
metadatas.add(new MessageHandlerMetadata(handler, onMessageClass, partial));
}
if (MessageHandler.Whole.class.isAssignableFrom(handler)) {
if (LOG.isDebugEnabled()) {
LOG.debug("supports Whole: {}", handler.getName());
}
partial = false;
Class<?> onMessageClass = ReflectUtils.findGenericClassFor(handler, MessageHandler.Whole.class);
if (LOG.isDebugEnabled()) {
LOG.debug("Whole message class: {}", onMessageClass);
}
metadatas.add(new MessageHandlerMetadata(handler, onMessageClass, partial));
}
registered.put(handler, metadatas);
return metadatas;
}
Aggregations