Luanti 5.16.0-dev
 
Loading...
Searching...
No Matches
sscsm_stupid_channel.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Luanti authors
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4
5#pragma once
6
7#include <memory>
8#include <mutex>
9#include <condition_variable>
10#include "sscsm_irequest.h"
11
12// FIXME: replace this with an ipc channel
14{
15 std::mutex m_mutex;
16 std::condition_variable m_condvar;
19
20public:
22 {
23 {
24 auto lock = std::lock_guard(m_mutex);
25
26 m_request = std::move(request);
27 }
28
29 m_condvar.notify_one();
30 }
31
33 {
34 auto lock = std::unique_lock(m_mutex);
35
36 while (!m_answer) {
37 m_condvar.wait(lock);
38 }
39
40 auto answer = std::move(m_answer);
41 m_answer = nullptr;
42
43 return answer;
44 }
45
47 {
48 sendA(std::move(request));
49
50 return recvA();
51 }
52
54 {
55 {
56 auto lock = std::lock_guard(m_mutex);
57
58 m_answer = std::move(answer);
59 }
60
61 m_condvar.notify_one();
62 }
63
65 {
66 auto lock = std::unique_lock(m_mutex);
67
68 while (!m_request) {
69 m_condvar.wait(lock);
70 }
71
72 auto request = std::move(m_request);
73 m_request = nullptr;
74
75 return request;
76 }
77
79 {
80 sendB(std::move(answer));
81
82 return recvB();
83 }
84};
Definition sscsm_stupid_channel.h:14
SerializedSSCSMRequest exchangeB(SerializedSSCSMAnswer answer)
Definition sscsm_stupid_channel.h:78
std::condition_variable m_condvar
Definition sscsm_stupid_channel.h:16
SerializedSSCSMRequest recvB()
Definition sscsm_stupid_channel.h:64
void sendA(SerializedSSCSMRequest request)
Definition sscsm_stupid_channel.h:21
SerializedSSCSMAnswer exchangeA(SerializedSSCSMRequest request)
Definition sscsm_stupid_channel.h:46
std::mutex m_mutex
Definition sscsm_stupid_channel.h:15
SerializedSSCSMAnswer recvA()
Definition sscsm_stupid_channel.h:32
void sendB(SerializedSSCSMAnswer answer)
Definition sscsm_stupid_channel.h:53
SerializedSSCSMAnswer m_answer
Definition sscsm_stupid_channel.h:18
SerializedSSCSMRequest m_request
Definition sscsm_stupid_channel.h:17
std::unique_ptr< ISSCSMAnswer > SerializedSSCSMAnswer
Definition sscsm_irequest.h:25
std::unique_ptr< ISSCSMRequest > SerializedSSCSMRequest
Definition sscsm_irequest.h:37