From f7fe7601083b7b0cb7bc420004ad574726bfe613 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Mon, 18 Nov 2024 13:43:05 -0500 Subject: rename il to runicast --- .../java/derms/net/runicast/ReliableUnicast.java | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/derms/net/runicast/ReliableUnicast.java (limited to 'src/main/java/derms/net/runicast/ReliableUnicast.java') 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); + } + } +} -- cgit v1.2.3