package mqttClient import com.google.inject.{AbstractModule, Provides} import com.hivemq.client.mqtt.mqtt5.{Mqtt5AsyncClient, Mqtt5Client} import jakarta.inject.Inject import play.api.libs.concurrent.PekkoGuiceSupport import play.api.{Configuration, Logging} import java.nio.charset.StandardCharsets class Module extends AbstractModule with PekkoGuiceSupport with Logging { override def configure(): Unit = { bindTypedActor(MessageProcessorActor, "mqtt-message-processor-actor") bind(classOf[MessageProcessorActor.Reg]).asEagerSingleton() } @Provides def mqtt5Client(config: Configuration): Mqtt5AsyncClient = { val mqttConfig = config.get[Configuration]("mqtt") var builder = Mqtt5Client.builder() .identifier(mqttConfig.get[String]("clientId")) .serverHost(mqttConfig.get[String]("host")) .serverPort(mqttConfig.get("port")) mqttConfig.getOptional[String]("username").foreach{username => val password = mqttConfig.get[String]("password").getBytes(StandardCharsets.US_ASCII) builder = builder.simpleAuth() .username(username) .password(password) .applySimpleAuth() } builder.buildAsync() } }