@Override public void stop() { if (context.needToCheckClientState()) { checkClientStateNot(State.CREATED, "Kaa client is not started"); checkClientStateNot(State.STOPPED, "Kaa client is already stopped"); } setClientState(State.STOPPED); getLifeCycleExecutor() .submit( new Runnable() { @Override public void run() { try { logCollector.stop(); kaaClientState.persist(); channelManager.shutdown(); if (stateListener != null) { stateListener.onStopped(); } } catch (Exception e) { LOG.error("Stop failed", e); if (stateListener != null) { stateListener.onStopFailure(new KaaException(e)); } } } }); context.getExecutorContext().stop(); }
protected KaaInternalChannelManager buildChannelManager( BootstrapManager bootstrapManager, Map<TransportProtocolId, List<TransportConnectionInfo>> bootstrapServers) { KaaInternalChannelManager kaaInternalChannelManager = new DefaultChannelManager( bootstrapManager, bootstrapServers, context.getExecutorContext(), failureListener); kaaInternalChannelManager.setConnectivityChecker(context.createConnectivityChecker()); return kaaInternalChannelManager; }
protected BootstrapManager buildBootstrapManager( KaaClientProperties properties, KaaClientState kaaClientState, TransportContext transportContext) { return new DefaultBootstrapManager( transportContext.getBootstrapTransport(), context.getExecutorContext(), failureListener); }
protected DefaultLogCollector buildLogCollector(TransportContext transportContext) { return new DefaultLogCollector( transportContext.getLogTransport(), context.getExecutorContext(), channelManager, failoverManager); }
@Override public void resume() { if (context.needToCheckClientState()) { checkClientState(State.PAUSED, "Kaa client isn't paused"); } setClientState(State.STARTED); getLifeCycleExecutor() .submit( new Runnable() { @Override public void run() { try { channelManager.resume(); if (stateListener != null) { stateListener.onResume(); } } catch (Exception e) { LOG.error("Resume failed", e); if (stateListener != null) { stateListener.onResumeFailure(new KaaException(e)); } } } }); }
@Override public void pause() { if (context.needToCheckClientState()) { checkClientState( State.STARTED, "Kaa client is not started (" + clientState.toString().toLowerCase() + " now)"); } setClientState(State.PAUSED); getLifeCycleExecutor() .submit( new Runnable() { @Override public void run() { try { kaaClientState.persist(); channelManager.pause(); if (stateListener != null) { stateListener.onPaused(); } } catch (Exception e) { LOG.error("Pause failed", e); if (stateListener != null) { stateListener.onPauseFailure(new KaaException(e)); } } } }); }
protected DefaultEndpointRegistrationManager buildRegistrationManager( KaaClientState kaaClientState, TransportContext transportContext) { return new DefaultEndpointRegistrationManager( kaaClientState, context.getExecutorContext(), transportContext.getUserTransport(), transportContext.getProfileTransport()); }
@Override public void start() { if (context.needToCheckClientState()) { checkClientStateNot(State.STARTED, "Kaa client is already started"); checkClientStateNot(State.PAUSED, "Kaa client is paused, need to be resumed"); } setClientState(State.STARTED); checkReadiness(); context.getExecutorContext().init(); getLifeCycleExecutor() .submit( new Runnable() { @Override public void run() { LOG.debug("Client startup initiated"); try { // Load configuration configurationManager.init(); bootstrapManager.receiveOperationsServerList(); if (stateListener != null) { stateListener.onStarted(); } } catch (TransportException e) { LOG.error("Start failed", e); if (stateListener != null) { stateListener.onStartFailure(new KaaClusterConnectionException(e)); } } catch (KaaRuntimeException e) { LOG.error("Start failed", e); if (stateListener != null) { stateListener.onStartFailure(new KaaException(e)); } } } }); }
public AbstractHttpClient createHttpClient( String url, PrivateKey privateKey, PublicKey publicKey, PublicKey remotePublicKey) { return context.createHttpClient(url, privateKey, publicKey, remotePublicKey); }
protected DefaultNotificationManager buildNotificationManager( KaaClientState kaaClientState, TransportContext transportContext) { return new DefaultNotificationManager( kaaClientState, context.getExecutorContext(), transportContext.getNotificationTransport()); }
protected DefaultEventManager buildEventManager( KaaClientState kaaClientState, TransportContext transportContext) { return new DefaultEventManager( kaaClientState, context.getExecutorContext(), transportContext.getEventTransport()); }
protected FailoverManager buildFailoverManager(KaaChannelManager channelManager) { return new DefaultFailoverManager(channelManager, context.getExecutorContext()); }
private ExecutorService getLifeCycleExecutor() { return context.getExecutorContext().getLifeCycleExecutor(); }
AbstractKaaClient( KaaClientPlatformContext context, KaaClientStateListener listener, boolean isAutogeneratedKeys) throws IOException, GeneralSecurityException { this.context = context; this.stateListener = listener; if (context.getProperties() != null) { this.properties = context.getProperties(); } else { this.properties = new KaaClientProperties(); } this.properties.setBase64(context.getBase64()); Map<TransportProtocolId, List<TransportConnectionInfo>> bootstrapServers = this.properties.getBootstrapServers(); if (bootstrapServers == null || bootstrapServers.isEmpty()) { throw new RuntimeException("Unable to obtain list of bootstrap services."); // NOSONAR } for (Map.Entry<TransportProtocolId, List<TransportConnectionInfo>> cursor : bootstrapServers.entrySet()) { Collections.shuffle(cursor.getValue()); } kaaClientState = new KaaClientPropertiesState( context.createPersistentStorage(), context.getBase64(), properties, isAutogeneratedKeys); TransportContext transportContext = buildTransportContext(properties, kaaClientState); bootstrapManager = buildBootstrapManager(properties, kaaClientState, transportContext); channelManager = buildChannelManager(bootstrapManager, bootstrapServers); failoverManager = buildFailoverManager(channelManager); channelManager.setFailoverManager(failoverManager); initializeChannels(channelManager, transportContext); bootstrapManager.setChannelManager(channelManager); bootstrapManager.setFailoverManager(failoverManager); profileManager = buildProfileManager(transportContext); notificationManager = buildNotificationManager(kaaClientState, transportContext); eventManager = buildEventManager(kaaClientState, transportContext); endpointRegistrationManager = buildRegistrationManager(kaaClientState, transportContext); logCollector = buildLogCollector(transportContext); configurationManager = buildConfigurationManager(properties, kaaClientState, context.getExecutorContext()); transportContext.getRedirectionTransport().setBootstrapManager(bootstrapManager); transportContext.getBootstrapTransport().setBootstrapManager(bootstrapManager); transportContext.getProfileTransport().setProfileManager(profileManager); transportContext.getEventTransport().setEventManager(eventManager); transportContext.getNotificationTransport().setNotificationProcessor(notificationManager); transportContext .getConfigurationTransport() .setConfigurationHashContainer(configurationManager.getConfigurationHashContainer()); transportContext .getConfigurationTransport() .setConfigurationProcessor(configurationManager.getConfigurationProcessor()); transportContext .getUserTransport() .setEndpointRegistrationProcessor(endpointRegistrationManager); transportContext.getLogTransport().setLogProcessor(logCollector); transportContext.initTransports(this.channelManager, this.kaaClientState); eventFamilyFactory = new EventFamilyFactory(eventManager, context.getExecutorContext()); }