#pragma once #include "Common\Network\Sony\SonyCommerce.h" #include #include #include class SonyCommerce_Vita : public SonyCommerce { friend class PSVitaNPToolkit; enum State { e_state_noSession, e_state_creatingSession, e_state_createSessionDone, e_state_idle, }; /// This enum is used to verify the current utility that is running enum Phase { e_phase_stopped = 0, e_phase_idle, e_phase_voucherRedeemPhase, e_phase_productBrowsePhase, e_phase_creatingSessionPhase, e_phase_checkoutPhase, e_phase_downloadListPhase }; enum Message { e_message_commerceNone, e_message_commerceCreateSession, ///< Create a commerce session e_message_commerceRecreateSession, ///< Recreate a commerce session e_message_commerceGetCategoryInfo, ///< Information about a category in the Store e_message_commerceGetProductList, ///< Get a list of products available in the Store e_message_commerceGetDetailedProductInfo, ///< Get a list of products available in the Store, with additional details e_message_commerceAddDetailedProductInfo, ///< Add additional details to a ProdcutInfo already retrieved e_message_commerceStoreProductBrowse, ///< Launches the Store to a specified product e_message_commerceUpgradeTrial, ///< Upgrade a trial to full game e_message_commerceRedeemVoucher, ///< Redeem a voucher code e_message_commerceGetEntitlementList, ///< Get a list of entitlements associated with the current PSN user. e_message_commerceConsumeEntitlement, ///< Consume an amount from a consumable entitlement. e_message_commerceCheckout, ///< Launch the Store checkout e_message_commerceDownloadList, ///< Launch the download list e_message_commerceCheckout_Game, ///< Launch the Store checkout e_message_commerceDownloadList_Game, ///< Launch the download list e_message_commerceInstallContent, ///< Install content that's downloaded from the background download manager e_message_commerceEnd ///< End commerce2 processing }; enum Event { e_event_none, e_event_commerceSessionCreated, ///< An event generated when a commerce session has successfully been created. e_event_commerceSessionRecreated, ///< An event generated when a commerce session has successfully been recreated. e_event_commerceSessionAborted, ///< An event generated when the creation of commerce session has been aborted. e_event_commerceGotCategoryInfo, ///< An event generated when some category information has been retrieved from the store. e_event_commerceGotProductList, ///< An event generated when a list of products that are available has been retrieved from the store. e_event_commerceGotDetailedProductInfo, ///< An event generated when some detailed product information has been retrieved from the store. e_event_commerceAddedDetailedProductInfo, ///< An event generated when some detailed product information has been retrieved from the store. e_event_commerceProductBrowseStarted, ///< An event generated when product overlay has started. e_event_commerceProductBrowseSuccess, ///< An event generated when a product browse was completed successfully, and the user purchased the product. e_event_commerceProductBrowseAborted, ///< An event generated when a product browse was aborted by the user (the user pressed back). e_event_commerceProductBrowseFinished, ///< An event generated when a product browse has finished and it is now safe to free memory. e_event_commerceVoucherInputStarted, ///< An event generated when a voucher code input overlay was started. e_event_commerceVoucherInputSuccess, ///< An event generated when a voucher code input completed successfully. e_event_commerceVoucherInputAborted, ///< An event generated when a voucher code input was aborted by the user (user pressed back). e_event_commerceVoucherInputFinished, ///< An event generated when a voucher code input has finished. It is now safe to free memory. e_event_commerceGotEntitlementList, ///< An event generated when a the list of entitlements has been received for the current user. e_event_commerceConsumedEntitlement, ///< An event generated when the has successfully consumed an entitlement. e_event_commerceCheckoutStarted, ///< An event generated when a store checkout overlay has started. e_event_commerceCheckoutSuccess, ///< An event generated when user has successfully purchased from the checkout. e_event_commerceCheckoutAborted, ///< An event generated when the checkout was aborted by the user (user pressed back). e_event_commerceCheckoutFinished, ///< An event generated when a store checkout overlay has finished. e_event_commerceDownloadListStarted, ///< An event generated when a download list overlay has started. e_event_commerceDownloadListSuccess, ///< An event generated when the user has ended the download list. e_event_commerceDownloadListFinished, ///< An event generated when a download list overlay has finished. e_event_commerceInstallContentStarted, e_event_commerceInstallContentFinished, e_event_commerceError ///< An event generated when a commerce error has occurred. }; static bool m_bLicenseChecked; static bool m_bCommerceInitialised; // static SceNpCommerce2SessionInfo m_sessionInfo; static State m_state; static int m_errorCode; static LPVOID m_callbackParam; static Event m_event; static Message m_message; // static uint32_t m_requestID; static void* m_receiveBuffer; static std::vector *m_pProductInfoList; static ProductInfoDetailed *m_pProductInfoDetailed; static ProductInfo *m_pProductInfo; static CategoryInfo* m_pCategoryInfo; static char* m_pCategoryID; static const char* m_pProductID; static std::queue m_messageQueue; static CallbackFunc m_callbackFunc; static CheckoutInputParams m_checkoutInputParams; static DownloadListInputParams m_downloadInputParams; // static sys_memory_container_t m_memContainer; static bool m_bUpgradingTrial; static C4JThread* m_tickThread; static CallbackFunc m_trialUpgradeCallbackFunc; static LPVOID m_trialUpgradeCallbackParam; static CRITICAL_SECTION m_queueLock; static bool m_bLicenseInstalled; static bool m_bDownloadsPending; static bool m_bDownloadsReady; static bool m_bInstallingContent; static int m_iClearDLCCountdown; static bool m_bPurchasabilityUpdated; static Message m_lastMessage; static void runCallback() { assert(m_callbackFunc); CallbackFunc func = m_callbackFunc; m_callbackFunc = NULL; if(func) func(m_callbackParam, m_errorCode); m_errorCode = SCE_OK; } static void setCallback(CallbackFunc cb,LPVOID lpParam) { assert(m_callbackFunc == NULL); m_callbackFunc = cb; m_callbackParam = lpParam; } static uint32_t m_contextId; ///< The npcommerce2 context ID static bool m_contextCreated; ///< npcommerce2 context ID created? static Phase m_currentPhase; ///< Current commerce2 util // static char m_commercebuffer[SCE_NP_COMMERCE2_RECV_BUF_SIZE]; static void commerce2Handler( const sce::Toolkit::NP::Event& event); static void processMessage(); static void processEvent(); static int createContext(); static int createSession(); static int recreateSession(); static void setError(int err) { m_errorCode = err; } static int getCategoryInfo(CategoryInfo *info, char *categoryId); static int getProductList(std::vector* productList, char *categoryId); static int getDetailedProductInfo(ProductInfoDetailed *info, const char *productId, char *categoryId); static int addDetailedProductInfo(ProductInfo *info, const char *productId, char *categoryId); static int checkout(CheckoutInputParams ¶ms); static int downloadList(DownloadListInputParams ¶ms); static int checkout_game(CheckoutInputParams ¶ms); static int downloadList_game(DownloadListInputParams ¶ms); static int installContent(); static void UpgradeTrialCallback1(LPVOID lpParam,int err); static void UpgradeTrialCallback2(LPVOID lpParam,int err); static void Delete(); static void copyCategoryInfo(CategoryInfo *pInfo, sce::Toolkit::NP::CategoryInfo *pNPInfo); static void copyProductList(std::vector* pProductList, std::vector* pNPProductList); static void copyDetailedProductInfo(ProductInfoDetailed *pInfo, sce::Toolkit::NP::ProductInfoDetailed* pNPInfo); static void copyAddDetailedProductInfo(ProductInfo *pInfo, sce::Toolkit::NP::ProductInfoDetailed* pNPInfo); static void InstallContentCallback(LPVOID lpParam,int err); static int commerceEnd(); // static int upgradeTrial(); static int TickLoop(void* lpParam); //void Test(); static void Init(); static int Shutdown(); static void CheckForTrialUpgradeKey_Callback(LPVOID param, bool bFullVersion); public: static void checkBackgroundDownloadStatus(); virtual void CreateSession(CallbackFunc cb, LPVOID lpParam); virtual void CloseSession(); virtual void GetCategoryInfo(CallbackFunc cb, LPVOID lpParam, CategoryInfo *info, const char *categoryId); virtual void GetProductList(CallbackFunc cb, LPVOID lpParam, std::vector* productList, const char *categoryId); virtual void GetDetailedProductInfo(CallbackFunc cb, LPVOID lpParam, ProductInfoDetailed* productInfoDetailed, const char *productId, const char *categoryId); virtual void AddDetailedProductInfo( CallbackFunc cb, LPVOID lpParam, ProductInfo* productInfo, const char *productId, const char *categoryId ); virtual void Checkout(CallbackFunc cb, LPVOID lpParam, const char* skuID); virtual void Checkout(CallbackFunc cb, LPVOID lpParam, ProductInfo* productInfo); virtual void DownloadAlreadyPurchased(CallbackFunc cb, LPVOID lpParam, const char* skuID); virtual void Checkout_Game(CallbackFunc cb, LPVOID lpParam, const char* skuID); virtual void DownloadAlreadyPurchased_Game(CallbackFunc cb, LPVOID lpParam, const char* skuID); static void InstallContent(CallbackFunc cb, LPVOID lpParam); virtual void UpgradeTrial(CallbackFunc cb, LPVOID lpParam); virtual void CheckForTrialUpgradeKey(); virtual bool LicenseChecked(); static bool getPurchasabilityUpdated(); static bool getDLCUpgradePending(); };