+
+qint64 IdentServer::addWaitingSocket() {
+ qint64 newSocketId = _socketId++;
+ _waiting.push_back(newSocketId);
+ return newSocketId;
+}
+
+bool IdentServer::hasSocketsBelowId(qint64 id) {
+ return std::any_of(_waiting.begin(), _waiting.end(), [=](qint64 socketId) {
+ return socketId <= id;
+ });
+}
+
+void IdentServer::removeWaitingSocket(qint64 socketId) {
+ _waiting.remove(socketId);
+}
+
+void IdentServer::processWaiting(qint64 socketId) {
+ qint64 lowestSocketId = std::numeric_limits<qint64 >::max();
+ for (qint64 id : _waiting) {
+ if (id < lowestSocketId) {
+ lowestSocketId = id;
+ }
+ }
+ removeWaitingSocket(socketId);
+ _requestQueue.remove_if([=](Request request) {
+ if (request.transactionId < lowestSocketId) {
+ responseUnavailable(request);
+ return true;
+ } else if (request.transactionId > socketId) {
+ return responseAvailable(request);
+ } else {
+ return false;
+ }
+ });
+}
+
+bool operator==(const Request &a, const Request &b) {
+ return a.requestId == b.requestId;
+}