summaryrefslogtreecommitdiff
path: root/enigma-server/src/main/java
diff options
context:
space:
mode:
authorGravatar 2xsaiko2020-06-04 10:10:53 +0200
committerGravatar 2xsaiko2020-06-04 10:10:53 +0200
commita7163d46a6414c38c3eb4ba1e6783b3c158312db (patch)
tree564f1b78819c68c64ae14b09b85c6a120c3170fb /enigma-server/src/main/java
parentUse StandardValidation.notBlank instead of manually checking field text (diff)
downloadenigma-fork-a7163d46a6414c38c3eb4ba1e6783b3c158312db.tar.gz
enigma-fork-a7163d46a6414c38c3eb4ba1e6783b3c158312db.tar.xz
enigma-fork-a7163d46a6414c38c3eb4ba1e6783b3c158312db.zip
Move ServerAddress to enigma-server
Diffstat (limited to 'enigma-server/src/main/java')
-rw-r--r--enigma-server/src/main/java/cuchaz/enigma/network/ServerAddress.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/enigma-server/src/main/java/cuchaz/enigma/network/ServerAddress.java b/enigma-server/src/main/java/cuchaz/enigma/network/ServerAddress.java
new file mode 100644
index 0000000..45e0750
--- /dev/null
+++ b/enigma-server/src/main/java/cuchaz/enigma/network/ServerAddress.java
@@ -0,0 +1,78 @@
1package cuchaz.enigma.network;
2
3import java.util.Objects;
4
5import javax.annotation.Nullable;
6
7public class ServerAddress {
8
9 public final String address;
10 public final int port;
11
12 private ServerAddress(String address, int port) {
13 this.address = address;
14 this.port = port;
15 }
16
17 @Nullable
18 public static ServerAddress of(String address, int port) {
19 if (port < 0 || port > 65535) return null;
20 if (address == null) return null;
21 if (address.equals("")) return null;
22 if (!address.matches("[a-zA-Z0-9.:-]+")) return null;
23 if (address.startsWith("-") || address.endsWith("-")) return null;
24 return new ServerAddress(address, port);
25 }
26
27 @Nullable
28 public static ServerAddress from(String s, int defaultPort) {
29 String address;
30 int idx = s.indexOf(']');
31 if (s.startsWith("[") && idx != -1) {
32 address = s.substring(1, idx);
33 s = s.substring(idx + 1);
34 } else if (s.chars().filter(c -> c == ':').count() == 1) {
35 idx = s.indexOf(':');
36 address = s.substring(0, idx);
37 s = s.substring(idx);
38 } else {
39 address = s;
40 s = "";
41 }
42
43 int port;
44 if (s.isEmpty()) {
45 port = defaultPort;
46 } else if (s.startsWith(":")) {
47 s = s.substring(1);
48 try {
49 port = Integer.parseInt(s);
50 } catch (NumberFormatException e) {
51 return null;
52 }
53 } else {
54 return null;
55 }
56 return ServerAddress.of(address, port);
57 }
58
59 @Override
60 public boolean equals(Object o) {
61 if (this == o) return true;
62 if (o == null || getClass() != o.getClass()) return false;
63 ServerAddress that = (ServerAddress) o;
64 return port == that.port &&
65 Objects.equals(address, that.address);
66 }
67
68 @Override
69 public int hashCode() {
70 return Objects.hash(address, port);
71 }
72
73 @Override
74 public String toString() {
75 return String.format("ServerAddress { address: '%s', port: %d }", address, port);
76 }
77
78}