internal PurchaseResponseCallback(JobID jobID, CMsgClientPurchaseResponse msg) { if ((jobID == null) || (msg == null)) { throw new ArgumentNullException(nameof(jobID) + " || " + nameof(msg)); } JobID = jobID; PurchaseResult = (EPurchaseResult)msg.purchase_result_details; if (msg.purchase_receipt_info == null) { return; } KeyValue receiptInfo = new KeyValue(); using (MemoryStream ms = new MemoryStream(msg.purchase_receipt_info)) { if (!receiptInfo.TryReadAsBinary(ms)) { return; } List <KeyValue> lineItems = receiptInfo["lineitems"].Children; Items = new Dictionary <uint, string>(lineItems.Count); foreach (KeyValue lineItem in lineItems) { uint appID = (uint)lineItem["PackageID"].AsUnsignedLong(); string gameName = lineItem["ItemDescription"].Value; gameName = WebUtility.HtmlDecode(gameName); // Apparently steam expects client to decode sent HTML Items[appID] = gameName; } } }
internal PurchaseResponseCallback(JobID jobID, CMsgClientPurchaseResponse msg) { JobID = jobID; if (msg == null) { return; } Result = (EResult)msg.eresult; PurchaseResult = (EPurchaseResult)msg.purchase_result_details; ReceiptInfo = new KeyValue(); using (MemoryStream ms = new MemoryStream(msg.purchase_receipt_info)) { if (!ReceiptInfo.TryReadAsBinary(ms)) { return; } List <KeyValue> lineItems = ReceiptInfo["lineitems"].Children; Items = new Dictionary <uint, string>(lineItems.Count); foreach (KeyValue lineItem in lineItems) { uint appID = (uint)lineItem["PackageID"].AsUnsignedLong(); string gameName = lineItem["ItemDescription"].AsString(); gameName = WebUtility.UrlDecode(gameName); // Apparently steam expects client to decode sent HTML Items.Add(appID, gameName); } } }
internal PurchaseResponseCallback(JobID jobID, CMsgClientPurchaseResponse msg) { JobID = jobID; PurchaseResultDetail = (EPurchaseResultDetail)msg.purchase_result_details; Result = (EResult)msg.eresult; if (msg.purchase_receipt_info == null) { return; } var receiptInfo = new KeyValue(); using (var ms = new MemoryStream(msg.purchase_receipt_info)) { if (!receiptInfo.TryReadAsBinary(ms)) { return; } } var lineItems = receiptInfo["lineitems"].Children; foreach (var lineItem in lineItems) { var packageID = lineItem["PackageID"].AsUnsignedInteger(); var name = lineItem["ItemDescription"].Value; if (packageID > 0) { Packages.Add(packageID, name); } } }
internal PurchaseResponseCallback(CMsgClientPurchaseResponse body) { Result = (EResult)body.eresult; ErrorCode = body.purchase_result_details; ReceiptInfo = body.purchase_receipt_info; PurchaseResult = (EPurchaseResult)ErrorCode; }
internal PurchaseResponseCallback(JobID jobID, CMsgClientPurchaseResponse msg) { if ((jobID == null) || (msg == null)) { throw new ArgumentNullException(nameof(jobID) + " || " + nameof(msg)); } JobID = jobID; PurchaseResult = (EPurchaseResult)msg.purchase_result_details; if (msg.purchase_receipt_info == null) { return; } KeyValue receiptInfo = new KeyValue(); using (MemoryStream ms = new MemoryStream(msg.purchase_receipt_info)) { if (!receiptInfo.TryReadAsBinary(ms)) { Logging.LogNullError(nameof(ms)); return; } } List <KeyValue> lineItems = receiptInfo["lineitems"].Children; if (lineItems.Count == 0) { return; } Items = new Dictionary <uint, string>(lineItems.Count); foreach (KeyValue lineItem in lineItems) { uint packageID = lineItem["PackageID"].AsUnsignedInteger(); if (packageID == 0) { // Valid, coupons have PackageID of -1 (don't ask me why) packageID = lineItem["ItemAppID"].AsUnsignedInteger(); if (packageID == 0) { Logging.LogNullError(nameof(packageID)); return; } } string gameName = lineItem["ItemDescription"].Value; if (string.IsNullOrEmpty(gameName)) { Logging.LogNullError(nameof(gameName)); return; } gameName = WebUtility.HtmlDecode(gameName); // Apparently steam expects client to decode sent HTML Items[packageID] = WebUtility.HtmlDecode(gameName); } }
internal PurchaseResponseCallback(JobID jobID, CMsgClientPurchaseResponse msg) { JobID = jobID; Result = ( EResult )msg.eresult; PurchaseResultDetail = ( EPurchaseResultDetail )msg.purchase_result_details; PurchaseReceiptInfo = new KeyValue(); if (msg.purchase_receipt_info == null) { return; } using var ms = new MemoryStream(msg.purchase_receipt_info); PurchaseReceiptInfo.TryReadAsBinary(ms); }
internal PurchaseResponseCallback(CMsgClientPurchaseResponse body) { Result = (EResult)body.eresult; PurchaseResult = (EPurchaseResult)body.purchase_result_details; using (MemoryStream ms = new MemoryStream(body.purchase_receipt_info)) { if (ReceiptInfo.TryReadAsBinary(ms)) { foreach (KeyValue lineItem in ReceiptInfo["lineitems"].Children) { Items.Add((uint)lineItem["PackageID"].AsUnsignedLong(), lineItem["ItemDescription"].AsString()); } } } }
public PurchaseResponseCallback(JobID _jobID, CMsgClientPurchaseResponse _clientPurchaseMessage) { JobID = _jobID; m_PurchaseResultDetail = (EPurchaseResultDetail)_clientPurchaseMessage.purchase_result_details; m_Result = (EResult)_clientPurchaseMessage.eresult; KeyValue receiptInfo = new KeyValue(); using (MemoryStream memoryStream = new MemoryStream(_clientPurchaseMessage.purchase_receipt_info)) { if (!receiptInfo.TryReadAsBinary(memoryStream)) { return; } } List <KeyValue> lineItems = receiptInfo["lineitems"].Children; foreach (KeyValue lineItem in lineItems) { uint packageID = lineItem["PackageID"].AsUnsignedInteger(); if (packageID == 0) { packageID = lineItem["ItemAppID"].AsUnsignedInteger(); if (packageID == 0) { return; } } string gameName = lineItem["ItemDescription"].Value; if (string.IsNullOrEmpty(gameName)) { return; } gameName = WebUtility.HtmlDecode(gameName); m_Items[packageID] = gameName; } }
internal PurchaseResponseCallback([NotNull] JobID jobID, [NotNull] CMsgClientPurchaseResponse msg) { if (jobID == null || msg == null) { throw new ArgumentNullException(nameof(jobID) + " || " + nameof(msg)); } JobID = jobID; PurchaseResultDetail = (EPurchaseResultDetail)msg.purchase_result_details; Result = (EResult)msg.eresult; if (msg.purchase_receipt_info == null) { sc.Logger.LogNullError(nameof(msg.purchase_receipt_info)); return; } var receiptInfo = new KeyValue(); using (var ms = new MemoryStream(msg.purchase_receipt_info)) { if (!receiptInfo.TryReadAsBinary(ms)) { sc.Logger.LogNullError(nameof(ms)); return; } } var lineItems = receiptInfo["lineitems"].Children; if (lineItems.Count == 0) { return; } Items = new Dictionary <uint, string>(lineItems.Count); foreach (KeyValue lineItem in lineItems) { var packageID = lineItem["PackageID"].AsUnsignedInteger(); if (packageID == 0) { // Coupons have PackageID of -1 (don't ask me why) // We'll use ItemAppID in this case packageID = lineItem["ItemAppID"].AsUnsignedInteger(); if (packageID == 0) { sc.Logger.LogNullError(nameof(packageID)); return; } } var gameName = lineItem["ItemDescription"].Value; if (string.IsNullOrEmpty(gameName)) { sc.Logger.LogNullError(nameof(gameName)); return; } // Apparently steam expects client to decode sent HTML gameName = WebUtility.HtmlDecode(gameName); Items[packageID] = gameName; } }