From 47ab1236e7cf82dd8e28cab711e0f59c546190e0 Mon Sep 17 00:00:00 2001
From: Gregor Riegler <gregor.riegler@gmail.com>
Date: Thu, 13 Jun 2013 11:23:47 +0200
Subject: [PATCH] [XVSM] LoadBalancer skeleton
---
.../valesriegler/xvsm/LoadBalancerXVSM.java | 54 +++++++++++++++++++
.../xvsm/loadbalancer/LoadBalancer.java | 36 +++++++++++++
2 files changed, 90 insertions(+)
create mode 100644 src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/LoadBalancerXVSM.java
create mode 100644 src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/loadbalancer/LoadBalancer.java
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/LoadBalancerXVSM.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/LoadBalancerXVSM.java
new file mode 100644
index 0000000..ff66065
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/LoadBalancerXVSM.java
@@ -0,0 +1,54 @@
+package at.ac.tuwien.sbc.valesriegler.xvsm;
+
+
+import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+public class LoadBalancerXVSM extends AbstractXVSMConnector {
+ private static final Logger log = LoggerFactory.getLogger(LoadBalancerXVSM.class);
+
+ private int loadBalancerId;
+ private Set<Integer> pizzeriaIdentifiers;
+
+ public LoadBalancerXVSM(int id, int port) {
+ super(port);
+
+ this.loadBalancerId = id;
+
+ this.groupAgentInfoContainer = useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT);
+ }
+
+ public void listenForPizzerias() {
+ getDefaultBuilder("listenForPizzerias").setLookaround(true).setCref(groupAgentInfoContainer).setSpaceAction(new SpaceAction() {
+ @Override
+ public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
+
+ final List<PizzeriaRegistration> pizzeriaRegistrations = castEntries(entries);
+ for (PizzeriaRegistration registration : pizzeriaRegistrations) {
+ final int pizzeriaId = registration.pizzeriaSpacePort;
+ if (! pizzeriaIdentifiers.contains(pizzeriaId)) {
+ pizzeriaIdentifiers.add(pizzeriaId);
+ listenToPizzeria(pizzeriaId);
+ }
+ }
+
+ }
+ }).createSpaceListenerImpl();
+ }
+
+ private void listenToPizzeria(int pizzeriaId) {
+ getDefaultBuilder("listenForPizzeriaDeliveries").setLookaround(true).setCref(useContainerOfSpaceWithPort(Util.DELIVERY_ORDER_TAKEN, pizzeriaId)).setSpaceAction(new SpaceAction() {
+ @Override
+ public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
+ // TODO: do something when pizzeria gets new deliveries
+ }
+ }).createSpaceListenerImpl();
+ }
+
+}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/loadbalancer/LoadBalancer.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/loadbalancer/LoadBalancer.java
new file mode 100644
index 0000000..dfc29ca
--- /dev/null
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/loadbalancer/LoadBalancer.java
@@ -0,0 +1,36 @@
+package at.ac.tuwien.sbc.valesriegler.xvsm.loadbalancer;
+
+
+import at.ac.tuwien.sbc.valesriegler.common.Tuple;
+import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.xvsm.LoadBalancerXVSM;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LoadBalancer {
+ private static final String USAGE = "LoadBalancer needs exactly two integer parameters: LOADBALANCERID, LOADBALANCER-SPACE-PORT";
+ private static final Logger log = LoggerFactory.getLogger(LoadBalancer.class);
+
+ private final int pizzeriaPort;
+ private final int id;
+ private LoadBalancerXVSM xvsm;
+
+ public static void main(String[] args) {
+ final Tuple<Integer> loadBalancerIdAndSpacePort = Util.parseIdAndSpacePort(args, USAGE);
+
+ LoadBalancer loadBalancer = new LoadBalancer(loadBalancerIdAndSpacePort.fst, loadBalancerIdAndSpacePort.snd);
+ loadBalancer.start();
+ }
+
+ private void start() {
+ xvsm = new LoadBalancerXVSM(id, pizzeriaPort);
+
+ xvsm.listenForPizzerias();
+ }
+
+ public LoadBalancer(int id, int pizzeriaPort) {
+ this.id = id;
+ this.pizzeriaPort = pizzeriaPort;
+ log.info("I AM A Loadbalancer WITH ID {}", id);
+ }
+}
--
2.47.3