value = String.valueOf(enableAckExtension);
enableAckExtension = Boolean.parseBoolean(value);
scheduler = Executors.newScheduledThreadPool(8);
MBeanContainer mbeanContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
mbeanContainer.beanAdded(null, this);
threadPool = new MonitoringQueuedThreadPool(maxThreads);
threadPool.setDaemon(true);
threadPool.start();
mbeanContainer.beanAdded(null, threadPool);
httpClient = new HttpClient();
httpClient.addBean(mbeanContainer);
httpClient.setMaxConnectionsPerDestination(60000);
httpClient.setMaxRequestsQueuedPerDestination(10000);
httpClient.setExecutor(threadPool);
httpClient.setIdleTimeout(2 * Config.MAX_NETWORK_DELAY);
httpClient.start();
mbeanContainer.beanAdded(null, httpClient);
webSocketContainer = ContainerProvider.getWebSocketContainer();
// Make sure the container is stopped when the HttpClient is stopped
httpClient.addBean(webSocketContainer, true);
mbeanContainer.beanAdded(null, webSocketContainer);
webSocketClient = new WebSocketClient();
webSocketClient.setExecutor(threadPool);
webSocketClient.setMasker(new ZeroMasker());
webSocketClient.getPolicy().setInputBufferSize(8 * 1024);
webSocketClient.addBean(mbeanContainer);
webSocketClient.start();
mbeanContainer.beanAdded(null, webSocketClient);
HandshakeListener handshakeListener = new HandshakeListener(channel, rooms, roomsPerClient);
DisconnectListener disconnectListener = new DisconnectListener();
LatencyListener latencyListener = new LatencyListener(recordLatencyDetails);