/
Proxy.java
155 lines (136 loc) · 3.89 KB
/
Proxy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package net.ME1312.SubServers.Client.Sponge.Network.API;
import net.ME1312.SubServers.Client.Sponge.Library.Config.YAMLSection;
import net.ME1312.SubServers.Client.Sponge.Library.Config.YAMLValue;
import net.ME1312.SubServers.Client.Sponge.Library.NamedContainer;
import net.ME1312.SubServers.Client.Sponge.Library.Util;
import net.ME1312.SubServers.Client.Sponge.Network.Packet.PacketDownloadProxyInfo;
import net.ME1312.SubServers.Client.Sponge.SubAPI;
import java.util.*;
public class Proxy {
YAMLSection raw;
long timestamp;
/**
* Create an API representation of a Proxy
*
* @param raw Raw representation of the Proxy
*/
public Proxy(YAMLSection raw) {
load(raw);
}
@Override
public boolean equals(Object obj) {
return obj instanceof Proxy && getSignature().equals(((Proxy) obj).getSignature());
}
private void load(YAMLSection raw) {
this.raw = raw;
this.timestamp = Calendar.getInstance().getTime().getTime();
}
/**
* Download a new copy of the data from SubData
*/
public void refresh() {
String name = getName();
SubAPI.getInstance().getSubDataNetwork().sendPacket(new PacketDownloadProxyInfo(name, data -> load(data.getSection("proxies").getSection(name))));
}
/**
* Gets the SubData Client
*
* @return SubData Client (or null if not linked)
*/
public String getSubData() {
return raw.getRawString("subdata", null);
}
/**
* Get the Name of this Proxy
*
* @return Name
*/
public String getName() {
return raw.getRawString("name");
}
/**
* Get the Display Name of this Proxy
*
* @return Display Name
*/
public String getDisplayName() {
return raw.getRawString("display");
}
/**
* Test if the proxy is connected to RedisBungee's server
*
* @return Redis Status
*/
public boolean isRedis() {
return raw.getBoolean("redis");
}
/**
* Get the players on this proxy (via RedisBungee)
*
* @return Player Collection
*/
public Collection<NamedContainer<String, UUID>> getPlayers() {
List<NamedContainer<String, UUID>> players = new ArrayList<NamedContainer<String, UUID>>();
for (String id : raw.getSection("players").getKeys()) {
players.add(new NamedContainer<String, UUID>(raw.getSection("players").getSection(id).getRawString("name"), UUID.fromString(id)));
}
return players;
}
/**
* Get the Signature of this Object
*
* @return Object Signature
*/
public final String getSignature() {
return raw.getRawString("signature");
}
/**
* Get the Timestamp for when the data was last refreshed
*
* @return Data Timestamp
*/
public long getTimestamp() {
return timestamp;
}
/**
* Determine if an extra value exists
*
* @param handle Handle
* @return Value Status
*/
public boolean hasExtra(String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return raw.getSection("extra").getKeys().contains(handle);
}
/**
* Get an extra value
*
* @param handle Handle
* @return Value
*/
public YAMLValue getExtra(String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return raw.getSection("extra").get(handle);
}
/**
* Get the extra value section
*
* @return Extra Value Section
*/
public YAMLSection getExtra() {
return raw.getSection("extra").clone();
}
/**
* Get the raw representation of the Proxy
*
* @return Raw Proxy
*/
public YAMLSection getRaw() {
return raw.clone();
}
@Override
@SuppressWarnings("unchecked")
public String toString() {
return raw.toJSON().toString();
}
}