#pragma once #include #include #include #include #include "Utilities/mutex.h" #include "Emu/Memory/vm_ptr.h" #include "Emu/Cell/Modules/sceNp.h" #include "Emu/Cell/Modules/sceNp2.h" #include "Emu/Cell/Modules/sceNpCommerce2.h" // Score related struct score_ctx { score_ctx(vm::cptr communicationId, vm::cptr passphrase); static const u32 id_base = 0x2001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(25); shared_mutex mutex; u64 timeout = 60'000'000; // 60 seconds SceNpCommunicationId communicationId{}; SceNpCommunicationPassphrase passphrase{}; s32 pcId = 0; }; s32 create_score_context(vm::cptr communicationId, vm::cptr passphrase); bool destroy_score_context(s32 ctx_id); struct tdata_invalid { }; struct tdata_get_board_infos { vm::ptr boardInfo; }; struct tdata_record_score { vm::ptr tmpRank; }; struct tdata_record_score_data { u32 game_data_size = 0; std::vector game_data; }; struct tdata_get_score_data { vm::ptr totalSize; u32 recvSize = 0; vm::ptr score_data; u32 game_data_size = 0; std::vector game_data; }; struct tdata_get_score_generic { vm::ptr rankArray; u32 rankArraySize = 0; vm::ptr commentArray; vm::ptr infoArray; u32 infoArraySize = 0; u32 arrayNum = 0; vm::ptr lastSortDate; vm::ptr totalRecord; }; struct score_transaction_ctx { score_transaction_ctx(const std::shared_ptr& score); ~score_transaction_ctx(); std::optional get_score_transaction_status(); void abort_score_transaction(); error_code wait_for_completion(); bool set_result_and_wake(error_code err); static const u32 id_base = 0x1001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(26); shared_mutex mutex; std::condition_variable_any wake_cond, completion_cond; std::optional result; std::variant tdata; u64 timeout = 60'000'000; // 60 seconds; SceNpCommunicationId communicationId{}; SceNpCommunicationPassphrase passphrase{}; s32 pcId = 0; std::thread thread; }; s32 create_score_transaction_context(const std::shared_ptr& score); bool destroy_score_transaction_context(s32 ctx_id); // Match2 related struct match2_ctx { match2_ctx(vm::cptr communicationId, vm::cptr passphrase); static const u32 id_base = 1; static const u32 id_step = 1; static const u32 id_count = 255; SAVESTATE_INIT_POS(27); SceNpCommunicationId communicationId{}; SceNpCommunicationPassphrase passphrase{}; vm::ptr context_callback{}; vm::ptr context_callback_param{}; SceNpMatching2RequestOptParam default_match2_optparam{}; }; u16 create_match2_context(vm::cptr communicationId, vm::cptr passphrase); bool check_match2_context(u16 ctx_id); std::shared_ptr get_match2_context(u16 ctx_id); bool destroy_match2_context(u16 ctx_id); struct lookup_title_ctx { lookup_title_ctx(vm::cptr communicationId); static const u32 id_base = 0x3001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(28); SceNpCommunicationId communicationId{}; SceNpCommunicationPassphrase passphrase{}; }; s32 create_lookup_title_context(vm::cptr communicationId); bool destroy_lookup_title_context(s32 ctx_id); struct lookup_transaction_ctx { lookup_transaction_ctx(s32 lt_ctx); static const u32 id_base = 0x4001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(29); s32 lt_ctx = 0; }; s32 create_lookup_transaction_context(s32 lt_ctx); bool destroy_lookup_transaction_context(s32 ctx_id); struct commerce2_ctx { commerce2_ctx(u32 version, vm::cptr npid, vm::ptr handler, vm::ptr arg); static const u32 id_base = 0x5001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(30); u32 version{}; SceNpId npid{}; vm::ptr context_callback{}; vm::ptr context_callback_param{}; }; s32 create_commerce2_context(u32 version, vm::cptr npid, vm::ptr handler, vm::ptr arg); std::shared_ptr get_commerce2_context(u16 ctx_id); bool destroy_commerce2_context(s32 ctx_id); struct signaling_ctx { signaling_ctx(vm::ptr npid, vm::ptr handler, vm::ptr arg); static const u32 id_base = 0x6001; static const u32 id_step = 1; static const u32 id_count = 32; SAVESTATE_INIT_POS(31); SceNpId npid{}; vm::ptr handler{}; vm::ptr arg{}; }; s32 create_signaling_context(vm::ptr npid, vm::ptr handler, vm::ptr arg); bool destroy_signaling_context(s32 ctx_id);