libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
multicastmanager.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <promeki/objectbase.h>
14#include <promeki/error.h>
15#include <promeki/list.h>
16#include <promeki/string.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
21class UdpSocket;
22
55class MulticastManager : public ObjectBase {
56 PROMEKI_OBJECT(MulticastManager, ObjectBase)
57 public:
62 MulticastManager(ObjectBase *parent = nullptr);
63
65 ~MulticastManager() override;
66
73 Error joinGroup(const SocketAddress &group, UdpSocket *socket);
74
82 Error joinGroup(const SocketAddress &group, UdpSocket *socket, const String &iface);
83
90 Error leaveGroup(const SocketAddress &group, UdpSocket *socket);
91
93 void leaveAllGroups();
94
96 List<SocketAddress> activeGroups() const;
97
103 bool isMemberOf(const SocketAddress &group) const;
104
116 Error joinSourceGroup(const SocketAddress &group, const SocketAddress &source, UdpSocket *socket);
117
125 Error leaveSourceGroup(const SocketAddress &group, const SocketAddress &source, UdpSocket *socket);
126
135 void setDefaultInterface(const String &iface) { _defaultInterface = iface; }
136
138 const String &defaultInterface() const { return _defaultInterface; }
139
141 PROMEKI_SIGNAL(groupJoined, SocketAddress);
142
144 PROMEKI_SIGNAL(groupLeft, SocketAddress);
145
146 private:
147 struct Membership {
148 SocketAddress group;
149 UdpSocket *socket;
150 SocketAddress source; // For SSM, null otherwise
151 bool isSSM = false;
152 };
153
154 List<Membership> _memberships;
155 String _defaultInterface;
156};
157
158PROMEKI_NAMESPACE_END
159
160#endif // PROMEKI_ENABLE_NETWORK