Integrated MQTT clients

This commit is contained in:
2025-12-12 20:58:32 +01:00
parent f457911f3b
commit b9a87309e4
18 changed files with 291 additions and 68 deletions

View File

@@ -1,5 +1,6 @@
package be.naaturel.boardmateapi.services;
import be.naaturel.boardmateapi.common.exceptions.ServiceException;
import be.naaturel.boardmateapi.common.models.Game;
import be.naaturel.boardmateapi.common.models.Move;
import be.naaturel.boardmateapi.repository.GameRepo;
@@ -38,9 +39,14 @@ public class GameService {
return gameDto.getId();
}
public void addMove(@RequestBody String gameId, @RequestBody String move) {
Game g = retrieveGame(gameId);
g.addMove(move);
save(g);
public String addMove(@RequestBody String gameId, @RequestBody String move) throws ServiceException {
try {
Game g = retrieveGame(gameId);
g.addMove(move);
save(g);
return g.getId();
} catch (Exception e) {
throw new ServiceException(e.getMessage(), e);
}
}
}

View File

@@ -0,0 +1,60 @@
package be.naaturel.boardmateapi.services;
import be.naaturel.boardmateapi.common.exceptions.ServiceException;
import be.naaturel.boardmateapi.common.helpers.Logger;
import org.eclipse.paho.client.mqttv3.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class MqttService {
private final MqttClient publisher;
private final MqttClient subscriber;
public MqttService(
@Qualifier("mqttPublisher") MqttClient publisher,
@Qualifier("mqttSubscriber") MqttClient subscriber
) {
this.publisher = publisher;
this.subscriber = subscriber;
}
public void publish(String topic, String payload) throws ServiceException {
try {
MqttMessage message = new MqttMessage(payload.getBytes());
message.setQos(1);
if(!publisher.isConnected()){
publisher.connect();
}
publisher.publish(topic, message);
Logger.displayInfo("Published message: " + payload);
} catch (MqttException e) {
throw new ServiceException("Unable to publish message", e);
} finally {
try{
if (publisher.isConnected()) publisher.disconnect();
} catch (MqttException e){
Logger.displayError("Failed to disconnect MQTT client: " + e.getMessage());
}
}
}
public void subscribe(String topic) throws ServiceException {
try {
MqttConnectOptions options = new MqttConnectOptions();
options.setAutomaticReconnect(true);
options.setCleanSession(true);
if(!subscriber.isConnected()){
subscriber.connect(options);
}
subscriber.subscribe(topic, 1);
Logger.displayInfo("Subscribed to topic: " + topic);
} catch (MqttException e) {
throw new ServiceException("Unable to subscribe", e);
}
}
}