Skip to content

Commit dbed079

Browse files
committed
Simplify callback dispatching
1 parent 2dcf597 commit dbed079

File tree

2 files changed

+97
-168
lines changed

2 files changed

+97
-168
lines changed

SteamKit2/SteamKit2/Steam/Handlers/SteamApps/Callbacks.cs

+75-30
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Collections.ObjectModel;
1010
using System.IO;
1111
using System.Linq;
12+
using System.Text;
1213
using SteamKit2.Internal;
1314

1415
namespace SteamKit2
@@ -146,8 +147,11 @@ internal License( CMsgClientLicenseList.License license )
146147
public ReadOnlyCollection<License> LicenseList { get; private set; }
147148

148149

149-
internal LicenseListCallback( CMsgClientLicenseList msg )
150+
internal LicenseListCallback( IPacketMsg packetMsg )
150151
{
152+
var licenseList = new ClientMsgProtobuf<CMsgClientLicenseList>( packetMsg );
153+
var msg = licenseList.Body;
154+
151155
this.Result = ( EResult )msg.eresult;
152156

153157
var list = msg.licenses
@@ -181,9 +185,12 @@ public sealed class FreeLicenseCallback : CallbackMsg
181185
/// <value>List of granted packages.</value>
182186
public ReadOnlyCollection<uint> GrantedPackages { get; private set; }
183187

184-
internal FreeLicenseCallback( JobID jobID, CMsgClientRequestFreeLicenseResponse msg )
188+
internal FreeLicenseCallback( IPacketMsg packetMsg )
185189
{
186-
this.JobID = jobID;
190+
var grantedLicenses = new ClientMsgProtobuf<CMsgClientRequestFreeLicenseResponse>( packetMsg );
191+
var msg = grantedLicenses.Body;
192+
193+
this.JobID = grantedLicenses.TargetJobID;
187194

188195
this.Result = ( EResult )msg.eresult;
189196

@@ -211,10 +218,12 @@ public sealed class AppOwnershipTicketCallback : CallbackMsg
211218
/// </summary>
212219
public byte[] Ticket { get; private set; }
213220

214-
215-
internal AppOwnershipTicketCallback( JobID jobID, CMsgClientGetAppOwnershipTicketResponse msg )
221+
internal AppOwnershipTicketCallback( IPacketMsg packetMsg )
216222
{
217-
this.JobID = jobID;
223+
var ticketResponse = new ClientMsgProtobuf<CMsgClientGetAppOwnershipTicketResponse>( packetMsg );
224+
var msg = ticketResponse.Body;
225+
226+
this.JobID = ticketResponse.TargetJobID;
218227

219228
this.Result = ( EResult )msg.eresult;
220229
this.AppID = msg.app_id;
@@ -242,9 +251,12 @@ public sealed class DepotKeyCallback : CallbackMsg
242251
public byte[] DepotKey { get; private set; }
243252

244253

245-
internal DepotKeyCallback( JobID jobID, CMsgClientGetDepotDecryptionKeyResponse msg )
254+
internal DepotKeyCallback( IPacketMsg packetMsg )
246255
{
247-
JobID = jobID;
256+
var keyResponse = new ClientMsgProtobuf<CMsgClientGetDepotDecryptionKeyResponse>( packetMsg );
257+
var msg = keyResponse.Body;
258+
259+
JobID = keyResponse.TargetJobID;
248260

249261
Result = ( EResult )msg.eresult;
250262
DepotID = msg.depot_id;
@@ -270,15 +282,19 @@ public sealed class LegacyGameKeyCallback : CallbackMsg
270282
/// </summary>
271283
public string? Key { get; private set; }
272284

273-
internal LegacyGameKeyCallback( JobID jobID, MsgClientGetLegacyGameKeyResponse msg, byte[] payload )
285+
internal LegacyGameKeyCallback( IPacketMsg packetMsg )
274286
{
275-
JobID = jobID;
287+
var keyResponse = new ClientMsg<MsgClientGetLegacyGameKeyResponse>( packetMsg );
288+
var msg = keyResponse.Body;
289+
290+
JobID = keyResponse.TargetJobID;
276291
AppID = msg.AppId;
277292
Result = msg.Result;
278293

279294
if ( msg.Length > 0 )
280295
{
281296
var length = ( int )msg.Length - 1;
297+
var payload = keyResponse.Payload.ToArray();
282298
Key = System.Text.Encoding.ASCII.GetString( payload, 0, length );
283299
}
284300
}
@@ -299,8 +315,11 @@ public sealed class GameConnectTokensCallback : CallbackMsg
299315
public ReadOnlyCollection<byte[]> Tokens { get; private set; }
300316

301317

302-
internal GameConnectTokensCallback( CMsgClientGameConnectTokens msg )
318+
internal GameConnectTokensCallback( IPacketMsg packetMsg )
303319
{
320+
var gcTokens = new ClientMsgProtobuf<CMsgClientGameConnectTokens>( packetMsg );
321+
var msg = gcTokens.Body;
322+
304323
TokensToKeep = msg.max_tokens_to_keep;
305324
Tokens = new ReadOnlyCollection<byte[]>( msg.tokens );
306325
}
@@ -317,12 +336,14 @@ public sealed class VACStatusCallback : CallbackMsg
317336
public ReadOnlyCollection<uint> BannedApps { get; private set; }
318337

319338

320-
internal VACStatusCallback( MsgClientVACBanStatus msg, byte[] payload )
339+
internal VACStatusCallback( IPacketMsg packetMsg )
321340
{
341+
var vacStatus = new ClientMsg<MsgClientVACBanStatus>( packetMsg );
342+
var msg = vacStatus.Body;
343+
322344
var tempList = new List<uint>();
323345

324-
using var ms = new MemoryStream( payload );
325-
using var br = new BinaryReader( ms );
346+
using var br = new BinaryReader( vacStatus.Payload, Encoding.UTF8, leaveOpen: true );
326347
for ( int x = 0; x < msg.NumBans; x++ )
327348
{
328349
tempList.Add( br.ReadUInt32() );
@@ -355,9 +376,12 @@ public sealed class PICSTokensCallback : CallbackMsg
355376
public Dictionary<uint, ulong> AppTokens { get; private set; }
356377

357378

358-
internal PICSTokensCallback( JobID jobID, CMsgClientPICSAccessTokenResponse msg )
379+
internal PICSTokensCallback( IPacketMsg packetMsg )
359380
{
360-
JobID = jobID;
381+
var tokensResponse = new ClientMsgProtobuf<CMsgClientPICSAccessTokenResponse>( packetMsg );
382+
var msg = tokensResponse.Body;
383+
384+
JobID = tokensResponse.TargetJobID;
361385

362386
PackageTokensDenied = new ReadOnlyCollection<uint>( msg.package_denied_tokens );
363387
AppTokensDenied = new ReadOnlyCollection<uint>( msg.app_denied_tokens );
@@ -444,9 +468,12 @@ internal PICSChangeData( CMsgClientPICSChangesSinceResponse.PackageChange change
444468
public Dictionary<uint, PICSChangeData> AppChanges { get; private set; }
445469

446470

447-
internal PICSChangesCallback( JobID jobID, CMsgClientPICSChangesSinceResponse msg )
471+
internal PICSChangesCallback( IPacketMsg packetMsg )
448472
{
449-
JobID = jobID;
473+
var changesResponse = new ClientMsgProtobuf<CMsgClientPICSChangesSinceResponse>( packetMsg );
474+
var msg = changesResponse.Body;
475+
476+
JobID = changesResponse.TargetJobID;
450477

451478
LastChangeNumber = msg.since_change_number;
452479
CurrentChangeNumber = msg.current_change_number;
@@ -591,9 +618,12 @@ internal PICSProductInfo( CMsgClientPICSProductInfoResponse.PackageInfo package_
591618
public Dictionary<uint, PICSProductInfo> Packages { get; private set; }
592619

593620

594-
internal PICSProductInfoCallback( JobID jobID, CMsgClientPICSProductInfoResponse msg )
621+
internal PICSProductInfoCallback( IPacketMsg packetMsg )
595622
{
596-
JobID = jobID;
623+
var productResponse = new ClientMsgProtobuf<CMsgClientPICSProductInfoResponse>( packetMsg );
624+
var msg = productResponse.Body;
625+
626+
JobID = productResponse.TargetJobID;
597627

598628
MetaDataOnly = msg.meta_data_only;
599629
ResponsePending = msg.response_pending;
@@ -637,8 +667,11 @@ public sealed class GuestPassListCallback : CallbackMsg
637667
public List<KeyValue> GuestPasses { get; set; }
638668

639669

640-
internal GuestPassListCallback( MsgClientUpdateGuestPassesList msg, Stream payload )
670+
internal GuestPassListCallback( IPacketMsg packetMsg )
641671
{
672+
var guestPasses = new ClientMsg<MsgClientUpdateGuestPassesList>( packetMsg );
673+
var msg = guestPasses.Body;
674+
642675
Result = msg.Result;
643676
CountGuestPassesToGive = msg.CountGuestPassesToGive;
644677
CountGuestPassesToRedeem = msg.CountGuestPassesToRedeem;
@@ -647,7 +680,7 @@ internal GuestPassListCallback( MsgClientUpdateGuestPassesList msg, Stream paylo
647680
for ( int i = 0; i < CountGuestPassesToGive + CountGuestPassesToRedeem; i++ )
648681
{
649682
var kv = new KeyValue();
650-
kv.TryReadAsBinary( payload );
683+
kv.TryReadAsBinary( guestPasses.Payload );
651684
GuestPasses.Add( kv );
652685
}
653686
}
@@ -672,9 +705,12 @@ public sealed class RedeemGuestPassResponseCallback : CallbackMsg
672705
public uint MustOwnAppID { get; set; }
673706

674707

675-
internal RedeemGuestPassResponseCallback( JobID jobID, CMsgClientRedeemGuestPassResponse msg )
708+
internal RedeemGuestPassResponseCallback( IPacketMsg packetMsg )
676709
{
677-
JobID = jobID;
710+
var redeemedGuestPass = new ClientMsgProtobuf<CMsgClientRedeemGuestPassResponse>( packetMsg );
711+
var msg = redeemedGuestPass.Body;
712+
713+
JobID = redeemedGuestPass.TargetJobID;
678714
Result = ( EResult )msg.eresult;
679715
PackageID = msg.package_id;
680716
MustOwnAppID = msg.must_own_appid;
@@ -700,9 +736,12 @@ public sealed class PurchaseResponseCallback : CallbackMsg
700736
public KeyValue PurchaseReceiptInfo { get; set; }
701737

702738

703-
internal PurchaseResponseCallback( JobID jobID, CMsgClientPurchaseResponse msg )
739+
internal PurchaseResponseCallback( IPacketMsg packetMsg )
704740
{
705-
JobID = jobID;
741+
var purchaseResponse = new ClientMsgProtobuf<CMsgClientPurchaseResponse>( packetMsg );
742+
var msg = purchaseResponse.Body;
743+
744+
JobID = purchaseResponse.TargetJobID;
706745
Result = ( EResult )msg.eresult;
707746
PurchaseResultDetail = ( EPurchaseResultDetail )msg.purchase_result_details;
708747
PurchaseReceiptInfo = new KeyValue();
@@ -735,9 +774,12 @@ public sealed class CDNAuthTokenCallback : CallbackMsg
735774
/// </summary>
736775
public DateTime Expiration { get; set; }
737776

738-
internal CDNAuthTokenCallback( JobID jobID, CMsgClientGetCDNAuthTokenResponse msg )
777+
internal CDNAuthTokenCallback( IPacketMsg packetMsg )
739778
{
740-
JobID = jobID;
779+
var response = new ClientMsgProtobuf<CMsgClientGetCDNAuthTokenResponse>( packetMsg );
780+
var msg = response.Body;
781+
782+
JobID = response.TargetJobID;
741783

742784
Result = ( EResult )msg.eresult;
743785
Token = msg.token;
@@ -759,9 +801,12 @@ public sealed class CheckAppBetaPasswordCallback : CallbackMsg
759801
/// </summary>
760802
public Dictionary<string, byte[]> BetaPasswords { get; private set; }
761803

762-
internal CheckAppBetaPasswordCallback( JobID jobID, CMsgClientCheckAppBetaPasswordResponse msg )
804+
internal CheckAppBetaPasswordCallback( IPacketMsg packetMsg )
763805
{
764-
JobID = jobID;
806+
var response = new ClientMsgProtobuf<CMsgClientCheckAppBetaPasswordResponse>( packetMsg );
807+
var msg = response.Body;
808+
809+
JobID = response.TargetJobID;
765810

766811
Result = ( EResult )msg.eresult;
767812
BetaPasswords = [];

0 commit comments

Comments
 (0)