IXWebSocket/ixwebsocket/IXCancellationRequest.cpp

33 lines
894 B
C++
Raw Permalink Normal View History

2019-01-03 12:53:44 -08:00
/*
* IXCancellationRequest.cpp
* Author: Benjamin Sergeant
* Copyright (c) 2019 Machine Zone, Inc. All rights reserved.
*/
#include "IXCancellationRequest.h"
#include <chrono>
namespace ix
2019-01-03 12:53:44 -08:00
{
2019-09-23 10:25:23 -07:00
CancellationRequest makeCancellationRequestWithTimeout(
int secs, std::atomic<bool>& requestInitCancellation)
2019-01-03 12:53:44 -08:00
{
auto start = std::chrono::system_clock::now();
auto timeout = std::chrono::seconds(secs);
2019-09-23 10:25:23 -07:00
auto isCancellationRequested = [&requestInitCancellation, start, timeout]() -> bool {
2019-01-03 12:53:44 -08:00
// Was an explicit cancellation requested ?
if (requestInitCancellation) return true;
2019-01-03 12:53:44 -08:00
auto now = std::chrono::system_clock::now();
if ((now - start) > timeout) return true;
// No cancellation request
return false;
};
return isCancellationRequested;
}
2019-09-23 10:25:23 -07:00
} // namespace ix