diff options
Diffstat (limited to 'proto-simconnect/ftnoir_protocol_sc.cpp')
-rw-r--r-- | proto-simconnect/ftnoir_protocol_sc.cpp | 66 |
1 files changed, 33 insertions, 33 deletions
diff --git a/proto-simconnect/ftnoir_protocol_sc.cpp b/proto-simconnect/ftnoir_protocol_sc.cpp index be0c23c4..cfe973a7 100644 --- a/proto-simconnect/ftnoir_protocol_sc.cpp +++ b/proto-simconnect/ftnoir_protocol_sc.cpp @@ -26,7 +26,7 @@ simconnect::~simconnect() void simconnect::run() { - HANDLE event = CreateEvent(NULL, FALSE, FALSE, nullptr); + HANDLE event = CreateEventA(NULL, FALSE, FALSE, nullptr); if (event == nullptr) { @@ -38,60 +38,57 @@ void simconnect::run() { HRESULT hr; - qDebug() << "simconnect: starting"; - if (SUCCEEDED(hr = simconnect_open(&hSimConnect, "opentrack", nullptr, 0, event, 0))) { if (!SUCCEEDED(hr = simconnect_subscribetosystemevent(hSimConnect, 0, "Frame"))) { qDebug() << "simconnect: can't subscribe to frame event:" << hr; - - should_reconnect = true; // will free simconnect handle and continue the loop } Timer tm; - int idle_seconds = 0; + should_reconnect = false; - while (!isInterruptionRequested()) - { - if (should_reconnect) + if (SUCCEEDED(hr)) + while (!isInterruptionRequested()) { - should_reconnect = false; - break; - } - - if (WaitForSingleObject(event, 10) == WAIT_OBJECT_0) - { - tm.start(); - idle_seconds = 0; + if (should_reconnect) + break; - if (!SUCCEEDED(hr = simconnect_calldispatch(hSimConnect, processNextSimconnectEvent, reinterpret_cast<void*>(this)))) + if (WaitForSingleObject(event, 100) == WAIT_OBJECT_0) { - qDebug() << "simconnect: calldispatch failed:" << hr; - break; + tm.start(); + + if (!SUCCEEDED(hr = simconnect_calldispatch(hSimConnect, processNextSimconnectEvent, reinterpret_cast<void*>(this)))) + { + qDebug() << "simconnect: calldispatch failed:" << hr; + break; + } } - } - else - { - if (int(tm.elapsed_seconds()) > idle_seconds) + else { - idle_seconds++; - qDebug() << "simconnect: can't process event for" << int(tm.elapsed_seconds()) << "seconds"; + const int idle_seconds = tm.elapsed_seconds(); + + static constexpr int max_idle_seconds = 2; + + if (idle_seconds >= max_idle_seconds) + { + qDebug() << "simconnect: reconnect"; + break; + } } } - } (void) simconnect_close(hSimConnect); } else - { qDebug() << "simconnect: can't open handle:" << hr; - } if (!isInterruptionRequested()) - Sleep(100); + Sleep(3000); } + qDebug() << "simconnect: exit"; + CloseHandle(event); } @@ -120,8 +117,8 @@ public: { hactctx = INVALID_HANDLE_VALUE; actctx_cookie = 0; - ACTCTXA actx = {0}; - actx.cbSize = sizeof(ACTCTXA); + ACTCTXA actx = {}; + actx.cbSize = sizeof(actx); actx.lpResourceName = MAKEINTRESOURCEA(resid); actx.dwFlags = ACTCTX_FLAG_RESOURCE_NAME_VALID; #ifdef _MSC_VER @@ -229,9 +226,12 @@ void CALLBACK simconnect::processNextSimconnectEvent(SIMCONNECT_RECV* pData, DWO default: break; case SIMCONNECT_RECV_ID_EXCEPTION: + qDebug() << "simconnect: got exception"; + //self.should_reconnect = true; + break; case SIMCONNECT_RECV_ID_QUIT: + qDebug() << "simconnect: got quit event"; self.should_reconnect = true; - qDebug() << "simconnect: received ID_QUIT event"; break; case SIMCONNECT_RECV_ID_EVENT_FRAME: self.handle(); |