private void createRaftServer( CoreServerModule coreServerModule, LifecycleMessageHandler<ReceivedInstantClusterIdAwareMessage<?>> messageHandlerChain,
ChannelInboundHandler installedProtocolsHandler )
{
ApplicationProtocolRepository applicationProtocolRepository =
new ApplicationProtocolRepository( Protocol.ApplicationProtocols.values(), supportedApplicationProtocol );
ModifierProtocolRepository modifierProtocolRepository =
new ModifierProtocolRepository( Protocol.ModifierProtocols.values(), supportedModifierProtocols );
RaftMessageNettyHandler nettyHandler = new RaftMessageNettyHandler( logProvider );
RaftProtocolServerInstaller.Factory raftProtocolServerInstaller =
new RaftProtocolServerInstaller.Factory( nettyHandler, pipelineBuilderFactory, logProvider );
ProtocolInstallerRepository<ProtocolInstaller.Orientation.Server> protocolInstallerRepository =
new ProtocolInstallerRepository<>( singletonList( raftProtocolServerInstaller ), ModifierProtocolInstaller.allServerInstallers );
HandshakeServerInitializer handshakeServerInitializer = new HandshakeServerInitializer( applicationProtocolRepository, modifierProtocolRepository,
protocolInstallerRepository, pipelineBuilderFactory, logProvider );
ListenSocketAddress raftListenAddress = platformModule.config.get( CausalClusteringSettings.raft_listen_address );
Server raftServer = new Server( handshakeServerInitializer, installedProtocolsHandler, logProvider, platformModule.logging.getUserLogProvider(),
raftListenAddress, RAFT_SERVER_NAME );
platformModule.dependencies.satisfyDependency( raftServer );
LoggingInbound<ReceivedInstantClusterIdAwareMessage<?>> loggingRaftInbound =
new LoggingInbound<>( nettyHandler, messageLogger, identityModule.myself() );
loggingRaftInbound.registerHandler( messageHandlerChain );
platformModule.life.add( raftServer );
platformModule.life.add( coreServerModule.createCoreLife( messageHandlerChain ) );
platformModule.life.add( coreServerModule.catchupServer() );
coreServerModule.backupServer().ifPresent( platformModule.life::add );
platformModule.life.add( coreServerModule.downloadService() );
}