(Class<?> target, MessageHandler listener,
EndpointConfig endpointConfig, Session session)
| 364 | |
| 365 | |
| 366 | static Set<MessageHandlerResult> getMessageHandlers(Class<?> target, MessageHandler listener, |
| 367 | EndpointConfig endpointConfig, Session session) { |
| 368 | |
| 369 | // Will never be more than 2 types |
| 370 | Set<MessageHandlerResult> results = new HashSet<>(2); |
| 371 | |
| 372 | // Simple cases - handlers already accepts one of the types expected by |
| 373 | // the frame handling code |
| 374 | if (String.class.isAssignableFrom(target)) { |
| 375 | MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.TEXT); |
| 376 | results.add(result); |
| 377 | } else if (ByteBuffer.class.isAssignableFrom(target)) { |
| 378 | MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.BINARY); |
| 379 | results.add(result); |
| 380 | } else if (PongMessage.class.isAssignableFrom(target)) { |
| 381 | MessageHandlerResult result = new MessageHandlerResult(listener, MessageHandlerResultType.PONG); |
| 382 | results.add(result); |
| 383 | // Handler needs wrapping and optional decoder to convert it to one of |
| 384 | // the types expected by the frame handling code |
| 385 | } else if (byte[].class.isAssignableFrom(target)) { |
| 386 | boolean whole = MessageHandler.Whole.class.isAssignableFrom(listener.getClass()); |
| 387 | MessageHandlerResult result = |
| 388 | new MessageHandlerResult(whole ? |
| 389 | new PojoMessageHandlerWholeBinary(listener, getOnMessageMethod(listener), session, |
| 390 | endpointConfig, |
| 391 | matchDecoders(target, endpointConfig, true, |
| 392 | ((WsSession) session).getInstanceManager()), |
| 393 | new Object[1], 0, true, -1, false, -1) : |
| 394 | new PojoMessageHandlerPartialBinary(listener, getOnMessagePartialMethod(listener), session, |
| 395 | new Object[2], 0, true, 1, -1, -1), |
| 396 | MessageHandlerResultType.BINARY); |
| 397 | results.add(result); |
| 398 | } else if (InputStream.class.isAssignableFrom(target)) { |
| 399 | MessageHandlerResult result = new MessageHandlerResult( |
| 400 | new PojoMessageHandlerWholeBinary(listener, getOnMessageMethod(listener), session, endpointConfig, |
| 401 | matchDecoders(target, endpointConfig, true, ((WsSession) session).getInstanceManager()), |
| 402 | new Object[1], 0, true, -1, true, -1), |
| 403 | MessageHandlerResultType.BINARY); |
| 404 | results.add(result); |
| 405 | } else if (Reader.class.isAssignableFrom(target)) { |
| 406 | MessageHandlerResult result = new MessageHandlerResult( |
| 407 | new PojoMessageHandlerWholeText(listener, getOnMessageMethod(listener), session, endpointConfig, |
| 408 | matchDecoders(target, endpointConfig, false, ((WsSession) session).getInstanceManager()), |
| 409 | new Object[1], 0, true, -1, -1), |
| 410 | MessageHandlerResultType.TEXT); |
| 411 | results.add(result); |
| 412 | } else { |
| 413 | // Handler needs wrapping and requires decoder to convert it to one |
| 414 | // of the types expected by the frame handling code |
| 415 | DecoderMatch decoderMatch = |
| 416 | matchDecoders(target, endpointConfig, ((WsSession) session).getInstanceManager()); |
| 417 | Method m = getOnMessageMethod(listener); |
| 418 | if (!decoderMatch.getBinaryDecoders().isEmpty()) { |
| 419 | MessageHandlerResult result = new MessageHandlerResult( |
| 420 | new PojoMessageHandlerWholeBinary(listener, m, session, endpointConfig, |
| 421 | decoderMatch.getBinaryDecoders(), new Object[1], 0, false, -1, false, -1), |
| 422 | MessageHandlerResultType.BINARY); |
| 423 | results.add(result); |
no test coverage detected