mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-26 04:32:35 +01:00
Add matching2 option handling
This commit is contained in:
parent
ba379ceba2
commit
3e7ff4059e
@ -1044,7 +1044,7 @@ error_code sceNpMatching2GetRoomMemberDataInternalLocal(SceNpMatching2ContextId
|
||||
return SCE_NP_MATCHING2_ERROR_CONTEXT_NOT_FOUND;
|
||||
}
|
||||
|
||||
return nph.local_get_room_member_data(roomId, memberId, binattrs_list, member ? member.get_ptr() : nullptr, buf.addr(), bufLen);
|
||||
return nph.local_get_room_member_data(roomId, memberId, binattrs_list, member ? member.get_ptr() : nullptr, buf.addr(), bufLen, ctxId);
|
||||
}
|
||||
|
||||
error_code sceNpMatching2GetCbQueueInfo(SceNpMatching2ContextId ctxId, vm::ptr<SceNpMatching2CbQueueInfo> queueInfo)
|
||||
@ -1309,7 +1309,7 @@ error_code sceNpMatching2CreateContext(
|
||||
return SCE_NP_MATCHING2_ERROR_NOT_NP_SIGN_IN;
|
||||
}
|
||||
|
||||
*ctxId = create_match2_context(commId, passPhrase);
|
||||
*ctxId = create_match2_context(commId, passPhrase, option);
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
@ -67,24 +67,24 @@ namespace np
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::UserInfo2_to_SceNpUserInfo2(event_data& edata, const UserInfo2* user, SceNpUserInfo2* user_info)
|
||||
void np_handler::UserInfo2_to_SceNpUserInfo2(event_data& edata, const UserInfo2* user, SceNpUserInfo2* user_info, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
if (user->npId())
|
||||
std::memcpy(user_info->npId.handle.data, user->npId()->c_str(), std::min<usz>(16, user->npId()->size()));
|
||||
|
||||
if (user->onlineName())
|
||||
if (include_onlinename && user->onlineName())
|
||||
{
|
||||
auto* ptr = edata.allocate<SceNpOnlineName>(sizeof(SceNpOnlineName), user_info->onlineName);
|
||||
std::memcpy(ptr->data, user->onlineName()->c_str(), std::min<usz>(48, user->onlineName()->size()));
|
||||
}
|
||||
if (user->avatarUrl())
|
||||
if (include_avatarurl && user->avatarUrl())
|
||||
{
|
||||
auto* ptr = edata.allocate<SceNpAvatarUrl>(sizeof(SceNpAvatarUrl), user_info->avatarUrl);
|
||||
std::memcpy(ptr->data, user->avatarUrl()->c_str(), std::min<usz>(127, user->avatarUrl()->size()));
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::RoomDataExternal_to_SceNpMatching2RoomDataExternal(event_data& edata, const RoomDataExternal* room, SceNpMatching2RoomDataExternal* room_info)
|
||||
void np_handler::RoomDataExternal_to_SceNpMatching2RoomDataExternal(event_data& edata, const RoomDataExternal* room, SceNpMatching2RoomDataExternal* room_info, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
room_info->serverId = room->serverId();
|
||||
room_info->worldId = room->worldId();
|
||||
@ -116,7 +116,7 @@ namespace np
|
||||
if (auto owner = room->owner())
|
||||
{
|
||||
auto* ptr_owner = edata.allocate<SceNpUserInfo2>(sizeof(SceNpUserInfo2), room_info->owner);
|
||||
UserInfo2_to_SceNpUserInfo2(edata, owner, ptr_owner);
|
||||
UserInfo2_to_SceNpUserInfo2(edata, owner, ptr_owner, include_onlinename, include_avatarurl);
|
||||
}
|
||||
|
||||
if (room->roomGroup() && room->roomGroup()->size() != 0)
|
||||
@ -172,13 +172,13 @@ namespace np
|
||||
cur_room = (i > 0) ? edata.allocate<SceNpMatching2RoomDataExternal>(sizeof(SceNpMatching2RoomDataExternal), prev_room->next) :
|
||||
edata.allocate<SceNpMatching2RoomDataExternal>(sizeof(SceNpMatching2RoomDataExternal), search_resp->roomDataExternal);
|
||||
|
||||
RoomDataExternal_to_SceNpMatching2RoomDataExternal(edata, fb_room, cur_room);
|
||||
RoomDataExternal_to_SceNpMatching2RoomDataExternal(edata, fb_room, cur_room, true, true);
|
||||
prev_room = cur_room;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(event_data& edata, const GetRoomDataExternalListResponse* resp, SceNpMatching2GetRoomDataExternalListResponse* get_resp)
|
||||
void np_handler::GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(event_data& edata, const GetRoomDataExternalListResponse* resp, SceNpMatching2GetRoomDataExternalListResponse* get_resp, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
get_resp->roomDataExternalNum = resp->rooms() ? resp->rooms()->size() : 0;
|
||||
|
||||
@ -191,12 +191,12 @@ namespace np
|
||||
cur_room = (i > 0) ? edata.allocate<SceNpMatching2RoomDataExternal>(sizeof(SceNpMatching2RoomDataExternal), prev_room->next) :
|
||||
edata.allocate<SceNpMatching2RoomDataExternal>(sizeof(SceNpMatching2RoomDataExternal), get_resp->roomDataExternal);
|
||||
|
||||
RoomDataExternal_to_SceNpMatching2RoomDataExternal(edata, fb_room, cur_room);
|
||||
RoomDataExternal_to_SceNpMatching2RoomDataExternal(edata, fb_room, cur_room, include_onlinename, include_avatarurl);
|
||||
prev_room = cur_room;
|
||||
}
|
||||
}
|
||||
|
||||
u16 np_handler::RoomDataInternal_to_SceNpMatching2RoomDataInternal(event_data& edata, const RoomDataInternal* resp, SceNpMatching2RoomDataInternal* room_info, const SceNpId& npid)
|
||||
u16 np_handler::RoomDataInternal_to_SceNpMatching2RoomDataInternal(event_data& edata, const RoomDataInternal* resp, SceNpMatching2RoomDataInternal* room_info, const SceNpId& npid, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
u16 member_id = 0;
|
||||
room_info->serverId = resp->serverId();
|
||||
@ -227,7 +227,7 @@ namespace np
|
||||
edata.add_relocation<SceNpMatching2RoomMemberDataInternal>(sce_member->next);
|
||||
}
|
||||
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, fb_member, room_info, sce_member);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, fb_member, room_info, sce_member, include_onlinename, include_avatarurl);
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < room_info->memberList.membersNum; i++)
|
||||
@ -279,9 +279,9 @@ namespace np
|
||||
return member_id;
|
||||
}
|
||||
|
||||
void np_handler::RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(event_data& edata, const RoomMemberDataInternal* member_data, const SceNpMatching2RoomDataInternal* room_info, SceNpMatching2RoomMemberDataInternal* sce_member_data)
|
||||
void np_handler::RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(event_data& edata, const RoomMemberDataInternal* member_data, const SceNpMatching2RoomDataInternal* room_info, SceNpMatching2RoomMemberDataInternal* sce_member_data, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
UserInfo2_to_SceNpUserInfo2(edata, member_data->userInfo(), &sce_member_data->userInfo);
|
||||
UserInfo2_to_SceNpUserInfo2(edata, member_data->userInfo(), &sce_member_data->userInfo, include_onlinename, include_avatarurl);
|
||||
sce_member_data->joinDate.tick = member_data->joinDate();
|
||||
sce_member_data->memberId = member_data->memberId();
|
||||
sce_member_data->teamId = member_data->teamId();
|
||||
@ -325,7 +325,7 @@ namespace np
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(event_data& edata, const RoomMemberUpdateInfo* update_info, SceNpMatching2RoomMemberUpdateInfo* sce_update_info)
|
||||
void np_handler::RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(event_data& edata, const RoomMemberUpdateInfo* update_info, SceNpMatching2RoomMemberUpdateInfo* sce_update_info, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
sce_update_info->eventCause = 0;
|
||||
if (update_info->optData())
|
||||
@ -343,7 +343,7 @@ namespace np
|
||||
auto* ptr_roomemberinternal = edata.allocate<SceNpMatching2RoomMemberDataInternal>(sizeof(SceNpMatching2RoomMemberDataInternal), sce_update_info->roomMemberDataInternal);
|
||||
|
||||
// TODO: Pass room_info
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, fb_member, nullptr, ptr_roomemberinternal);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, fb_member, nullptr, ptr_roomemberinternal, include_onlinename, include_avatarurl);
|
||||
}
|
||||
}
|
||||
|
||||
@ -361,10 +361,10 @@ namespace np
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(event_data& edata, const RoomDataInternalUpdateInfo* update_info, SceNpMatching2RoomDataInternalUpdateInfo* sce_update_info, const SceNpId& npid)
|
||||
void np_handler::RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(event_data& edata, const RoomDataInternalUpdateInfo* update_info, SceNpMatching2RoomDataInternalUpdateInfo* sce_update_info, const SceNpId& npid, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
auto* sce_room_data = edata.allocate<SceNpMatching2RoomDataInternal>(sizeof(SceNpMatching2RoomDataInternal), sce_update_info->newRoomDataInternal);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, update_info->newRoomDataInternal(), sce_room_data, npid);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, update_info->newRoomDataInternal(), sce_room_data, npid, include_onlinename, include_avatarurl);
|
||||
|
||||
if (sce_room_data->flagAttr != update_info->prevFlagAttr())
|
||||
{
|
||||
@ -417,10 +417,10 @@ namespace np
|
||||
}
|
||||
}
|
||||
|
||||
void np_handler::RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(event_data& edata, const RoomMemberDataInternalUpdateInfo* update_info, SceNpMatching2RoomMemberDataInternalUpdateInfo* sce_update_info)
|
||||
void np_handler::RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(event_data& edata, const RoomMemberDataInternalUpdateInfo* update_info, SceNpMatching2RoomMemberDataInternalUpdateInfo* sce_update_info, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
auto* sce_room_member_data = edata.allocate<SceNpMatching2RoomMemberDataInternal>(sizeof(SceNpMatching2RoomMemberDataInternal), sce_update_info->newRoomMemberDataInternal);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, update_info->newRoomMemberDataInternal(), nullptr, sce_room_member_data);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, update_info->newRoomMemberDataInternal(), nullptr, sce_room_member_data, include_onlinename, include_avatarurl);
|
||||
|
||||
if (sce_update_info->newRoomMemberDataInternal->flagAttr != update_info->prevFlagAttr())
|
||||
{
|
||||
@ -469,7 +469,7 @@ namespace np
|
||||
sce_resp->rtt = resp->rtt();
|
||||
}
|
||||
|
||||
void np_handler::RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(event_data& edata, const RoomMessageInfo* mi, SceNpMatching2RoomMessageInfo* sce_mi)
|
||||
void np_handler::RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(event_data& edata, const RoomMessageInfo* mi, SceNpMatching2RoomMessageInfo* sce_mi, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
sce_mi->filtered = mi->filtered();
|
||||
sce_mi->castType = mi->castType();
|
||||
@ -500,7 +500,7 @@ namespace np
|
||||
if (auto src_member = mi->srcMember())
|
||||
{
|
||||
auto* ptr_sce_userinfo = edata.allocate<SceNpUserInfo2>(sizeof(SceNpUserInfo2), sce_mi->srcMember);
|
||||
UserInfo2_to_SceNpUserInfo2(edata, src_member, ptr_sce_userinfo);
|
||||
UserInfo2_to_SceNpUserInfo2(edata, src_member, ptr_sce_userinfo, include_onlinename, include_avatarurl);
|
||||
}
|
||||
|
||||
if (auto msg = mi->msg())
|
||||
|
@ -220,7 +220,7 @@ namespace np
|
||||
return {CELL_OK, rooms[room_id].password};
|
||||
}
|
||||
|
||||
error_code cache_manager::get_member_and_attrs(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data)
|
||||
error_code cache_manager::get_member_and_attrs(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data, bool include_onlinename, bool include_avatarurl)
|
||||
{
|
||||
std::lock_guard lock(mutex);
|
||||
|
||||
@ -249,11 +249,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 needed_data_size = 0;
|
||||
|
||||
if (member.userInfo.onlineName)
|
||||
|
||||
if (include_onlinename && member.userInfo.onlineName)
|
||||
needed_data_size += sizeof(SceNpOnlineName);
|
||||
|
||||
if (member.userInfo.avatarUrl)
|
||||
|
||||
if (include_avatarurl && member.userInfo.avatarUrl)
|
||||
needed_data_size += sizeof(SceNpAvatarUrl);
|
||||
|
||||
if (member.group_id)
|
||||
@ -280,13 +280,13 @@ namespace np
|
||||
memory_allocator mem;
|
||||
mem.setup(vm::ptr<void>(vm::cast(addr_data)), size_data);
|
||||
|
||||
if (member.userInfo.onlineName)
|
||||
if (include_onlinename && member.userInfo.onlineName)
|
||||
{
|
||||
ptr_member->userInfo.onlineName.set(mem.allocate(sizeof(SceNpOnlineName)));
|
||||
memcpy(ptr_member->userInfo.onlineName.get_ptr(), &member.userInfo.onlineName.value(), sizeof(SceNpOnlineName));
|
||||
}
|
||||
|
||||
if (member.userInfo.avatarUrl)
|
||||
if (include_avatarurl && member.userInfo.avatarUrl)
|
||||
{
|
||||
ptr_member->userInfo.avatarUrl.set(mem.allocate(sizeof(SceNpAvatarUrl)));
|
||||
memcpy(ptr_member->userInfo.avatarUrl.get_ptr(), &member.userInfo.avatarUrl.value(), sizeof(SceNpAvatarUrl));
|
||||
|
@ -74,7 +74,7 @@ namespace np
|
||||
std::pair<error_code, std::optional<SceNpMatching2RoomSlotInfo>> get_slots(SceNpMatching2RoomId room_id);
|
||||
std::pair<error_code, std::vector<SceNpMatching2RoomMemberId>> get_memberids(u64 room_id, s32 sort_method);
|
||||
std::pair<error_code, std::optional<SceNpMatching2SessionPassword>> get_password(SceNpMatching2RoomId room_id);
|
||||
error_code get_member_and_attrs(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data);
|
||||
error_code get_member_and_attrs(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data, bool include_onlinename, bool include_avatarurl);
|
||||
std::pair<error_code, std::optional<SceNpId>> get_npid(u64 room_id, u16 member_id);
|
||||
std::optional<u16> get_memberid(u64 room_id, const SceNpId& npid);
|
||||
|
||||
|
@ -136,16 +136,19 @@ bool destroy_score_transaction_context(s32 ctx_id)
|
||||
return idm::remove<score_transaction_ctx>(static_cast<u32>(ctx_id));
|
||||
}
|
||||
|
||||
match2_ctx::match2_ctx(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase)
|
||||
match2_ctx::match2_ctx(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase, s32 option)
|
||||
{
|
||||
ensure(!communicationId->data[9] && strlen(communicationId->data) == 9);
|
||||
memcpy(&this->communicationId, communicationId.get_ptr(), sizeof(SceNpCommunicationId));
|
||||
memcpy(&this->passphrase, passphrase.get_ptr(), sizeof(SceNpCommunicationPassphrase));
|
||||
|
||||
include_onlinename = option & SCE_NP_MATCHING2_CONTEXT_OPTION_USE_ONLINENAME;
|
||||
include_avatarurl = option & SCE_NP_MATCHING2_CONTEXT_OPTION_USE_AVATARURL;
|
||||
}
|
||||
u16 create_match2_context(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase)
|
||||
u16 create_match2_context(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase, s32 option)
|
||||
{
|
||||
sceNp2.notice("Creating match2 context with communicationId: <%s>", static_cast<const char*>(communicationId->data));
|
||||
return static_cast<u16>(idm::make<match2_ctx>(communicationId, passphrase));
|
||||
return static_cast<u16>(idm::make<match2_ctx>(communicationId, passphrase, option));
|
||||
}
|
||||
bool destroy_match2_context(u16 ctx_id)
|
||||
{
|
||||
|
@ -184,7 +184,7 @@ bool destroy_score_transaction_context(s32 ctx_id);
|
||||
// Match2 related
|
||||
struct match2_ctx
|
||||
{
|
||||
match2_ctx(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase);
|
||||
match2_ctx(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase, s32 option);
|
||||
|
||||
static const u32 id_base = 1;
|
||||
static const u32 id_step = 1;
|
||||
@ -195,6 +195,7 @@ struct match2_ctx
|
||||
|
||||
SceNpCommunicationId communicationId{};
|
||||
SceNpCommunicationPassphrase passphrase{};
|
||||
bool include_onlinename = false, include_avatarurl = false;
|
||||
|
||||
vm::ptr<SceNpMatching2ContextCallback> context_callback{};
|
||||
vm::ptr<void> context_callback_param{};
|
||||
@ -204,7 +205,7 @@ struct match2_ctx
|
||||
vm::ptr<SceNpMatching2SignalingCallback> signaling_cb{};
|
||||
vm::ptr<void> signaling_cb_arg{};
|
||||
};
|
||||
u16 create_match2_context(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase);
|
||||
u16 create_match2_context(vm::cptr<SceNpCommunicationId> communicationId, vm::cptr<SceNpCommunicationPassphrase> passphrase, s32 option);
|
||||
bool check_match2_context(u16 ctx_id);
|
||||
std::shared_ptr<match2_ctx> get_match2_context(u16 ctx_id);
|
||||
bool destroy_match2_context(u16 ctx_id);
|
||||
|
@ -1594,9 +1594,10 @@ namespace np
|
||||
return np_cache.get_memberids(room_id, sort_method);
|
||||
}
|
||||
|
||||
error_code np_handler::local_get_room_member_data(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data)
|
||||
error_code np_handler::local_get_room_member_data(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data, u32 ctx_id)
|
||||
{
|
||||
return np_cache.get_member_and_attrs(room_id, member_id, binattrs_list, ptr_member, addr_data, size_data);
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(ctx_id);
|
||||
return np_cache.get_member_and_attrs(room_id, member_id, binattrs_list, ptr_member, addr_data, size_data, include_onlinename, include_avatarurl);
|
||||
}
|
||||
|
||||
void np_handler::upnp_add_port_mapping(u16 internal_port, std::string_view protocol)
|
||||
@ -1608,4 +1609,17 @@ namespace np
|
||||
{
|
||||
upnp.remove_port_redir(internal_port, protocol);
|
||||
}
|
||||
|
||||
std::pair<bool, bool> np_handler::get_match2_context_options(u32 ctx_id)
|
||||
{
|
||||
bool include_onlinename = false, include_avatarurl = false;
|
||||
|
||||
if (auto ctx = get_match2_context(ctx_id))
|
||||
{
|
||||
include_onlinename = ctx->include_onlinename;
|
||||
include_avatarurl = ctx->include_avatarurl;
|
||||
}
|
||||
|
||||
return {include_onlinename, include_avatarurl};
|
||||
}
|
||||
} // namespace np
|
||||
|
@ -205,7 +205,7 @@ namespace np
|
||||
std::pair<error_code, std::optional<SceNpMatching2RoomSlotInfo>> local_get_room_slots(SceNpMatching2RoomId room_id);
|
||||
std::pair<error_code, std::optional<SceNpMatching2SessionPassword>> local_get_room_password(SceNpMatching2RoomId room_id);
|
||||
std::pair<error_code, std::vector<SceNpMatching2RoomMemberId>> local_get_room_memberids(SceNpMatching2RoomId room_id, s32 sort_method);
|
||||
error_code local_get_room_member_data(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data);
|
||||
error_code local_get_room_member_data(SceNpMatching2RoomId room_id, SceNpMatching2RoomMemberId member_id, const std::vector<SceNpMatching2AttributeId>& binattrs_list, SceNpMatching2RoomMemberDataInternal* ptr_member, u32 addr_data, u32 size_data, u32 ctx_id);
|
||||
|
||||
// Friend stuff
|
||||
u32 get_num_friends();
|
||||
@ -310,24 +310,25 @@ namespace np
|
||||
bool reply_tus_delete_multislot_data(u32 req_id, std::vector<u8>& reply_data);
|
||||
|
||||
// Helper functions(fb=>np2)
|
||||
std::pair<bool, bool> get_match2_context_options(u32 ctx_id);
|
||||
void BinAttr_to_SceNpMatching2BinAttr(event_data& edata, const BinAttr* bin_attr, SceNpMatching2BinAttr* binattr_info);
|
||||
void BinAttrs_to_SceNpMatching2BinAttrs(event_data& edata, const flatbuffers::Vector<flatbuffers::Offset<BinAttr>>* fb_attr, SceNpMatching2BinAttr* binattr_info);
|
||||
void RoomMemberBinAttrInternal_to_SceNpMatching2RoomMemberBinAttrInternal(event_data& edata, const RoomMemberBinAttrInternal* fb_attr, SceNpMatching2RoomMemberBinAttrInternal* binattr_info);
|
||||
void RoomBinAttrInternal_to_SceNpMatching2RoomBinAttrInternal(event_data& edata, const BinAttrInternal* fb_attr, SceNpMatching2RoomBinAttrInternal* binattr_info);
|
||||
void RoomGroup_to_SceNpMatching2RoomGroup(const RoomGroup* fb_group, SceNpMatching2RoomGroup* sce_group);
|
||||
void RoomGroups_to_SceNpMatching2RoomGroups(const flatbuffers::Vector<flatbuffers::Offset<RoomGroup>>* fb_groups, SceNpMatching2RoomGroup* sce_groups);
|
||||
void UserInfo2_to_SceNpUserInfo2(event_data& edata, const UserInfo2* user, SceNpUserInfo2* user_info);
|
||||
void RoomDataExternal_to_SceNpMatching2RoomDataExternal(event_data& edata, const RoomDataExternal* room, SceNpMatching2RoomDataExternal* room_info);
|
||||
void UserInfo2_to_SceNpUserInfo2(event_data& edata, const UserInfo2* user, SceNpUserInfo2* user_info, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomDataExternal_to_SceNpMatching2RoomDataExternal(event_data& edata, const RoomDataExternal* room, SceNpMatching2RoomDataExternal* room_info, bool include_onlinename, bool include_avatarurl);
|
||||
void SearchRoomResponse_to_SceNpMatching2SearchRoomResponse(event_data& edata, const SearchRoomResponse* resp, SceNpMatching2SearchRoomResponse* search_resp);
|
||||
void GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(event_data& edata, const GetRoomDataExternalListResponse* resp, SceNpMatching2GetRoomDataExternalListResponse* get_resp);
|
||||
u16 RoomDataInternal_to_SceNpMatching2RoomDataInternal(event_data& edata, const RoomDataInternal* resp, SceNpMatching2RoomDataInternal* room_resp, const SceNpId& npid);
|
||||
void RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(event_data& edata, const RoomMemberDataInternal* member_data, const SceNpMatching2RoomDataInternal* room_info, SceNpMatching2RoomMemberDataInternal* sce_member_data);
|
||||
void RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(event_data& edata, const RoomMemberUpdateInfo* resp, SceNpMatching2RoomMemberUpdateInfo* room_info);
|
||||
void GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(event_data& edata, const GetRoomDataExternalListResponse* resp, SceNpMatching2GetRoomDataExternalListResponse* get_resp, bool include_onlinename, bool include_avatarurl);
|
||||
u16 RoomDataInternal_to_SceNpMatching2RoomDataInternal(event_data& edata, const RoomDataInternal* resp, SceNpMatching2RoomDataInternal* room_resp, const SceNpId& npid, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(event_data& edata, const RoomMemberDataInternal* member_data, const SceNpMatching2RoomDataInternal* room_info, SceNpMatching2RoomMemberDataInternal* sce_member_data, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(event_data& edata, const RoomMemberUpdateInfo* resp, SceNpMatching2RoomMemberUpdateInfo* room_info, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomUpdateInfo_to_SceNpMatching2RoomUpdateInfo(const RoomUpdateInfo* update_info, SceNpMatching2RoomUpdateInfo* sce_update_info);
|
||||
void GetPingInfoResponse_to_SceNpMatching2SignalingGetPingInfoResponse(const GetPingInfoResponse* resp, SceNpMatching2SignalingGetPingInfoResponse* sce_resp);
|
||||
void RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(event_data& edata, const RoomMessageInfo* mi, SceNpMatching2RoomMessageInfo* sce_mi);
|
||||
void RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(event_data& edata, const RoomDataInternalUpdateInfo* update_info, SceNpMatching2RoomDataInternalUpdateInfo* sce_update_info, const SceNpId& npid);
|
||||
void RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(event_data& edata, const RoomMemberDataInternalUpdateInfo* update_info, SceNpMatching2RoomMemberDataInternalUpdateInfo* sce_update_info);
|
||||
void RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(event_data& edata, const RoomMessageInfo* mi, SceNpMatching2RoomMessageInfo* sce_mi, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(event_data& edata, const RoomDataInternalUpdateInfo* update_info, SceNpMatching2RoomDataInternalUpdateInfo* sce_update_info, const SceNpId& npid, bool include_onlinename, bool include_avatarurl);
|
||||
void RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(event_data& edata, const RoomMemberDataInternalUpdateInfo* update_info, SceNpMatching2RoomMemberDataInternalUpdateInfo* sce_update_info, bool include_onlinename, bool include_avatarurl);
|
||||
bool handle_GetScoreResponse(u32 req_id, std::vector<u8>& reply_data, bool simple_result = false);
|
||||
bool handle_tus_no_data(u32 req_id, std::vector<u8>& reply_data);
|
||||
bool handle_TusVarResponse(u32 req_id, std::vector<u8>& reply_data);
|
||||
|
@ -23,10 +23,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(room_event_cb_ctx);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMemberUpdateInfo, sizeof(SceNpMatching2RoomMemberUpdateInfo));
|
||||
auto* notif_data = reinterpret_cast<SceNpMatching2RoomMemberUpdateInfo*>(edata.data());
|
||||
RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(edata, update_info, notif_data);
|
||||
RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(edata, update_info, notif_data, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
if (!np_cache.add_member(room_id, notif_data->roomMemberDataInternal.get_ptr()))
|
||||
@ -58,10 +59,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(room_event_cb_ctx);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMemberUpdateInfo, sizeof(SceNpMatching2RoomMemberUpdateInfo));
|
||||
auto* notif_data = reinterpret_cast<SceNpMatching2RoomMemberUpdateInfo*>(edata.data());
|
||||
RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(edata, update_info, notif_data);
|
||||
RoomMemberUpdateInfo_to_SceNpMatching2RoomMemberUpdateInfo(edata, update_info, notif_data, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
if (!np_cache.del_member(room_id, notif_data->roomMemberDataInternal->memberId))
|
||||
@ -127,10 +129,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(room_event_cb_ctx);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomDataInternalUpdateInfo, sizeof(SceNpMatching2RoomDataInternalUpdateInfo));
|
||||
auto* notif_data = reinterpret_cast<SceNpMatching2RoomDataInternalUpdateInfo*>(edata.data());
|
||||
RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(edata, update_info, notif_data, npid);
|
||||
RoomDataInternalUpdateInfo_to_SceNpMatching2RoomDataInternalUpdateInfo(edata, update_info, notif_data, npid, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
np_cache.insert_room(notif_data->newRoomDataInternal.get_ptr());
|
||||
@ -162,10 +165,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(room_event_cb_ctx);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMemberDataInternalUpdateInfo, sizeof(SceNpMatching2RoomMemberDataInternalUpdateInfo));
|
||||
auto* notif_data = reinterpret_cast<SceNpMatching2RoomMemberDataInternalUpdateInfo*>(edata.data());
|
||||
RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(edata, update_info, notif_data);
|
||||
RoomMemberDataInternalUpdateInfo_to_SceNpMatching2RoomMemberDataInternalUpdateInfo(edata, update_info, notif_data, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
if (!np_cache.add_member(room_id, notif_data->newRoomMemberDataInternal.get_ptr()))
|
||||
@ -198,10 +202,11 @@ namespace np
|
||||
}
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(room_event_cb_ctx);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_RoomMessageInfo, sizeof(SceNpMatching2RoomMessageInfo));
|
||||
auto* notif_data = reinterpret_cast<SceNpMatching2RoomMessageInfo*>(edata.data());
|
||||
RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(edata, message_info, notif_data);
|
||||
RoomMessageInfo_to_SceNpMatching2RoomMessageInfo(edata, message_info, notif_data, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
rpcn_log.notice("Received notification of a room message from member(%d) in room(%d)", member_id, room_id);
|
||||
|
@ -187,11 +187,12 @@ namespace np
|
||||
return error_and_disconnect("Malformed reply to CreateRoom command");
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(cb_info_opt->ctx_id);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_CreateJoinRoom, sizeof(SceNpMatching2CreateJoinRoomResponse));
|
||||
auto* room_resp = reinterpret_cast<SceNpMatching2CreateJoinRoomResponse*>(edata.data());
|
||||
auto* room_info = edata.allocate<SceNpMatching2RoomDataInternal>(sizeof(SceNpMatching2RoomDataInternal), room_resp->roomDataInternal);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
np_cache.insert_room(room_info);
|
||||
@ -253,11 +254,12 @@ namespace np
|
||||
return error_and_disconnect("Malformed reply to JoinRoom command");
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(cb_info_opt->ctx_id);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_JoinRoom, sizeof(SceNpMatching2JoinRoomResponse));
|
||||
auto* room_resp = reinterpret_cast<SceNpMatching2JoinRoomResponse*>(edata.data());
|
||||
auto* room_info = edata.allocate<SceNpMatching2RoomDataInternal>(sizeof(SceNpMatching2RoomDataInternal), room_resp->roomDataInternal);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
np_cache.insert_room(room_info);
|
||||
@ -334,6 +336,7 @@ namespace np
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_SearchRoom, sizeof(SceNpMatching2SearchRoomResponse));
|
||||
auto* search_resp = reinterpret_cast<SceNpMatching2SearchRoomResponse*>(edata.data());
|
||||
// The online_name and avatar_url are naturally filtered by the reply from the server
|
||||
SearchRoomResponse_to_SceNpMatching2SearchRoomResponse(edata, resp, search_resp);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
@ -372,10 +375,11 @@ namespace np
|
||||
return error_and_disconnect("Malformed reply to GetRoomDataExternalList command");
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(cb_info_opt->ctx_id);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomDataExternalList, sizeof(SceNpMatching2GetRoomDataExternalListResponse));
|
||||
auto* sce_get_room_ext_resp = reinterpret_cast<SceNpMatching2GetRoomDataExternalListResponse*>(edata.data());
|
||||
GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(edata, resp, sce_get_room_ext_resp);
|
||||
GetRoomDataExternalListResponse_to_SceNpMatching2GetRoomDataExternalListResponse(edata, resp, sce_get_room_ext_resp, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
extra_nps::print_get_roomdata_external_list_resp(sce_get_room_ext_resp);
|
||||
@ -440,11 +444,12 @@ namespace np
|
||||
return error_and_disconnect("Malformed reply to GetRoomDataInternal command");
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(cb_info_opt->ctx_id);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomDataInternal, sizeof(SceNpMatching2GetRoomDataInternalResponse));
|
||||
auto* room_resp = reinterpret_cast<SceNpMatching2GetRoomDataInternalResponse*>(edata.data());
|
||||
auto* room_info = edata.allocate<SceNpMatching2RoomDataInternal>(sizeof(SceNpMatching2RoomDataInternal), room_resp->roomDataInternal);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid);
|
||||
RoomDataInternal_to_SceNpMatching2RoomDataInternal(edata, resp, room_info, npid, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
np_cache.insert_room(room_info);
|
||||
@ -527,11 +532,12 @@ namespace np
|
||||
return error_and_disconnect("Malformed reply to GetRoomMemberDataInternal command");
|
||||
|
||||
u32 event_key = get_event_key();
|
||||
auto [include_onlinename, include_avatarurl] = get_match2_context_options(cb_info_opt->ctx_id);
|
||||
|
||||
auto& edata = allocate_req_result(event_key, SCE_NP_MATCHING2_EVENT_DATA_MAX_SIZE_GetRoomMemberDataInternal, sizeof(SceNpMatching2GetRoomMemberDataInternalResponse));
|
||||
auto* mdata_resp = reinterpret_cast<SceNpMatching2GetRoomMemberDataInternalResponse*>(edata.data());
|
||||
auto* mdata_info = edata.allocate<SceNpMatching2RoomMemberDataInternal>(sizeof(SceNpMatching2RoomMemberDataInternal), mdata_resp->roomMemberDataInternal);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, resp, nullptr, mdata_info);
|
||||
RoomMemberDataInternal_to_SceNpMatching2RoomMemberDataInternal(edata, resp, nullptr, mdata_info, include_onlinename, include_avatarurl);
|
||||
np_memory.shrink_allocation(edata.addr(), edata.size());
|
||||
|
||||
cb_info_opt->queue_callback(req_id, event_key, 0, edata.size());
|
||||
|
@ -195,8 +195,8 @@ namespace extra_nps
|
||||
sceNp2.warning("SceNpMatching2RoomMemberDataInternal:");
|
||||
sceNp2.warning("next: *0x%x", member->next);
|
||||
sceNp2.warning("npId: %s", member->userInfo.npId.handle.data);
|
||||
sceNp2.warning("onlineName: %s", member->userInfo.onlineName->data);
|
||||
sceNp2.warning("avatarUrl: %s", member->userInfo.avatarUrl->data);
|
||||
sceNp2.warning("onlineName: %s", member->userInfo.onlineName ? member->userInfo.onlineName->data : "");
|
||||
sceNp2.warning("avatarUrl: %s", member->userInfo.avatarUrl ? member->userInfo.avatarUrl->data : "");
|
||||
sceNp2.warning("joinDate: %lld", member->joinDate.tick);
|
||||
sceNp2.warning("memberId: %d", member->memberId);
|
||||
sceNp2.warning("teamId: %d", member->teamId);
|
||||
|
Loading…
Reference in New Issue
Block a user