m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java
diff options
context:
space:
mode:
authorMagdalena GrodziƄska <mag.grodzinska@gmail.com>2020-01-06 18:28:13 +0100
committerGitHub <noreply@github.com>2020-01-06 18:28:13 +0100
commit2feff1aa41c41008fcda2dd60c718cf09deb3fa1 (patch)
tree36c774a7b2cda6ace2d4510267d09ef0e0bba6d8 /src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java
parentedd8c9d09b89a68a0d654dd6b08dc23a22d50293 (diff)
parent360cb66d187b64ae51c792d87d0d425e73b48d0a (diff)
Merge pull request #86 from m-chrzan/UDUP
Udup
Diffstat (limited to 'src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java')
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java
new file mode 100644
index 0000000..e616c93
--- /dev/null
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/UDUP.java
@@ -0,0 +1,73 @@
+package pl.edu.mimuw.cloudatlas.agent.modules;
+
+import pl.edu.mimuw.cloudatlas.agent.messages.UDUPMessage;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.SocketException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Communication over UDP
+ *
+ * Client-server exchange pattern:
+ * server: init message
+ * client: ack message
+ *
+ * retry count
+ * retry timeout after which retry happens
+ **
+ * udp sends initiator module success/failure information
+ *
+ * we have udps on different addresses with the same ports
+ * due to ValueContact design
+ */
+
+// TODO set server port in global config - must be the same everywhere
+// TODO same with buffer size
+
+public class UDUP extends Module implements Runnable {
+ private UDUPClient client;
+ private UDUPServer server;
+ private final AtomicBoolean running;
+
+ public UDUP(InetAddress serverAddr,
+ int serverPort,
+ int timeout,
+ int bufferSize) {
+ super(ModuleType.UDP);
+ this.running = new AtomicBoolean(false);
+ try {
+ this.client = new UDUPClient(this, serverPort, bufferSize);
+ this.server = new UDUPServer(this, serverAddr, serverPort, bufferSize);
+ this.running.getAndSet(true);
+ } catch (SocketException e) {
+ e.printStackTrace();
+ this.client.close();
+ this.server.close();
+ }
+ }
+
+ public void run() {
+ System.out.println("UDP server running");
+ while(this.running.get()) {
+ try {
+ this.server.acceptMessage();
+ } catch (IOException | InterruptedException e) {
+ e.printStackTrace();
+ this.running.getAndSet(false);
+ this.server.close();
+ }
+ }
+ }
+
+ public void handleTyped(UDUPMessage event) throws InterruptedException {
+ System.out.println("UDP sending message " + event.getContent().getMessageId());
+ try {
+ this.client.sendMessage(event);
+ } catch (IOException e) {
+ System.out.println("UDP send message failed");
+ e.printStackTrace();
+ }
+ }
+}