internal PackageInfoCallback( JobID jobID, CMsgClientPackageInfoResponse msg ) { JobID = jobID; var packages = new List<Package>(); packages.AddRange( msg.packages.Select( p => new Package( p, Package.PackageStatus.OK ) ) ); packages.AddRange( msg.packages_unknown.Select( p => new Package( p, Package.PackageStatus.Unknown ) ) ); PackagesPending = msg.packages_pending; Packages = new ReadOnlyCollection<Package>( packages ); }
internal PackageInfoCallback( SteamClient client, CMsgClientPackageInfoResponse msg ) : base( client )
internal Package( CMsgClientPackageInfoResponse.Package pack, Package.PackageStatus status ) { Status = status; PackageID = pack.package_id; ChangeNumber = pack.change_number; Hash = pack.sha; Data = new KeyValue(); using ( var ms = new MemoryStream( pack.buffer ) ) using ( var br = new BinaryReader( ms ) ) { // steamclient checks this value == 1 before it attempts to read the KV from the buffer // see: CPackageInfo::UpdateFromBuffer(CSHA const&,uint,CUtlBuffer &) // todo: we've apparently ignored this with zero ill effects, but perhaps we want to respect it? br.ReadUInt32(); Data.TryReadAsBinary( ms ); } }
internal Package( CMsgClientPackageInfoResponse.Package pack, Package.PackageStatus status ) { Status = status; PackageID = pack.package_id; ChangeNumber = pack.change_number; Hash = pack.sha; Data = new KeyValue(); using ( var ms = new MemoryStream( pack.buffer ) ) using ( var br = new BinaryReader( ms ) ) { br.ReadUInt32(); // unknown uint at the beginning of the buffer Data.ReadAsBinary( ms ); } if ( Data.Children != null ) { Data = Data.Children.FirstOrDefault() ?? KeyValue.Invalid; } }