Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import in.dragonbra.javasteam.base.ClientMsgProtobuf;
import in.dragonbra.javasteam.base.IPacketMsg;
import in.dragonbra.javasteam.enums.EMsg;
import in.dragonbra.javasteam.generated.MsgClientGetLegacyGameKey;
import in.dragonbra.javasteam.generated.MsgClientGetLegacyGameKeyResponse;
import in.dragonbra.javasteam.generated.MsgClientUpdateGuestPassesList;
import in.dragonbra.javasteam.generated.MsgClientVACBanStatus;
import in.dragonbra.javasteam.handlers.ClientMsgHandler;
Expand Down Expand Up @@ -81,6 +83,12 @@ public void accept(IPacketMsg packetMsg) {
handleDepotKeyResponse(packetMsg);
}
});
dispatchMap.put(EMsg.ClientGetLegacyGameKeyResponse, new Consumer<IPacketMsg>() {
@Override
public void accept(IPacketMsg packetMsg) {
handleLegacyGameKeyResponse(packetMsg);
}
});
dispatchMap.put(EMsg.ClientPICSAccessTokenResponse, new Consumer<IPacketMsg>() {
@Override
public void accept(IPacketMsg packetMsg) {
Expand Down Expand Up @@ -487,6 +495,25 @@ public JobID checkAppBetaPassword(int app, String password) {
return jobID;
}

/**
* Request the legacy CD game keys for the requested appid.
*
* @param appId The AppID to request game keys for.
* @return The Job ID of the request. This can be used to find the appropriate {@link LegacyGameKeyCallback}
*/
public JobID getLegacyGameKey(int appId) {
ClientMsg<MsgClientGetLegacyGameKey> request = new ClientMsg<>(MsgClientGetLegacyGameKey.class);
JobID jobID = client.getNextJobID();
request.setSourceJobID(jobID);

request.setSourceJobID(jobID);
request.getBody().setAppId(appId);

client.send(request);

return jobID;
}

@Override
public void handleMsg(IPacketMsg packetMsg) {
if (packetMsg == null) {
Expand Down Expand Up @@ -520,6 +547,13 @@ private void handleGameConnectTokens(IPacketMsg packetMsg) {
client.postCallback(new GameConnectTokensCallback(gcTokens.getBody()));
}

private void handleLegacyGameKeyResponse(IPacketMsg packetMsg) {
ClientMsg<MsgClientGetLegacyGameKeyResponse> keyResponse =
new ClientMsg<>(MsgClientGetLegacyGameKeyResponse.class, packetMsg);

client.postCallback(new LegacyGameKeyCallback(keyResponse.getTargetJobID(), keyResponse.getBody(), keyResponse.getPayload().toByteArray()));
}

private void handleLicenseList(IPacketMsg packetMsg) {
ClientMsgProtobuf<CMsgClientLicenseList.Builder> licenseList =
new ClientMsgProtobuf<>(CMsgClientLicenseList.class, packetMsg);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package in.dragonbra.javasteam.steam.handlers.steamapps.callback;

import in.dragonbra.javasteam.enums.EResult;
import in.dragonbra.javasteam.generated.MsgClientGetLegacyGameKeyResponse;
import in.dragonbra.javasteam.steam.handlers.steamapps.SteamApps;
import in.dragonbra.javasteam.steam.steamclient.callbackmgr.CallbackMsg;
import in.dragonbra.javasteam.types.JobID;

/**
* This callback is received in response to calling {@link SteamApps#getLegacyGameKey}.
*/
public class LegacyGameKeyCallback extends CallbackMsg {

private EResult result;

private int appID;

private String key;

public LegacyGameKeyCallback(JobID jobID, MsgClientGetLegacyGameKeyResponse msg, byte[] payload) {
setJobID(jobID);
this.appID = msg.getAppId();
this.result = msg.getResult();

if (msg.getLength() > 0) {
int length = msg.getLength() - 1;
key = new String(payload, 0, length);
}
}

/**
* @return the result of requesting this game key.
*/
public EResult getResult() {
return result;
}

/**
* @return the appid that this game key is for.
*/
public int getAppID() {
return appID;
}

/**
* @return the game key.
*/
public String getKey() {
return key;
}
}
12 changes: 12 additions & 0 deletions src/main/steamd/in/dragonbra/javasteam/steammsg.steamd
Original file line number Diff line number Diff line change
Expand Up @@ -358,3 +358,15 @@ class MsgClientMarketingMessageUpdate2<EMsg::ClientMarketingMessageUpdate2>
uint marketingMessageUpdateTime;
uint count;
};

class MsgClientGetLegacyGameKey<EMsg::ClientGetLegacyGameKey>
{
uint appId;
};

class MsgClientGetLegacyGameKeyResponse<EMsg::ClientGetLegacyGameKeyResponse>
{
uint appId;
EResult result;
uint length;
};