diff options
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); + } + } +} |