mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Discard HELLO Events when in the middle of Joining
This commit is contained in:
parent
0755dc0bbd
commit
71f08a3db8
1 changed files with 16 additions and 7 deletions
|
@ -5751,18 +5751,27 @@ void __NetMatchingCallbacks() //(int matchingId)
|
||||||
auto params = matchingEvents.begin();
|
auto params = matchingEvents.begin();
|
||||||
if (params != matchingEvents.end()) {
|
if (params != matchingEvents.end()) {
|
||||||
u32_le *args = params->data;
|
u32_le *args = params->data;
|
||||||
//auto context = findMatchingContext(args[0]);
|
auto context = findMatchingContext(args[0]);
|
||||||
|
|
||||||
if (actionAfterMatchingMipsCall < 0) {
|
if (actionAfterMatchingMipsCall < 0) {
|
||||||
actionAfterMatchingMipsCall = __KernelRegisterActionType(AfterMatchingMipsCall::Create);
|
actionAfterMatchingMipsCall = __KernelRegisterActionType(AfterMatchingMipsCall::Create);
|
||||||
}
|
}
|
||||||
DEBUG_LOG(SCENET, "AdhocMatching - Remaining Events: %zu", matchingEvents.size());
|
DEBUG_LOG(SCENET, "AdhocMatching - Remaining Events: %zu", matchingEvents.size());
|
||||||
|
auto peer = findPeer(context, (SceNetEtherAddr*)Memory::GetPointer(args[2]));
|
||||||
|
// Discard HELLO Events when in the middle of joining, as some games (ie. Super Pocket Tennis) might tried to join again (TODO: Need to confirm whether sceNetAdhocMatchingSelectTarget supposed to be blocking the current thread or not)
|
||||||
|
if (peer == NULL || (args[1] != PSP_ADHOC_MATCHING_EVENT_HELLO || (peer->state != PSP_ADHOC_MATCHING_PEER_OUTGOING_REQUEST && peer->state != PSP_ADHOC_MATCHING_PEER_INCOMING_REQUEST))) {
|
||||||
DEBUG_LOG(SCENET, "AdhocMatchingCallback: [ID=%i][EVENT=%i][%s]", args[0], args[1], mac2str((SceNetEtherAddr *)Memory::GetPointer(args[2])).c_str());
|
DEBUG_LOG(SCENET, "AdhocMatchingCallback: [ID=%i][EVENT=%i][%s]", args[0], args[1], mac2str((SceNetEtherAddr *)Memory::GetPointer(args[2])).c_str());
|
||||||
|
|
||||||
AfterMatchingMipsCall* after = (AfterMatchingMipsCall*)__KernelCreateAction(actionAfterMatchingMipsCall);
|
AfterMatchingMipsCall* after = (AfterMatchingMipsCall*)__KernelCreateAction(actionAfterMatchingMipsCall);
|
||||||
after->SetData(args[0], args[1], args[2]);
|
after->SetData(args[0], args[1], args[2]);
|
||||||
hleEnqueueCall(args[5], 5, args, after);
|
hleEnqueueCall(args[5], 5, args, after);
|
||||||
matchingEvents.pop_front();
|
matchingEvents.pop_front();
|
||||||
delayus = adhocMatchingEventDelay; // Add extra delay to prevent I/O Timing method from causing disconnection, but delaying too long may cause matchingEvents to pile up
|
delayus = adhocMatchingEventDelay; // Add extra delay to prevent I/O Timing method from causing disconnection, but delaying too long may cause matchingEvents to pile up, and Super Pocket Tennis didn't like to wait for more than 5ms
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DEBUG_LOG(SCENET, "AdhocMatching - Discarding Callback: [ID=%i][EVENT=%i][%s]", args[0], args[1], mac2str((SceNetEtherAddr*)Memory::GetPointer(args[2])).c_str());
|
||||||
|
matchingEvents.pop_front();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be delayed long enough whenever there is a pending callback. Should it be 10-100ms for Matching Events? or Not Less than the delays on sceNetAdhocMatching HLE?
|
// Must be delayed long enough whenever there is a pending callback. Should it be 10-100ms for Matching Events? or Not Less than the delays on sceNetAdhocMatching HLE?
|
||||||
|
|
Loading…
Add table
Reference in a new issue