SmartSpectra C++ SDK
Measure human vitals from video with SmartSpectra C++ SDK.
Loading...
Searching...
No Matches
queued_server_write_reactor_impl.hpp
1
2// queued_server_write_reactor_impl.hpp
3// Created by Cascade AI / GPT4.1, 2025
4// Copyright (C) 2025 Presage Security, Inc.
5//
6// SPDX-License-Identifier: LGPL-3.0-or-later
8#pragma once
9
10// === standard library includes (if any) ===
11#include <memory>
12// === third-party includes (if any) ===
13#include <grpc/grpc.h>
14#include <grpcpp/grpcpp.h>
15#include <grpcpp/impl/codegen/server_callback.h>
16// === local includes (if any) ===
17#include "queued_server_write_reactor.hpp"
18
19namespace presage::smartspectra::grpc_bindings {
20
21template <typename TMessage>
22QueuedServerWriteReactor<TMessage>::QueuedServerWriteReactor() = default;
23
24template <typename TMessage>
25QueuedServerWriteReactor<TMessage>::~QueuedServerWriteReactor() = default;
26
27template <typename TMessage>
28void QueuedServerWriteReactor<TMessage>::EnqueueWrite(const TMessage& message) {
29 std::lock_guard<std::mutex> lock(write_mutex_);
30 auto message_pointer = std::make_shared<TMessage>();
31 message_pointer->CopyFrom(message);
32 pending_writes.push(message_pointer);
33 ProcessWriteQueue();
34}
35
36template <typename TMessage>
37void QueuedServerWriteReactor<TMessage>::OnWriteDone(bool ok) {
38 {
39 std::lock_guard<std::mutex> lock(write_mutex_);
40 write_in_progress = false;
41 if (ok) {
42 ProcessWriteQueue();
43 }
44 }
45 if (!ok) {
46 this->Finish(grpc::Status(grpc::StatusCode::UNKNOWN, "Unexpected Failure writing message."));
47 }
48}
49
50template <typename TMessage>
51void QueuedServerWriteReactor<TMessage>::ProcessWriteQueue() {
52 if (!write_in_progress && !pending_writes.empty()) {
53 auto message_ptr = pending_writes.front();
54 pending_writes.pop();
55 write_in_progress = true;
56 this->StartWrite(message_ptr.get());
57 }
58}
59
60} // namespace presage::smartspectra::grpc_bindings