diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 13:43:05 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 13:43:05 -0500 |
| commit | f7fe7601083b7b0cb7bc420004ad574726bfe613 (patch) | |
| tree | 72773bc7dd2b27799d47162676c33fa19984e57f /src/main/java/derms/net/runicast/ReliableUnicast.java | |
| parent | a9c2ee3c3c4a8791529b9ea448ed96d9aa7b03da (diff) | |
| download | soen423-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.java | 38 |
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); + } + } +} |