package com.juick.server.configuration; import com.juick.server.XMPPConnection; import com.juick.server.XMPPServer; import com.juick.server.xmpp.JidConverter; import com.juick.server.xmpp.iq.MessageQuery; import com.juick.server.xmpp.router.XMPPRouter; import com.juick.server.xmpp.s2s.BasicXmppSession; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.convert.ConversionService; import org.springframework.format.support.DefaultFormattingConversionService; import rocks.xmpp.core.session.Extension; import rocks.xmpp.core.session.XmppSessionConfiguration; import rocks.xmpp.core.session.debug.LogbackDebugger; import java.time.Duration; @Configuration @ConditionalOnProperty("xmppbot_jid") public class XMPPConfig { @Value("${hostname:localhost}") private String hostname; @Bean public BasicXmppSession session() { XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() .extensions(Extension.of(com.juick.Message.class), Extension.of(MessageQuery.class)) .debugger(LogbackDebugger.class) .defaultResponseTimeout(Duration.ofMillis(120000)) .build(); return BasicXmppSession.create(hostname, configuration); } @Bean public static ConversionService conversionService() { DefaultFormattingConversionService cs = new DefaultFormattingConversionService(); cs.addConverter(new JidConverter()); return cs; } @Bean public XMPPServer xmppServer() { return new XMPPServer(); } @Bean public XMPPRouter xmppRouter() { return new XMPPRouter(); } @Bean @DependsOn("xmppRouter") public XMPPConnection xmppConnection() { return new XMPPConnection(); } }