Skip to content

Commit 6558bc3

Browse files
committed
add request ID's to datastorage packets.
1 parent e82358b commit 6558bc3

File tree

8 files changed

+86
-35
lines changed

8 files changed

+86
-35
lines changed

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

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public abstract class ArchipelagoClient {
4545
private final EventManager eventManager;
4646
private final DeathLink deathLink;
4747

48-
public static final Version protocolVersion = new Version(0,3,7);
48+
public static final Version protocolVersion = new Version(0, 3, 7);
4949

5050
private int team;
5151
private int slot;
@@ -72,9 +72,9 @@ public void setGame(String game) {
7272
}
7373

7474
public void setTags(Set<String> tags) {
75-
if(!this.tags.equals(tags)) {
75+
if (!this.tags.equals(tags)) {
7676
this.tags = tags;
77-
if(isConnected()) {
77+
if (isConnected()) {
7878
ConnectUpdatePacket packet = new ConnectUpdatePacket();
7979
packet.tags = this.tags;
8080
archipelagoWebSocket.sendPacket(packet);
@@ -83,9 +83,9 @@ public void setTags(Set<String> tags) {
8383
}
8484

8585
public void addTag(String tag) {
86-
if(!this.tags.contains(tag)) {
86+
if (!this.tags.contains(tag)) {
8787
tags.add(tag);
88-
if(isConnected()) {
88+
if (isConnected()) {
8989
ConnectUpdatePacket packet = new ConnectUpdatePacket();
9090
packet.tags = this.tags;
9191
archipelagoWebSocket.sendPacket(packet);
@@ -94,9 +94,9 @@ public void addTag(String tag) {
9494
}
9595

9696
public void removeTag(String tag) {
97-
if(this.tags.contains(tag)) {
97+
if (this.tags.contains(tag)) {
9898
tags.remove(tag);
99-
if(isConnected()) {
99+
if (isConnected()) {
100100
ConnectUpdatePacket packet = new ConnectUpdatePacket();
101101
packet.tags = this.tags;
102102
archipelagoWebSocket.sendPacket(packet);
@@ -118,8 +118,7 @@ private void loadDataPackage() {
118118
LOGGER.info("no dataPackage found creating a new one.");
119119
dataPackage = new DataPackage();
120120
saveDataPackage();
121-
}
122-
catch (ClassNotFoundException e) {
121+
} catch (ClassNotFoundException e) {
123122
LOGGER.warning("uhh ohh failed to absorb dataPackage.");
124123
dataPackage = new DataPackage();
125124
}
@@ -144,7 +143,7 @@ void saveDataPackage() {
144143
objectOut.close();
145144

146145
} catch (IOException e) {
147-
LOGGER.log(Level.WARNING,"unable to save DataPackage.",e);
146+
LOGGER.log(Level.WARNING, "unable to save DataPackage.", e);
148147
}
149148
}
150149

@@ -230,16 +229,17 @@ public void connect(URI address, boolean allowDowngrade) {
230229
}
231230

232231
public void sendChat(String message) {
233-
if(archipelagoWebSocket == null)
232+
if (archipelagoWebSocket == null)
234233
return;
235-
if(archipelagoWebSocket.isAuthenticated()) {
234+
if (archipelagoWebSocket.isAuthenticated()) {
236235
archipelagoWebSocket.sendChat(message);
237236
}
238237
}
239238

240239
public boolean checkLocation(long locationID) {
241240
return locationManager.checkLocation(locationID);
242241
}
242+
243243
public boolean checkLocations(Collection<Long> locationIDs) {
244244
return locationManager.checkLocations(locationIDs);
245245
}
@@ -304,9 +304,9 @@ public ItemManager getItemManager() {
304304
}
305305

306306
public void setGameState(ClientStatus status) {
307-
if(archipelagoWebSocket == null)
307+
if (archipelagoWebSocket == null)
308308
return;
309-
if(archipelagoWebSocket.isAuthenticated())
309+
if (archipelagoWebSocket.isAuthenticated())
310310
archipelagoWebSocket.sendPacket(new StatusUpdatePacket(status));
311311
}
312312

@@ -315,9 +315,9 @@ public void sync() {
315315
}
316316

317317
public void sendBounce(BouncePacket bouncePacket) {
318-
if(archipelagoWebSocket == null)
318+
if (archipelagoWebSocket == null)
319319
return;
320-
if(archipelagoWebSocket.isAuthenticated())
320+
if (archipelagoWebSocket.isAuthenticated())
321321
archipelagoWebSocket.sendPacket(bouncePacket);
322322
}
323323

@@ -343,24 +343,26 @@ public EventManager getEventManager() {
343343

344344
/**
345345
* Uses DataStorage to save a value on the AP server.
346+
*
346347
* @param setPacket
347348
*/
348-
public void dataStorageSet(SetPacket setPacket) {
349-
if(archipelagoWebSocket == null)
350-
return;
351-
if(archipelagoWebSocket.isAuthenticated())
352-
archipelagoWebSocket.sendPacket(setPacket);
349+
public int dataStorageSet(SetPacket setPacket) {
350+
if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
351+
return 0;
352+
353+
archipelagoWebSocket.sendPacket(setPacket);
354+
return setPacket.getRequestID();
353355
}
354356

355357
/**
356358
* Registers to receive updates of when a key in the Datastorage has been changed on the server.
357-
* @param keys
359+
*
360+
* @param keys List of Keys to be notified of.
358361
*/
359362
public void dataStorageSetNotify(ArrayList<String> keys) {
360-
if(archipelagoWebSocket == null)
363+
if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
361364
return;
362-
if(archipelagoWebSocket.isAuthenticated())
363-
archipelagoWebSocket.sendPacket(new SetNotifyPacket(keys));
365+
archipelagoWebSocket.sendPacket(new SetNotifyPacket(keys));
364366
}
365367

366368
/**
@@ -389,12 +391,15 @@ public void dataStorageSetNotify(ArrayList<String> keys) {
389391
* <td> item_name_groups belonging to the requested game. </td>
390392
* </tr>
391393
* </table>
394+
*
392395
* @param keys a list of keys to retrieve values for
393396
*/
394-
public void dataStorageGet(Collection<String> keys) {
395-
if(archipelagoWebSocket == null)
396-
return;
397-
if(archipelagoWebSocket.isAuthenticated())
398-
archipelagoWebSocket.sendPacket(new GetPacket(keys));
397+
public int dataStorageGet(Collection<String> keys) {
398+
if (archipelagoWebSocket == null || !archipelagoWebSocket.isAuthenticated())
399+
return 0;
400+
401+
GetPacket getPacket = new GetPacket(keys);
402+
archipelagoWebSocket.sendPacket(getPacket);
403+
return getPacket.getRequestID();
399404
}
400405
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,11 @@ public void onMessage(String message) {
191191
break;
192192
case Retrieved:
193193
RetrievedPacket retrievedPacket = gson.fromJson(packet, RetrievedPacket.class);
194-
archipelagoClient.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys));
194+
archipelagoClient.getEventManager().callEvent(new RetrievedEvent(retrievedPacket.keys, retrievedPacket.requestID));
195195
break;
196196
case SetReply:
197197
SetReplyPacket setReplyPacket = gson.fromJson(packet, SetReplyPacket.class);
198-
archipelagoClient.getEventManager().callEvent(new SetReplyEvent(setReplyPacket.key, setReplyPacket.value, setReplyPacket.original_Value));
198+
archipelagoClient.getEventManager().callEvent(new SetReplyEvent(setReplyPacket.key, setReplyPacket.value, setReplyPacket.original_Value, packet.getAsJsonObject().get("value"), setReplyPacket.requestID));
199199
break;
200200
}
201201
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
public class RetrievedEvent implements Event {
66

77
public HashMap<String, Object> data;
8-
public RetrievedEvent(HashMap<String, Object> keys) {
8+
private final int requestID;
9+
public RetrievedEvent(HashMap<String, Object> keys , int requestID) {
910
data = keys;
11+
this.requestID = requestID;
1012
}
1113

1214
public int getInt(String key) {
@@ -36,4 +38,8 @@ public Object getObject(String key) {
3638
public boolean containsKey(String key) {
3739
return data.containsKey(key);
3840
}
41+
42+
public int getRequestID() {
43+
return requestID;
44+
}
3945
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package gg.archipelago.client.events;
22

3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonElement;
35
import com.google.gson.annotations.SerializedName;
6+
import com.google.gson.internal.Primitives;
47

58
public class SetReplyEvent implements Event {
69
@SerializedName("key")
@@ -10,9 +13,24 @@ public class SetReplyEvent implements Event {
1013
@SerializedName("original_value")
1114
public Object original_value;
1215

13-
public SetReplyEvent(String key, Object value, Object original_value) {
16+
private final int requestID;
17+
18+
private final JsonElement jsonValue;
19+
20+
public SetReplyEvent(String key, Object value, Object original_value, JsonElement jsonValue, int requestID) {
1421
this.key=key;
1522
this.value=value;
1623
this.original_value=original_value;
24+
this.jsonValue = jsonValue;
25+
this.requestID = requestID;
26+
}
27+
28+
public <T> T getValueAsObject(Class<T> classOfT) {
29+
Object value = new Gson().fromJson(jsonValue,classOfT);
30+
return Primitives.wrap(classOfT).cast(value);
31+
}
32+
33+
public int getRequestID() {
34+
return requestID;
1735
}
1836
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import gg.archipelago.client.network.APPacketType;
66

77
import java.util.Collection;
8+
import java.util.Random;
89

910
/**
1011
* Used to request a single or multiple values from the server's data storage, see the
@@ -19,9 +20,16 @@ public class GetPacket extends APPacket {
1920
@SerializedName("keys")
2021
public Collection<String> keys;
2122

23+
@SerializedName("request_id")
24+
private int requestID;
2225

2326
public GetPacket(Collection<String> keys) {
2427
super(APPacketType.Get);
2528
this.keys = keys;
29+
requestID = new Random().nextInt(Integer.MAX_VALUE);
30+
}
31+
32+
public int getRequestID() {
33+
return requestID;
2634
}
2735
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package gg.archipelago.client.network.client;
22

3+
import com.google.gson.annotations.Expose;
34
import com.google.gson.annotations.SerializedName;
45
import gg.archipelago.client.network.APPacket;
56
import gg.archipelago.client.network.APPacketType;
67

78
import java.util.ArrayList;
9+
import java.util.Random;
810

911
public class SetPacket extends APPacket {
1012

@@ -34,12 +36,14 @@ public class SetPacket extends APPacket {
3436
@SerializedName("operations")
3537
public ArrayList<DataStorageOperation> operations = new ArrayList<>();
3638

39+
@SerializedName("request_id")
40+
private int requestID;
3741

3842
public SetPacket(String key, Object defaultValue) {
3943
super(APPacketType.Set);
4044
this.key = key;
4145
this.defaultValue = defaultValue;
42-
46+
requestID = new Random().nextInt(Integer.MAX_VALUE);
4347
}
4448

4549
/**
@@ -52,6 +56,10 @@ public void addDataStorageOperation(Operation operation, Object value) {
5256
operations.add(new DataStorageOperation(operation, value));
5357
}
5458

59+
public int getRequestID() {
60+
return requestID;
61+
}
62+
5563
/**
5664
* A DataStorageOperation manipulates or alters the value of a key in the servers data storage.
5765
* If the operation transforms the value from one state to another then the current value

src/main/java/gg/archipelago/client/network/server/RetrievedPacket.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public class RetrievedPacket extends APPacket {
1111
@SerializedName("keys")
1212
public HashMap<String, Object> keys;
1313

14+
@SerializedName("request_id")
15+
public int requestID;
16+
1417
public RetrievedPacket() {
1518
super(APPacketType.Retrieved);
1619
}

src/main/java/gg/archipelago/client/network/server/SetReplyPacket.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ public class SetReplyPacket extends APPacket {
1111
public Object value;
1212
@SerializedName("original_value")
1313
public Object original_Value;
14+
@SerializedName("request_id")
15+
public int requestID;
1416

1517
public SetReplyPacket() {
1618
super(APPacketType.SetReply);
1719
}
20+
1821
}

0 commit comments

Comments
 (0)