Bus Messages 1.0
Bus Message Serialization Library
Loading...
Searching...
No Matches
ibusmessagebroker.h
Go to the documentation of this file.
1/*
2* Copyright 2025 Ingemar Hedvall
3* SPDX-License-Identifier: MIT
4*/
5
12
13#pragma once
14
15#include <cstdint>
16#include <memory>
17#include <vector>
18#include <atomic>
19#include <thread>
20#include <string>
21#include <mutex>
22
23#include "ibusmessagequeue.h"
24
25namespace bus {
26
30struct Channel {
31 bool used = false;
32 uint32_t queue_index = 0;
33};
34
42public:
43 IBusMessageBroker() = default;
44 virtual ~IBusMessageBroker() = default;
45
53 void Name(std::string name);
54
59 [[nodiscard]] const std::string& Name() const;
60
67 void MemorySize(uint32_t size) {memory_size_ = size; }
68
73 [[nodiscard]] uint32_t MemorySize() const { return memory_size_; }
74
86 void Address(std::string address);
87
92 [[nodiscard]] const std::string& Address() const;
93
103 void Port(uint16_t port) {port_ = port; }
104
109 [[nodiscard]] uint16_t Port() const { return port_; }
110
119 [[nodiscard]] bool IsConnected() const;
120
128 [[nodiscard]] virtual std::shared_ptr<IBusMessageQueue> CreatePublisher();
129
137 [[nodiscard]] virtual std::shared_ptr<IBusMessageQueue> CreateSubscriber();
138
146 void DetachPublisher(const std::shared_ptr<IBusMessageQueue>& publisher);
147
155 void DetachSubscriber(const std::shared_ptr<IBusMessageQueue>& subscriber);
156
161 [[nodiscard]] size_t NofPublishers() const;
162
167 [[nodiscard]] size_t NofSubscribers() const;
168
175 virtual void Start();
176
182 virtual void Stop();
183
184protected:
185 std::atomic<bool> connected_ = false;
186 mutable std::mutex queue_mutex_;
187
189 std::vector<std::shared_ptr<IBusMessageQueue>> publishers_;
191 std::vector<std::shared_ptr<IBusMessageQueue>> subscribers_;
192
193 std::atomic<bool> stop_thread_ = false;
194 std::thread thread_;
195
196private:
197 std::string name_;
198 uint32_t memory_size_ = 16'000;
199 std::string address_;
200 uint16_t port_ = 0;
201
202 void Poll(IBusMessageQueue& queue) const;
203 void InprocessThread() const;
204};
205
206} // bus
207
208
size_t NofSubscribers() const
Returns number of attached subscribers.
std::vector< std::shared_ptr< IBusMessageQueue > > publishers_
List of attached publishers.
Definition ibusmessagebroker.h:189
virtual std::shared_ptr< IBusMessageQueue > CreateSubscriber()
Creates a subscriber queue.
void DetachPublisher(const std::shared_ptr< IBusMessageQueue > &publisher)
Detach a publisher from its broker.
const std::string & Address() const
Returns the TCP/IP address.
virtual void Start()
Starts the broker.
virtual ~IBusMessageBroker()=default
Default destructor.
void DetachSubscriber(const std::shared_ptr< IBusMessageQueue > &subscriber)
Detach a subscriber from its broker.
void Address(std::string address)
Sets the TCP/IP host address.
const std::string & Name() const
Returns the shared memory name.
virtual std::shared_ptr< IBusMessageQueue > CreatePublisher()
Creates a publisker queue.
void Name(std::string name)
Name of the shared memory.
std::vector< std::shared_ptr< IBusMessageQueue > > subscribers_
List of attached subscribers.
Definition ibusmessagebroker.h:191
std::atomic< bool > connected_
True if the broker is connected.
Definition ibusmessagebroker.h:185
void Port(uint16_t port)
Sets the TCP/IP port.
Definition ibusmessagebroker.h:103
std::thread thread_
Working thread.
Definition ibusmessagebroker.h:194
size_t NofPublishers() const
Returns number of attached publishers.
uint16_t Port() const
Returns the TCP/IP port.
Definition ibusmessagebroker.h:109
bool IsConnected() const
Return true if the client is connected.
IBusMessageBroker()=default
Default constructor.
void MemorySize(uint32_t size)
Sets the internal memory size.
Definition ibusmessagebroker.h:67
std::atomic< bool > stop_thread_
True if the thread shall stop.
Definition ibusmessagebroker.h:193
uint32_t MemorySize() const
Returns the internal memory size.
Definition ibusmessagebroker.h:73
virtual void Stop()
Stops the broker.
std::mutex queue_mutex_
Queue (lock) mutex.
Definition ibusmessagebroker.h:186
Interface against a message queue.
Definition ibusmessagequeue.h:41
Defines an interface against a message queue.
Main namespace for the MDF library.
Definition buslogstream.h:24
The channel structure define a shared memory connection.
Definition ibusmessagebroker.h:30
bool used
Indicate if the connection is used.
Definition ibusmessagebroker.h:31
uint32_t queue_index
Queue index of the connection.
Definition ibusmessagebroker.h:32