Skip to content

Commit 24bbee8

Browse files
Merge pull request #607 from petethepossum/master
Friends functionality fixed / added to, /msg fixed to use correct "HypixelDataPlayer"
2 parents 6c3d7fd + 44aeb1b commit 24bbee8

18 files changed

Lines changed: 733 additions & 28 deletions

File tree

commons/src/main/java/net/swofty/commons/friend/events/response/FriendListResponseEvent.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public String serialize(FriendListResponseEvent value) {
4848
entryJson.put("nickname", entry.nickname != null ? entry.nickname : JSONObject.NULL);
4949
entryJson.put("isBest", entry.isBest);
5050
entryJson.put("isOnline", entry.isOnline);
51+
entryJson.put("lastSeen", entry.lastSeen);
52+
entryJson.put("friendSince", entry.friendSince);
53+
entryJson.put("server", entry.server != null ? entry.server : JSONObject.NULL);
5154
friendsArray.put(entryJson);
5255
}
5356
json.put("friends", friendsArray);
@@ -71,7 +74,10 @@ public FriendListResponseEvent deserialize(String json) {
7174
entryJson.getString("name"),
7275
entryJson.isNull("nickname") ? null : entryJson.getString("nickname"),
7376
entryJson.getBoolean("isBest"),
74-
entryJson.getBoolean("isOnline")
77+
entryJson.getBoolean("isOnline"),
78+
entryJson.optLong("lastSeen", 0L),
79+
entryJson.optLong("friendSince", 0L),
80+
entryJson.isNull("server") ? null : entryJson.getString("server")
7581
));
7682
}
7783

@@ -98,13 +104,19 @@ public static class FriendListEntry {
98104
private final String nickname;
99105
private final boolean isBest;
100106
private final boolean isOnline;
107+
private final long lastSeen;
108+
private final long friendSince;
109+
private final String server;
101110

102-
public FriendListEntry(UUID uuid, String name, String nickname, boolean isBest, boolean isOnline) {
111+
public FriendListEntry(UUID uuid, String name, String nickname, boolean isBest, boolean isOnline, long lastSeen, long friendSince, String server) {
103112
this.uuid = uuid;
104113
this.name = name;
105114
this.nickname = nickname;
106115
this.isBest = isBest;
107116
this.isOnline = isOnline;
117+
this.lastSeen = lastSeen;
118+
this.friendSince = friendSince;
119+
this.server = server;
108120
}
109121
}
110122
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package net.swofty.commons.presence;
2+
3+
import lombok.Getter;
4+
import net.swofty.commons.protocol.Serializer;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
@Getter
10+
public class PresenceInfo {
11+
private final UUID uuid;
12+
private final boolean online;
13+
private final String serverType;
14+
private final String serverId;
15+
private final long lastSeen;
16+
17+
public PresenceInfo(UUID uuid, boolean online, String serverType, String serverId, long lastSeen) {
18+
this.uuid = uuid;
19+
this.online = online;
20+
this.serverType = serverType;
21+
this.serverId = serverId;
22+
this.lastSeen = lastSeen;
23+
}
24+
25+
public static Serializer<PresenceInfo> getSerializer() {
26+
return new Serializer<>() {
27+
@Override
28+
public String serialize(PresenceInfo value) {
29+
JSONObject json = new JSONObject();
30+
json.put("uuid", value.uuid.toString());
31+
json.put("online", value.online);
32+
json.put("serverType", value.serverType != null ? value.serverType : JSONObject.NULL);
33+
json.put("serverId", value.serverId != null ? value.serverId : JSONObject.NULL);
34+
json.put("lastSeen", value.lastSeen);
35+
return json.toString();
36+
}
37+
38+
@Override
39+
public PresenceInfo deserialize(String json) {
40+
JSONObject jsonObject = new JSONObject(json);
41+
return new PresenceInfo(
42+
UUID.fromString(jsonObject.getString("uuid")),
43+
jsonObject.getBoolean("online"),
44+
jsonObject.isNull("serverType") ? null : jsonObject.getString("serverType"),
45+
jsonObject.isNull("serverId") ? null : jsonObject.getString("serverId"),
46+
jsonObject.getLong("lastSeen")
47+
);
48+
}
49+
50+
@Override
51+
public PresenceInfo clone(PresenceInfo value) {
52+
return new PresenceInfo(value.uuid, value.online, value.serverType, value.serverId, value.lastSeen);
53+
}
54+
};
55+
}
56+
}
57+
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package net.swofty.commons.protocol.objects.presence;
2+
3+
import net.swofty.commons.presence.PresenceInfo;
4+
import net.swofty.commons.protocol.ProtocolObject;
5+
import net.swofty.commons.protocol.Serializer;
6+
import org.json.JSONArray;
7+
import org.json.JSONObject;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.UUID;
12+
13+
public class GetPresenceBulkProtocolObject extends ProtocolObject<
14+
GetPresenceBulkProtocolObject.GetPresenceBulkMessage,
15+
GetPresenceBulkProtocolObject.GetPresenceBulkResponse> {
16+
17+
@Override
18+
public Serializer<GetPresenceBulkMessage> getSerializer() {
19+
return new Serializer<>() {
20+
@Override
21+
public String serialize(GetPresenceBulkMessage value) {
22+
JSONArray array = new JSONArray();
23+
for (UUID uuid : value.uuids) {
24+
array.put(uuid.toString());
25+
}
26+
JSONObject json = new JSONObject();
27+
json.put("uuids", array);
28+
return json.toString();
29+
}
30+
31+
@Override
32+
public GetPresenceBulkMessage deserialize(String json) {
33+
JSONObject obj = new JSONObject(json);
34+
JSONArray array = obj.getJSONArray("uuids");
35+
List<UUID> ids = new ArrayList<>();
36+
for (int i = 0; i < array.length(); i++) {
37+
ids.add(UUID.fromString(array.getString(i)));
38+
}
39+
return new GetPresenceBulkMessage(ids);
40+
}
41+
42+
@Override
43+
public GetPresenceBulkMessage clone(GetPresenceBulkMessage value) {
44+
return new GetPresenceBulkMessage(new ArrayList<>(value.uuids));
45+
}
46+
};
47+
}
48+
49+
@Override
50+
public Serializer<GetPresenceBulkResponse> getReturnSerializer() {
51+
return new Serializer<>() {
52+
@Override
53+
public String serialize(GetPresenceBulkResponse value) {
54+
JSONArray array = new JSONArray();
55+
for (PresenceInfo info : value.presence()) {
56+
array.put(new JSONObject(PresenceInfo.getSerializer().serialize(info)));
57+
}
58+
JSONObject json = new JSONObject();
59+
json.put("presence", array);
60+
return json.toString();
61+
}
62+
63+
@Override
64+
public GetPresenceBulkResponse deserialize(String json) {
65+
JSONObject obj = new JSONObject(json);
66+
JSONArray array = obj.getJSONArray("presence");
67+
List<PresenceInfo> presence = new ArrayList<>();
68+
for (int i = 0; i < array.length(); i++) {
69+
presence.add(PresenceInfo.getSerializer().deserialize(array.getJSONObject(i).toString()));
70+
}
71+
return new GetPresenceBulkResponse(presence);
72+
}
73+
74+
@Override
75+
public GetPresenceBulkResponse clone(GetPresenceBulkResponse value) {
76+
return new GetPresenceBulkResponse(new ArrayList<>(value.presence()));
77+
}
78+
};
79+
}
80+
81+
public record GetPresenceBulkMessage(List<UUID> uuids) {}
82+
83+
public record GetPresenceBulkResponse(List<PresenceInfo> presence) {}
84+
}
85+
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package net.swofty.commons.protocol.objects.presence;
2+
3+
import net.swofty.commons.presence.PresenceInfo;
4+
import net.swofty.commons.protocol.ProtocolObject;
5+
import net.swofty.commons.protocol.Serializer;
6+
import org.json.JSONObject;
7+
8+
public class UpdatePresenceProtocolObject extends ProtocolObject<
9+
UpdatePresenceProtocolObject.UpdatePresenceMessage,
10+
UpdatePresenceProtocolObject.UpdatePresenceResponse> {
11+
12+
@Override
13+
public Serializer<UpdatePresenceMessage> getSerializer() {
14+
return new Serializer<>() {
15+
@Override
16+
public String serialize(UpdatePresenceMessage value) {
17+
JSONObject json = new JSONObject();
18+
json.put("presence", new JSONObject(PresenceInfo.getSerializer().serialize(value.presence())));
19+
return json.toString();
20+
}
21+
22+
@Override
23+
public UpdatePresenceMessage deserialize(String json) {
24+
JSONObject obj = new JSONObject(json);
25+
PresenceInfo presence = PresenceInfo.getSerializer().deserialize(obj.getJSONObject("presence").toString());
26+
return new UpdatePresenceMessage(presence);
27+
}
28+
29+
@Override
30+
public UpdatePresenceMessage clone(UpdatePresenceMessage value) {
31+
return new UpdatePresenceMessage(value.presence());
32+
}
33+
};
34+
}
35+
36+
@Override
37+
public Serializer<UpdatePresenceResponse> getReturnSerializer() {
38+
return new Serializer<>() {
39+
@Override
40+
public String serialize(UpdatePresenceResponse value) {
41+
return value.success ? "true" : "false";
42+
}
43+
44+
@Override
45+
public UpdatePresenceResponse deserialize(String json) {
46+
return new UpdatePresenceResponse(Boolean.parseBoolean(json));
47+
}
48+
49+
@Override
50+
public UpdatePresenceResponse clone(UpdatePresenceResponse value) {
51+
return new UpdatePresenceResponse(value.success);
52+
}
53+
};
54+
}
55+
56+
public record UpdatePresenceMessage(PresenceInfo presence) {}
57+
58+
public record UpdatePresenceResponse(boolean success) {}
59+
}
60+

proxy.api/src/main/java/net/swofty/proxyapi/redis/ServerOutboundMessage.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,42 @@ public static void sendMessageToService(ServiceType service,
9090
specification.channel(), message).toJSON().toString());
9191
}
9292

93+
/**
94+
* Fire-and-forget: send to a service and do not wait for or register a response.
95+
*/
96+
public static void sendMessageToServiceFireAndForget(ServiceType service,
97+
ProtocolObject specification,
98+
Object rawMessage) {
99+
UUID requestId = UUID.randomUUID();
100+
String callback = null;
101+
try {
102+
callback = RedisAPI.getInstance().getFilterId();
103+
} catch (Exception ignored) {
104+
}
105+
106+
String message = specification.translateToString(rawMessage);
107+
RedisAPI.getInstance().publishMessage(
108+
service.name(),
109+
ChannelRegistry.getFromName(specification.channel()),
110+
new ServiceProxyRequest(
111+
requestId,
112+
callback != null ? callback : "proxy",
113+
specification.channel(),
114+
message
115+
).toJSON().toString()
116+
);
117+
}
118+
119+
/**
120+
* Fire-and-forget broadcast to all service types.
121+
*/
122+
public static void sendMessageToAllServicesFireAndForget(ProtocolObject specification,
123+
Object rawMessage) {
124+
for (ServiceType serviceType : ServiceType.values()) {
125+
sendMessageToServiceFireAndForget(serviceType, specification, rawMessage);
126+
}
127+
}
128+
93129
private static String getRequestTypeName(ProtocolObject<?, ?> protocolObject) {
94130
Class<?> clazz = protocolObject.getClass();
95131
Type genericSuperclass = clazz.getGenericSuperclass();

0 commit comments

Comments
 (0)