12#ifndef WSFXIO_PUBLISHER_HPP
13#define WSFXIO_PUBLISHER_HPP
15#include "wsf_export.h"
23#include "GenMemIO.hpp"
24#include "GenUniqueId.hpp"
25#include "UtBinder.hpp"
26#include "UtCallback.hpp"
27#include "UtCallbackHolder.hpp"
98 ar&
const_cast<T&
>(aData);
99 auto bytes =
static_cast<int>(buf.GetPutPos());
100 Publish(aKey, (
char*)buf.GetBuffer(), bytes);
103 bool Unsubscribe(
const SubscriptionId& aSubscriptionId);
108 SubscribeCallback* Subscribe(
const WsfXIO_PublishFilter& aFilter, SubscribeCallback* aCallbackPtr);
110 SubscribeCallback* Subscribe(SubscriptionId& aSubscriptionId,
112 SubscribeCallback* aCallbackPtr);
118 return Subscribe(subscriptionId, aFilter, aMethodPtr, aThisPtr);
122 std::unique_ptr<SubscribeCallback>
125 auto callbackPtr = ut::make_unique<SubscribeCallback>(UtStd::Bind(aMethodPtr, aThisPtr));
126 Subscribe(aSubscriptionId, aFilter, callbackPtr.get());
133 return Subscribe(subscriptionId, aFilter, aFunctionPtr);
138 NonMemberFnPtr aFunctionPtr)
140 auto callbackPtr = ut::make_unique<SubscribeCallback>(UtStd::Bind(aFunctionPtr));
141 Subscribe(aSubscriptionId, aFilter, callbackPtr.get());
146 const SubscribeCallback::FunctionType& aFunc)
149 return Subscribe(subscriptionId, aFilter, aFunc);
154 const SubscribeCallback::FunctionType& aFunc)
156 auto callbackPtr = ut::make_unique<SubscribeCallback>(aFunc);
157 Subscribe(aSubscriptionId, aFilter, callbackPtr.get());
168 auto i = mReceivedPublications.find(aKey);
169 if (i != mReceivedPublications.end())
171 GenBuffer io(&i->second.mData[0],
static_cast<int>(i->second.mData.size()));
192 using DataBuffer = std::vector<char>;
194 struct ReceivedSubscription;
201 std::vector<ReceivedSubscription*> mRcvSubscriptions;
207 Subscription& operator=(
const Subscription& aRhs);
210 SubscriptionId mSubscriptionId;
211 WsfXIO_PublishFilter mFilter;
212 SubscribeCallbackList mCallback;
214 bool operator==(
const SubscriptionId& aSubscriptionId)
const {
return mSubscriptionId == aSubscriptionId; }
215 bool operator!=(
const SubscriptionId& aSubscriptionId)
const {
return !(mSubscriptionId == aSubscriptionId); }
218 struct ReceivedPublication
220 WsfXIO_PublishKey mKey;
222 std::vector<Subscription*> mSubscriptions;
225 struct ReceivedSubscription
227 WsfXIO_Connection* mConnectionPtr;
228 WsfXIO_PublishFilter mFilter;
229 SubscriptionId mSubscriptionId;
231 bool operator==(
const SubscriptionId& aSubscriptionId)
const {
return mSubscriptionId == aSubscriptionId; }
232 bool operator!=(
const SubscriptionId& aSubscriptionId)
const {
return !(mSubscriptionId == aSubscriptionId); }
235 bool DispatchToSubscriber(
const std::vector<SubscriptionId>& aSubscriberIds,
const Subscription& aSubscription)
const;
237 std::map<WsfXIO_PublishKey, Publication> mPublished;
238 std::list<Subscription> mSubscriptions;
239 std::map<WsfXIO_PublishKey, ReceivedPublication> mReceivedPublications;
240 std::list<ReceivedSubscription> mReceivedSubscriptions;
242 UtCallbackHolder mCallbacks;
243 WsfXIO_Interface* mInterfacePtr;
bool ok
Definition WsfScriptWeaponClass.cpp:211
bool operator!=(int aId, const WsfStringInt &aRhs)
Not equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:75
bool operator==(int aId, const WsfStringInt &aRhs)
Equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:69
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfXIO_Connection.hpp:37
Definition WsfXIO_Destination.hpp:26
Definition WsfXIO_Interface.hpp:54
Definition WsfXIO_PacketRegistry.hpp:1008
Definition WsfXIO_PublishKey.hpp:159
Definition WsfXIO_PublishKey.hpp:27
std::unique_ptr< SubscribeCallback > Subscribe(const WsfXIO_PublishFilter &aFilter, const SubscribeCallback::FunctionType &aFunc)
Definition WsfXIO_Publisher.hpp:145
GenUniqueId SubscriptionId
Definition WsfXIO_Publisher.hpp:84
bool GetData(const WsfXIO_PublishKey aKey, T &aData)
Definition WsfXIO_Publisher.hpp:165
std::unique_ptr< SubscribeCallback > Subscribe(const WsfXIO_PublishFilter &aFilter, NonMemberFnPtr aFunctionPtr)
Definition WsfXIO_Publisher.hpp:130
void SetDebugLevel(int aDebugLevel)
Definition WsfXIO_Publisher.hpp:180
SubscribeCallback * Subscribe(const WsfXIO_PublishFilter &aFilter, SubscribeCallback *aCallbackPtr)
Definition WsfXIO_Publisher.cpp:378
void Publish(const WsfXIO_PublishKey &aKey, const T &aData)
Publish some data using a key.
Definition WsfXIO_Publisher.hpp:93
UtCallbackListN< void(const WsfXIO_PublishKey &)> SubscribeCallbackList
Definition WsfXIO_Publisher.hpp:85
std::unique_ptr< SubscribeCallback > Subscribe(SubscriptionId &aSubscriptionId, const WsfXIO_PublishFilter &aFilter, MemberFnPtr< C > aMethodPtr, C *aThisPtr)
Definition WsfXIO_Publisher.hpp:123
std::unique_ptr< SubscribeCallback > Subscribe(SubscriptionId &aSubscriptionId, const WsfXIO_PublishFilter &aFilter, NonMemberFnPtr aFunctionPtr)
Definition WsfXIO_Publisher.hpp:136
SubscribeCallbackList::CallbackType SubscribeCallback
Definition WsfXIO_Publisher.hpp:86
WsfXIO_Publisher(WsfXIO_Interface *aInterfacePtr)
Definition WsfXIO_Publisher.cpp:34
std::unique_ptr< SubscribeCallback > Subscribe(const WsfXIO_PublishFilter &aFilter, MemberFnPtr< C > aMethodPtr, C *aThisPtr)
Definition WsfXIO_Publisher.hpp:115
void Unpublish(const WsfXIO_PublishKey &aKey)
Remove a previously published publication.
Definition WsfXIO_Publisher.cpp:177
std::unique_ptr< SubscribeCallback > Subscribe(SubscriptionId &aSubscriptionId, const WsfXIO_PublishFilter &aFilter, const SubscribeCallback::FunctionType &aFunc)
Definition WsfXIO_Publisher.hpp:152
Definition WsfXIO_PacketRegistry.hpp:998