103 lines
3.9 KiB
Java
103 lines
3.9 KiB
Java
package ch.unisg.tapas;
|
|
|
|
import ch.unisg.tapas.auctionhouse.adapter.common.clients.TapasMqttClient;
|
|
import ch.unisg.tapas.auctionhouse.adapter.in.messaging.mqtt.AuctionEventsMqttDispatcher;
|
|
import ch.unisg.tapas.auctionhouse.domain.AuctionHouseDiscovery;
|
|
import ch.unisg.tapas.auctionhouse.adapter.common.clients.WebSubSubscriber;
|
|
import ch.unisg.tapas.common.AuctionHouseResourceDirectory;
|
|
import ch.unisg.tapas.common.ConfigProperties;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
import org.eclipse.paho.client.mqttv3.MqttException;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.SpringApplication;
|
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
import org.springframework.core.env.ConfigurableEnvironment;
|
|
|
|
import java.net.URI;
|
|
import java.util.List;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/**
|
|
* Main TAPAS Auction House application.
|
|
*/
|
|
@SpringBootApplication
|
|
public class TapasAuctionHouseApplication {
|
|
private static final Logger LOGGER = LogManager.getLogger(TapasAuctionHouseApplication.class);
|
|
|
|
public static String RESOURCE_DIRECTORY = "http://localhost:3500";
|
|
public static String DEFAULT_MQTT_BROKER = "tcp://broker.hivemq.com:1883";
|
|
|
|
private static ConfigurableEnvironment ENVIRONMENT;
|
|
|
|
|
|
public static void main(String[] args) {
|
|
SpringApplication tapasAuctioneerApp = new SpringApplication(TapasAuctionHouseApplication.class);
|
|
ENVIRONMENT = tapasAuctioneerApp.run(args).getEnvironment();
|
|
|
|
// TODO Set start up of message services with config
|
|
// We will use these bootstrap methods in Week 6:
|
|
bootstrapMarketplaceWithWebSub();
|
|
bootstrapMarketplaceWithMqtt();
|
|
|
|
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
|
|
executor.scheduleAtFixedRate(crawlerRunnable, 30, 30, TimeUnit.SECONDS);
|
|
}
|
|
/**
|
|
* Discovers auction houses and subscribes to WebSub notifications
|
|
*/
|
|
private static void bootstrapMarketplaceWithWebSub() {
|
|
discoverAuctionHouseEndpoints();
|
|
|
|
// WebSubSubscriber subscriber = new WebSubSubscriber();
|
|
|
|
// for (String endpoint : auctionHouseEndpoints) {
|
|
// subscriber.subscribeToAuctionHouseEndpoint(URI.create(endpoint));
|
|
// }
|
|
}
|
|
|
|
/**
|
|
* Connects to an MQTT broker, presumably the one used by all TAPAS groups to communicate with
|
|
* one another
|
|
*/
|
|
private static void bootstrapMarketplaceWithMqtt() {
|
|
try {
|
|
String broker = ENVIRONMENT.getProperty("mqtt.broker.uri");
|
|
LOGGER.info("Bootstrapping Mqtt");
|
|
if (broker == null) {
|
|
broker = DEFAULT_MQTT_BROKER;
|
|
LOGGER.info("No MQTT broker was set in application.propreties, going with default: "
|
|
+ DEFAULT_MQTT_BROKER);
|
|
}
|
|
|
|
AuctionEventsMqttDispatcher dispatcher = new AuctionEventsMqttDispatcher();
|
|
TapasMqttClient client = TapasMqttClient.getInstance(broker, dispatcher);
|
|
client.startReceivingMessages();
|
|
} catch (MqttException e) {
|
|
LOGGER.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
|
|
private static void discoverAuctionHouseEndpoints() {
|
|
AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory(
|
|
URI.create(RESOURCE_DIRECTORY)
|
|
);
|
|
|
|
AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints());
|
|
}
|
|
|
|
|
|
private static Runnable crawlerRunnable = new Runnable() {
|
|
public void run() {
|
|
AuctionHouseResourceDirectory rd = new AuctionHouseResourceDirectory(
|
|
URI.create(RESOURCE_DIRECTORY)
|
|
);
|
|
|
|
AuctionHouseDiscovery.getInstance().addAuctionHouseDiscoveryInformation(rd.retrieveAuctionHouseEndpoints());
|
|
}
|
|
};
|
|
}
|