Add a longer delay to P2PSessionRequest_t callback.
Don't fire it if packet is sent before it is fired.merge-requests/30/head
parent
39d1d8dcdf
commit
b1206b0fa2
|
@ -21,6 +21,9 @@
|
|||
#define ORPHANED_PACKET_TIMEOUT (20)
|
||||
#define NEW_CONNECTION_TIMEOUT (20.0)
|
||||
|
||||
//kingdom 2 crowns doesn't work with a 0.3 delay or lower
|
||||
#define NEW_CONNECTION_DELAY (0.4)
|
||||
|
||||
#define OLD_CHANNEL_NUMBER 1
|
||||
|
||||
struct Steam_Networking_Connection {
|
||||
|
@ -78,6 +81,7 @@ public ISteamNetworking
|
|||
std::vector<struct steam_connection_socket> connection_sockets;
|
||||
|
||||
std::map<CSteamID, std::chrono::high_resolution_clock::time_point> new_connection_times;
|
||||
std::queue<CSteamID> new_connections_to_call_cb;
|
||||
|
||||
bool connection_exists(CSteamID id)
|
||||
{
|
||||
|
@ -819,10 +823,7 @@ void RunCallbacks()
|
|||
if (!msg.network().processed()) {
|
||||
if (!connection_exists(source_id)) {
|
||||
if (new_connection_times.find(source_id) == new_connection_times.end()) {
|
||||
P2PSessionRequest_t data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.m_steamIDRemote = CSteamID(source_id);
|
||||
callbacks->addCBResult(data.k_iCallback, &data, sizeof(data), 0.1);
|
||||
new_connections_to_call_cb.push(source_id);
|
||||
new_connection_times[source_id] = std::chrono::high_resolution_clock::now();
|
||||
}
|
||||
} else {
|
||||
|
@ -855,6 +856,25 @@ void RunCallbacks()
|
|||
|
||||
}
|
||||
|
||||
while (!new_connections_to_call_cb.empty()) {
|
||||
CSteamID source_id = new_connections_to_call_cb.front();
|
||||
auto t = new_connection_times.find(source_id);
|
||||
if (t == new_connection_times.end()) {
|
||||
new_connections_to_call_cb.pop();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!check_timedout(t->second, NEW_CONNECTION_DELAY)) {
|
||||
break;
|
||||
}
|
||||
|
||||
P2PSessionRequest_t data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.m_steamIDRemote = source_id;
|
||||
callbacks->addCBResult(data.k_iCallback, &data, sizeof(data));
|
||||
new_connections_to_call_cb.pop();
|
||||
}
|
||||
|
||||
//TODO: not sure if sockets should be wiped right away
|
||||
remove_killed_connection_sockets();
|
||||
|
||||
|
|
Loading…
Reference in New Issue