protected AbstractClientChannel(final STATE initState, final TransportClient client, StateMachineMetrics<STATE> metrics) { super(initState, metrics); this.client = client; singleConnection = client.connect() .take(1) .map(new Func1<MessageConnection, MessageConnection>() { @Override public MessageConnection call(MessageConnection serverConnection) { if (connectionIfConnected == null) { connectionIfConnected = serverConnection; } subscribeToConnectionLifecycle(connectionIfConnected); return connectionIfConnected; } }) .cache(); }