summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/net/runicast/ReliableUnicast.java
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-18 13:43:05 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-18 13:43:05 -0500
commitf7fe7601083b7b0cb7bc420004ad574726bfe613 (patch)
tree72773bc7dd2b27799d47162676c33fa19984e57f /src/main/java/derms/net/runicast/ReliableUnicast.java
parenta9c2ee3c3c4a8791529b9ea448ed96d9aa7b03da (diff)
downloadsoen423-f7fe7601083b7b0cb7bc420004ad574726bfe613.zip
rename il to runicast
Diffstat (limited to 'src/main/java/derms/net/runicast/ReliableUnicast.java')
-rw-r--r--src/main/java/derms/net/runicast/ReliableUnicast.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/java/derms/net/runicast/ReliableUnicast.java b/src/main/java/derms/net/runicast/ReliableUnicast.java
new file mode 100644
index 0000000..9e0296f
--- /dev/null
+++ b/src/main/java/derms/net/runicast/ReliableUnicast.java
@@ -0,0 +1,38 @@
+package derms.net.runicast;
+
+import java.io.IOException;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+
+/** TODO */
+public class ReliableUnicast {
+ public static Connection listen(InetAddress laddr, int lport) {
+ // TODO
+ }
+
+ public static Connection connect(InetAddress raddr, int rport) throws IOException {
+ DatagramSocket sock = new DatagramSocket();
+ sock.connect(raddr, rport);
+ InetAddress laddr = sock.getLocalAddress();
+ int lport = sock.getLocalPort();
+ Connection conn = new Connection(laddr, lport, raddr, rport, sock);
+
+ conn.sendCtl(Type.sync, conn.id0, 0);
+ conn.state.set(State.syncer);
+ conn.start();
+ while (conn.state.get() == State.syncer)
+ Thread.yield();
+
+ State state = conn.state.get();
+ switch (state) {
+ case established:
+ return conn;
+ case closed:
+ conn.close();
+ throw new IOException("failed to connect to " + raddr + ":" + rport);
+ default:
+ conn.close();
+ throw new IllegalStateException("illegal connection state: " + state);
+ }
+ }
+}