{
try
{
final WebSocketClientFactory webSocketClientFactory = getWebSocketClientFactory(sslContext);
WebSocketClient client = webSocketClientFactory.newWebSocketClient();
// Configure the client
client.setProtocol(AMQP_WEBSOCKET_SUBPROTOCOL);
ConnectionHandler.FrameOutput<FrameBody> out = new ConnectionHandler.FrameOutput<FrameBody>(conn);
final ConnectionHandler.FrameSource src;
if(conn.requiresSASL())
{
ConnectionHandler.FrameOutput<SaslFrameBody> saslOut = new ConnectionHandler.FrameOutput<SaslFrameBody>(conn);
src = new ConnectionHandler.SequentialFrameSource(new HeaderFrameSource((byte)'A',
(byte)'M',
(byte)'Q',
(byte)'P',
(byte)3,
(byte)1,
(byte)0,
(byte)0),
saslOut,
new HeaderFrameSource((byte)'A',
(byte)'M',
(byte)'Q',
(byte)'P',
(byte)0,
(byte)1,
(byte)0,
(byte)0),
out);
conn.setSaslFrameOutput(saslOut);
}
else
{
src = new ConnectionHandler.SequentialFrameSource(new HeaderFrameSource((byte)'A',
(byte)'M',
(byte)'Q',
(byte)'P',
(byte)0,
(byte)1,
(byte)0,
(byte)0),
out);
}
final ConnectionHandler handler = new ConnectionHandler(conn);
conn.setFrameOutputHandler(out);
final URI uri = new URI(_transport +"://"+ address+":"+ port +"/");
WebSocket.Connection connection = client.open(uri, new WebSocket.OnBinaryMessage()
{
public void onOpen(Connection connection)
{
Thread outputThread = new Thread(new FrameOutputThread(connection, src, conn, exceptionHandler, webSocketClientFactory));