Skip to content

Commit 0787039

Browse files
committed
add invalid packet event.
add getValueAsObject to SetReplyEvent
1 parent 6558bc3 commit 0787039

File tree

8 files changed

+96
-14
lines changed

8 files changed

+96
-14
lines changed

src/main/java/gg/archipelago/client/ArchipelagoClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ public int dataStorageSet(SetPacket setPacket) {
359359
*
360360
* @param keys List of Keys to be notified of.
361361
*/
362-
public void dataStorageSetNotify(ArrayList<String> keys) {
362+
public void dataStorageSetNotify(Collection<String> keys) {
363363
if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
364364
return;
365365
archipelagoWebSocket.sendPacket(new SetNotifyPacket(keys));

src/main/java/gg/archipelago/client/ArchipelagoWebSocket.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import gg.archipelago.client.events.*;
1010
import gg.archipelago.client.helper.DeathLink;
1111
import gg.archipelago.client.network.APPacket;
12-
import gg.archipelago.client.network.APPacketType;
1312
import gg.archipelago.client.network.ConnectionResult;
1413
import gg.archipelago.client.network.client.ConnectPacket;
1514
import gg.archipelago.client.network.client.GetDataPackagePacket;
@@ -191,12 +190,17 @@ public void onMessage(String message) {
191190
break;
192191
case Retrieved:
193192
RetrievedPacket retrievedPacket = gson.fromJson(packet, RetrievedPacket.class);
194-
archipelagoClient.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys, retrievedPacket.requestID));
193+
archipelagoClient.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys, packet.getAsJsonObject().get("keys").getAsJsonObject(), retrievedPacket.requestID));
195194
break;
196195
case SetReply:
197196
SetReplyPacket setReplyPacket = gson.fromJson(packet, SetReplyPacket.class);
198197
archipelagoClient.getEventManager().callEvent(new SetReplyEvent(setReplyPacket.key, setReplyPacket.value, setReplyPacket.original_Value, packet.getAsJsonObject().get("value"), setReplyPacket.requestID));
199198
break;
199+
case InvalidPacket:
200+
InvalidPacket invalidPacket = gson.fromJson(packet, InvalidPacket.class);
201+
archipelagoClient.getEventManager().callEvent(new InvalidPacketEvent(invalidPacket.type, invalidPacket.Original_cmd, invalidPacket.text));
202+
default:
203+
200204
}
201205
}
202206
} catch (Exception e) {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package gg.archipelago.client.events;
2+
3+
public class InvalidPacketEvent implements Event {
4+
5+
private final String type;
6+
private final String originalCommand;
7+
private final String text;
8+
9+
public InvalidPacketEvent(String type, String originalCommand, String text) {
10+
this.type = type;
11+
this.text = text;
12+
this.originalCommand = originalCommand;
13+
}
14+
15+
16+
public String getType() {
17+
return type;
18+
}
19+
20+
public String getOriginalCommand() {
21+
return originalCommand;
22+
}
23+
24+
public boolean hasOriginalCommand() {
25+
return originalCommand != null;
26+
}
27+
28+
public String getText() {
29+
return text;
30+
}
31+
}

src/main/java/gg/archipelago/client/events/RetrievedEvent.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
package gg.archipelago.client.events;
22

3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.internal.Primitives;
6+
import com.google.gson.internal.bind.JsonTreeReader;
7+
8+
import java.lang.reflect.Type;
39
import java.util.HashMap;
410

511
public class RetrievedEvent implements Event {
612

713
public HashMap<String, Object> data;
814
private final int requestID;
9-
public RetrievedEvent(HashMap<String, Object> keys , int requestID) {
15+
private final JsonObject jsonValue;
16+
17+
public RetrievedEvent(HashMap<String, Object> keys, JsonObject jsonValue, int requestID) {
1018
data = keys;
19+
this.jsonValue = jsonValue;
1120
this.requestID = requestID;
1221
}
1322

@@ -24,11 +33,11 @@ public double getDouble(String key) {
2433
}
2534

2635
public String getString(String key) {
27-
return (String)data.get(key);
36+
return (String) data.get(key);
2837
}
2938

3039
public boolean getBoolean(String key) {
31-
return (boolean)data.get(key);
40+
return (boolean) data.get(key);
3241
}
3342

3443
public Object getObject(String key) {
@@ -39,6 +48,15 @@ public boolean containsKey(String key) {
3948
return data.containsKey(key);
4049
}
4150

51+
public <T> T getValueAsObject(String key, Class<T> classOfT) {
52+
Object value = new Gson().fromJson(jsonValue.get(key), classOfT);
53+
return Primitives.wrap(classOfT).cast(value);
54+
}
55+
56+
public <T> T getValueAsObject(String key, Type typeOfT) {
57+
return jsonValue == null ? null : new Gson().fromJson(new JsonTreeReader(jsonValue.get(key)), typeOfT);
58+
}
59+
4260
public int getRequestID() {
4361
return requestID;
4462
}

src/main/java/gg/archipelago/client/events/SetReplyEvent.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.google.gson.JsonElement;
55
import com.google.gson.annotations.SerializedName;
66
import com.google.gson.internal.Primitives;
7+
import com.google.gson.internal.bind.JsonTreeReader;
8+
9+
import java.lang.reflect.Type;
710

811
public class SetReplyEvent implements Event {
912
@SerializedName("key")
@@ -18,18 +21,22 @@ public class SetReplyEvent implements Event {
1821
private final JsonElement jsonValue;
1922

2023
public SetReplyEvent(String key, Object value, Object original_value, JsonElement jsonValue, int requestID) {
21-
this.key=key;
22-
this.value=value;
23-
this.original_value=original_value;
24+
this.key = key;
25+
this.value = value;
26+
this.original_value = original_value;
2427
this.jsonValue = jsonValue;
2528
this.requestID = requestID;
2629
}
2730

2831
public <T> T getValueAsObject(Class<T> classOfT) {
29-
Object value = new Gson().fromJson(jsonValue,classOfT);
32+
Object value = new Gson().fromJson(jsonValue, classOfT);
3033
return Primitives.wrap(classOfT).cast(value);
3134
}
3235

36+
public <T> T getValueAsObject(Type typeOfT) {
37+
return jsonValue == null ? null : new Gson().fromJson(new JsonTreeReader(jsonValue), typeOfT);
38+
}
39+
3340
public int getRequestID() {
3441
return requestID;
3542
}

src/main/java/gg/archipelago/client/network/APPacketType.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,7 @@ public enum APPacketType {
5050
@SerializedName("Retrieved")
5151
Retrieved,
5252
@SerializedName("SetReply")
53-
SetReply
53+
SetReply,
54+
@SerializedName("InvalidPacket")
55+
InvalidPacket
5456
}

src/main/java/gg/archipelago/client/network/client/SetNotifyPacket.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@
33
import gg.archipelago.client.network.APPacket;
44
import gg.archipelago.client.network.APPacketType;
55

6-
import java.util.ArrayList;
6+
import java.util.Collection;
77

88
public class SetNotifyPacket extends APPacket {
99

1010
/**
1111
* a list of datastorage keys to be notified upon their change.
1212
*/
13-
public ArrayList<String> keys;
14-
public SetNotifyPacket(ArrayList<String> keys) {
13+
public Collection<String> keys;
14+
15+
public SetNotifyPacket(Collection<String> keys) {
1516
super(APPacketType.SetNotify);
1617
this.keys = keys;
1718
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package gg.archipelago.client.network.server;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import gg.archipelago.client.network.APPacket;
5+
import gg.archipelago.client.network.APPacketType;
6+
7+
public class InvalidPacket extends APPacket {
8+
9+
@SerializedName("type")
10+
public String type;
11+
@SerializedName("original_cmd")
12+
public String Original_cmd;
13+
@SerializedName("text")
14+
public String text;
15+
16+
public InvalidPacket() {
17+
super(APPacketType.InvalidPacket);
18+
}
19+
}

0 commit comments

Comments
 (0)