diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 13:39:06 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-18 13:39:06 -0500 |
| commit | a9c2ee3c3c4a8791529b9ea448ed96d9aa7b03da (patch) | |
| tree | be3ac4e61312d7dcb45907234f9ca826533202b2 /src/main/java/derms/net/il/IL.java | |
| parent | 65f48a512ad63802a2031e2452f18653bf770c4c (diff) | |
| download | soen423-a9c2ee3c3c4a8791529b9ea448ed96d9aa7b03da.zip | |
il: connect()
Diffstat (limited to 'src/main/java/derms/net/il/IL.java')
| -rw-r--r-- | src/main/java/derms/net/il/IL.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/java/derms/net/il/IL.java b/src/main/java/derms/net/il/IL.java new file mode 100644 index 0000000..56c8b40 --- /dev/null +++ b/src/main/java/derms/net/il/IL.java @@ -0,0 +1,37 @@ +package derms.net.il; + +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class IL { + 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); + } + } +} |