diff --git a/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc b/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc index d918b2264..81dd097e0 100644 --- a/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc +++ b/libretroshare/src/gossipdiscovery/p3gossipdiscovery.cc @@ -111,6 +111,7 @@ p3discovery2::p3discovery2( if(rsEvents) rsEvents->registerEventsHandler( + RsEventType::GOSSIP_DISCOVERY, [this](std::shared_ptr event) { rsEventsHandler(*event); @@ -1345,8 +1346,3 @@ void p3discovery2::rsEventsHandler(const RsEvent& event) // // /* ignore other operations */ // } - -// (cyril) do we still need this?? -RsGossipDiscoveryFriendInviteReceivedEvent::RsGossipDiscoveryFriendInviteReceivedEvent(const std::string& invite) : - RsEvent(RsEventType::GOSSIP_DISCOVERY_INVITE_RECEIVED), - mInvite(invite) {} diff --git a/libretroshare/src/jsonapi/jsonapi.cpp b/libretroshare/src/jsonapi/jsonapi.cpp index b9ddb867c..70443bf5f 100644 --- a/libretroshare/src/jsonapi/jsonapi.cpp +++ b/libretroshare/src/jsonapi/jsonapi.cpp @@ -331,6 +331,15 @@ JsonApiServer::JsonApiServer(): configMutex("JsonApiServer config"), rsEvents, "rsEvents", cAns, session ) ) return; + RsEventType eventType = RsEventType::NONE; + + // deserialize input parameters from JSON + { + RsGenericSerializer::SerializeContext& ctx(cReq); + RsGenericSerializer::SerializeJob j(RsGenericSerializer::FROM_JSON); + RS_SERIAL_PROCESS(eventType); + } + const std::weak_ptr weakSession(session); RsEventsHandlerId_t hId = rsEvents->generateUniqueHandlerId(); std::function)> multiCallback = @@ -365,7 +374,7 @@ JsonApiServer::JsonApiServer(): configMutex("JsonApiServer config"), } ); }; - bool retval = rsEvents->registerEventsHandler(multiCallback, hId); + bool retval = rsEvents->registerEventsHandler(eventType,multiCallback, hId); { RsGenericSerializer::SerializeContext& ctx(cAns); diff --git a/libretroshare/src/retroshare/rsbroadcastdiscovery.h b/libretroshare/src/retroshare/rsbroadcastdiscovery.h index 1bb1e1cc6..92b0e5b0e 100644 --- a/libretroshare/src/retroshare/rsbroadcastdiscovery.h +++ b/libretroshare/src/retroshare/rsbroadcastdiscovery.h @@ -71,23 +71,32 @@ struct RsBroadcastDiscoveryResult : RsSerializable * @brief Event emitted when a non friend new peer is found in the local network * @see RsEvents */ -struct RsBroadcastDiscoveryPeerFoundEvent : RsEvent -{ - RsBroadcastDiscoveryPeerFoundEvent( - const RsBroadcastDiscoveryResult& eventData ) : - RsEvent(RsEventType::BROADCAST_DISCOVERY_PEER_FOUND), mData(eventData) {} +enum class RsBroadcastDiscoveryEventType: uint32_t { + UNKNOWN = 0x00, + PEER_FOUND = 0x01 +}; - RsBroadcastDiscoveryResult mData; +struct RsBroadcastDiscoveryEvent : RsEvent +{ + RsBroadcastDiscoveryEvent() + : RsEvent(RsEventType::BROADCAST_DISCOVERY), + mDiscoveryEventType(RsBroadcastDiscoveryEventType::UNKNOWN) + {} + + virtual ~RsBroadcastDiscoveryEvent() override = default; + + RsBroadcastDiscoveryEventType mDiscoveryEventType; + RsBroadcastDiscoveryResult mData; /// @see RsSerializable void serial_process( RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx) override { RsEvent::serial_process(j, ctx); + + RS_SERIAL_PROCESS(mDiscoveryEventType); RS_SERIAL_PROCESS(mData); } - - ~RsBroadcastDiscoveryPeerFoundEvent() override; }; diff --git a/libretroshare/src/retroshare/rsevents.h b/libretroshare/src/retroshare/rsevents.h index bc5d00cf5..7d6d24505 100644 --- a/libretroshare/src/retroshare/rsevents.h +++ b/libretroshare/src/retroshare/rsevents.h @@ -53,10 +53,10 @@ enum class RsEventType : uint32_t NONE = 0, /// Used to detect uninitialized event /// @see RsBroadcastDiscovery - BROADCAST_DISCOVERY_PEER_FOUND = 1, + BROADCAST_DISCOVERY = 1, /// @see RsDiscPendingPgpReceivedEvent - GOSSIP_DISCOVERY_INVITE_RECEIVED = 2, + GOSSIP_DISCOVERY = 2, /// @see AuthSSL AUTHSSL_CONNECTION_AUTENTICATION = 3, @@ -64,14 +64,14 @@ enum class RsEventType : uint32_t /// @see pqissl PEER_CONNECTION = 4, - /// @see RsGxsChanges + /// @see RsGxsChanges // this one is used in RsGxsBroadcast GXS_CHANGES = 5, /// Emitted when a peer state changes, @see RsPeers PEER_STATE_CHANGED = 6, /// @see RsMailStatusEvent - MAIL_STATUS_CHANGE = 7, + MAIL_STATUS = 7, /// @see RsGxsCircleEvent GXS_CIRCLES = 8, @@ -163,6 +163,7 @@ public: * Every time an event is dispatced the registered events handlers will get * their method handleEvent called with the event passed as paramether. * @jsonapi{development,manualwrapper} + * @param eventType Type of event for which the callback is called * @param multiCallback Function that will be called each time an event * is dispatched. * @param[inout] hId Optional storage for handler id, useful to @@ -173,6 +174,7 @@ public: * @return False on error, true otherwise. */ virtual bool registerEventsHandler( + RsEventType eventType, std::function)> multiCallback, RsEventsHandlerId_t& hId = RS_DEFAULT_STORAGE_PARAM(RsEventsHandlerId_t, 0) ) = 0; diff --git a/libretroshare/src/retroshare/rsgossipdiscovery.h b/libretroshare/src/retroshare/rsgossipdiscovery.h index c9dc9924a..ca1ab0d7c 100644 --- a/libretroshare/src/retroshare/rsgossipdiscovery.h +++ b/libretroshare/src/retroshare/rsgossipdiscovery.h @@ -45,11 +45,18 @@ extern std::shared_ptr rsGossipDiscovery; /** * @brief Emitted when a pending PGP certificate is received */ -struct RsGossipDiscoveryFriendInviteReceivedEvent : RsEvent -{ - RsGossipDiscoveryFriendInviteReceivedEvent( - const std::string& invite ); +enum class RsGossipDiscoveryEventType: uint32_t { + UNKNOWN = 0x00, + PEER_INVITE_RECEIVED = 0x01 +}; + +struct RsGossipDiscoveryEvent : RsEvent +{ + RsGossipDiscoveryEvent(): RsEvent(RsEventType::GOSSIP_DISCOVERY) {} + virtual ~RsGossipDiscoveryEvent() override {} + + RsGossipDiscoveryEventType mGossipDiscoveryEventType; std::string mInvite; /// @see RsSerializable @@ -57,6 +64,7 @@ struct RsGossipDiscoveryFriendInviteReceivedEvent : RsEvent RsGenericSerializer::SerializeContext& ctx ) { RsEvent::serial_process(j,ctx); + RS_SERIAL_PROCESS(mGossipDiscoveryEventType); RS_SERIAL_PROCESS(mInvite); } }; diff --git a/libretroshare/src/retroshare/rsmsgs.h b/libretroshare/src/retroshare/rsmsgs.h index 915444360..3bdc76505 100644 --- a/libretroshare/src/retroshare/rsmsgs.h +++ b/libretroshare/src/retroshare/rsmsgs.h @@ -296,7 +296,6 @@ struct MsgTagType : RsSerializable } //namespace Rs } //namespace Msgs - enum class RsMailStatusEventCode: uint8_t { NEW_MESSAGE = 0x00, @@ -312,9 +311,9 @@ enum class RsMailStatusEventCode: uint8_t struct RsMailStatusEvent : RsEvent { - RsMailStatusEvent() : RsEvent(RsEventType::MAIL_STATUS_CHANGE) {} + RsMailStatusEvent() : RsEvent(RsEventType::MAIL_STATUS) {} - RsMailStatusEventCode mMailStatusEventCode; + RsMailStatusEventCode mMailStatusEventCode; std::set mChangedMsgIds; /// @see RsEvent @@ -326,7 +325,7 @@ struct RsMailStatusEvent : RsEvent RS_SERIAL_PROCESS(mMailStatusEventCode); } - ~RsMailStatusEvent() override; + ~RsMailStatusEvent() override = default; }; #define RS_CHAT_PUBLIC 0x0001 @@ -335,7 +334,7 @@ struct RsMailStatusEvent : RsEvent #define RS_DISTANT_CHAT_STATUS_UNKNOWN 0x0000 #define RS_DISTANT_CHAT_STATUS_TUNNEL_DN 0x0001 -#define RS_DISTANT_CHAT_STATUS_CAN_TALK 0x0002 +#define RS_DISTANT_CHAT_STATUS_CAN_TALK 0x0002 #define RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED 0x0003 #define RS_DISTANT_CHAT_ERROR_NO_ERROR 0x0000 diff --git a/libretroshare/src/rsitems/rsposteditems.cc b/libretroshare/src/rsitems/rsposteditems.cc index 23fb6633b..3c16ff5bd 100644 --- a/libretroshare/src/rsitems/rsposteditems.cc +++ b/libretroshare/src/rsitems/rsposteditems.cc @@ -33,8 +33,8 @@ void RsGxsPostedPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsG // and do not expect to deserialize mImage member if the data block has been consummed entirely (keeps compatibility // of new RS with older posts. - if(j == RsGenericSerializer::DESERIALIZE && ctx.mOffset == ctx.mSize) - return ; + if(j == RsGenericSerializer::DESERIALIZE && ctx.mOffset == ctx.mSize) + return ; if((j == RsGenericSerializer::SIZE_ESTIMATE || j == RsGenericSerializer::SERIALIZE) && mImage.empty()) return ; diff --git a/libretroshare/src/rsserver/p3msgs.cc b/libretroshare/src/rsserver/p3msgs.cc index ad74dbdde..48a694fb0 100644 --- a/libretroshare/src/rsserver/p3msgs.cc +++ b/libretroshare/src/rsserver/p3msgs.cc @@ -538,8 +538,7 @@ bool p3Msgs::initiateDistantChatConnexion( const RsGxsId& to_gxs_id, const RsGxsId& from_gxs_id, DistantChatPeerId& pid, uint32_t& error_code, bool notify ) { - return mChatSrv->initiateDistantChatConnexion( to_gxs_id, from_gxs_id, - pid, error_code, notify ); + return mChatSrv->initiateDistantChatConnexion( to_gxs_id, from_gxs_id, pid, error_code, notify ); } bool p3Msgs::getDistantChatStatus(const DistantChatPeerId& pid,DistantChatPeerInfo& info) { @@ -559,7 +558,6 @@ uint32_t p3Msgs::getDistantChatPermissionFlags() } RsMsgs::~RsMsgs() = default; -RsMailStatusEvent::~RsMailStatusEvent() = default; Rs::Msgs::MessageInfo::~MessageInfo() = default; MsgInfoSummary::~MsgInfoSummary() = default; VisibleChatLobbyRecord::~VisibleChatLobbyRecord() = default; diff --git a/libretroshare/src/services/broadcastdiscoveryservice.cc b/libretroshare/src/services/broadcastdiscoveryservice.cc index e4947a586..f691fd7ed 100644 --- a/libretroshare/src/services/broadcastdiscoveryservice.cc +++ b/libretroshare/src/services/broadcastdiscoveryservice.cc @@ -182,10 +182,15 @@ void BroadcastDiscoveryService::threadTick() } else if(!isFriend) { - typedef RsBroadcastDiscoveryPeerFoundEvent Evt_t; if(rsEvents) - rsEvents->postEvent( - std::shared_ptr(new Evt_t(rbdr)) ); + { + auto ev = std::make_shared(); + + ev->mDiscoveryEventType = RsBroadcastDiscoveryEventType::PEER_FOUND; + ev->mData = rbdr; + + rsEvents->postEvent(ev); + } } } } @@ -307,5 +312,4 @@ bool BroadcastDiscoveryService::assertMulticastLockIsvalid() RsBroadcastDiscovery::~RsBroadcastDiscovery() = default; RsBroadcastDiscoveryResult::~RsBroadcastDiscoveryResult() = default; -RsBroadcastDiscoveryPeerFoundEvent::~RsBroadcastDiscoveryPeerFoundEvent() = default; BroadcastDiscoveryPack::~BroadcastDiscoveryPack() = default; diff --git a/libretroshare/src/services/rseventsservice.cc b/libretroshare/src/services/rseventsservice.cc index b0329fbb2..c1aa0958c 100644 --- a/libretroshare/src/services/rseventsservice.cc +++ b/libretroshare/src/services/rseventsservice.cc @@ -100,22 +100,42 @@ RsEventsHandlerId_t RsEventsService::generateUniqueHandlerId_unlocked() } bool RsEventsService::registerEventsHandler( + RsEventType eventType, std::function)> multiCallback, RsEventsHandlerId_t& hId ) { RS_STACK_MUTEX(mHandlerMapMtx); - if(!hId) hId = generateUniqueHandlerId_unlocked(); - mHandlerMap[hId] = multiCallback; + + if( (int)eventType > mHandlerMaps.size() + 10) + { + RsErr() << "Cannot register an event handler for an event type larger than 10 plus the max pre-defined event (value passed was " << (int)eventType << " whereas max is " << (int)RsEventType::MAX << ")" << std::endl; + return false; + } + + if( (int)eventType >= mHandlerMaps.size()) + mHandlerMaps.resize( (int)eventType +1 ); + + if(!hId) + hId = generateUniqueHandlerId_unlocked(); + + mHandlerMaps[(int)eventType][hId] = multiCallback; return true; } bool RsEventsService::unregisterEventsHandler(RsEventsHandlerId_t hId) { RS_STACK_MUTEX(mHandlerMapMtx); - auto it = mHandlerMap.find(hId); - if(it == mHandlerMap.end()) return false; - mHandlerMap.erase(it); - return true; + + for(uint32_t i=0;i event) { std::function)> mCallback; - mHandlerMapMtx.lock(); - auto cbpt = mHandlerMap.begin(); - mHandlerMapMtx.unlock(); + uint32_t event_type_index = static_cast(event->mType); -getHandlerFromMapLock: - mHandlerMapMtx.lock(); - if(cbpt != mHandlerMap.end()) { - mCallback = cbpt->second; - ++cbpt; - } - mHandlerMapMtx.unlock(); + RS_STACK_MUTEX(mHandlerMapMtx); /* LOCKED AREA */ - if(mCallback) - { - mCallback(event); // It is relevant that this happens outside mutex - mCallback = std::function)>(nullptr); - goto getHandlerFromMapLock; + if(event_type_index >= mHandlerMaps.size() || event_type_index < 1) + { + RsErr() << "Cannot handle an event of type " << event_type_index << ": out of scope!" << std::endl; + return; + } + + // Call all clients that registered a callback for this event type + + for(auto cbit: mHandlerMaps[event_type_index]) + cbit.second(event); + + // Also call all clients that registered with NONE, meaning that they expect all events + + for(auto cbit: mHandlerMaps[static_cast(RsEventType::NONE)]) + cbit.second(event); } } diff --git a/libretroshare/src/services/rseventsservice.h b/libretroshare/src/services/rseventsservice.h index b467358af..805a173a0 100644 --- a/libretroshare/src/services/rseventsservice.h +++ b/libretroshare/src/services/rseventsservice.h @@ -35,6 +35,7 @@ class RsEventsService : public: RsEventsService(): mHandlerMapMtx("RsEventsService::mHandlerMapMtx"), mLastHandlerId(1), + mHandlerMaps(static_cast(RsEventType::MAX)), mEventQueueMtx("RsEventsService::mEventQueueMtx") {} /// @see RsEvents @@ -54,6 +55,7 @@ public: /// @see RsEvents bool registerEventsHandler( + RsEventType eventType, std::function)> multiCallback, RsEventsHandlerId_t& hId = RS_DEFAULT_STORAGE_PARAM(RsEventsHandlerId_t, 0) ) override; @@ -64,9 +66,11 @@ public: protected: RsMutex mHandlerMapMtx; RsEventsHandlerId_t mLastHandlerId; - std::map< - RsEventsHandlerId_t, - std::function)> > mHandlerMap; + + std::vector< + std::map< + RsEventsHandlerId_t, + std::function)> > > mHandlerMaps; RsMutex mEventQueueMtx; std::deque< std::shared_ptr > mEventQueue; diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index 328b04772..677b282cd 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -1886,11 +1886,15 @@ void p3turtle::handleTunnelResult(RsTurtleTunnelOkItem *item) // because there is not too much file hashes to be active at a time, // and this mostly prevents from sending the hash back in the tunnel. - bool found = false ; +#ifdef P3TURTLE_DEBUG + bool ext_found = false ; +#endif for(std::map::iterator it(_incoming_file_hashes.begin());it!=_incoming_file_hashes.end();++it) if(it->second.last_request == item->request_id) { - found = true ; +#ifdef P3TURTLE_DEBUG + ext_found = true ; +#endif { // add the tunnel uniquely @@ -1917,7 +1921,7 @@ void p3turtle::handleTunnelResult(RsTurtleTunnelOkItem *item) } } #ifdef P3TURTLE_DEBUG - if(!found) + if(!ext_found) std::cerr << "p3turtle: error. Could not find hash that emmitted tunnel request " << reinterpret_cast(item->tunnel_id) << std::endl ; #endif } diff --git a/retroshare-gui/src/gui/NewsFeed.cpp b/retroshare-gui/src/gui/NewsFeed.cpp index 872a819ce..c64c758ea 100644 --- a/retroshare-gui/src/gui/NewsFeed.cpp +++ b/retroshare-gui/src/gui/NewsFeed.cpp @@ -72,8 +72,21 @@ static NewsFeed *instance = NULL; /** Constructor */ NewsFeed::NewsFeed(QWidget *parent) : MainPage(parent), ui(new Ui::NewsFeed) { - mEventHandlerId =0; // needed to force intialization by registerEventsHandler() - rsEvents->registerEventsHandler( [this](std::shared_ptr event) { handleEvent(event); }, mEventHandlerId ); + mEventTypes = { + RsEventType::AUTHSSL_CONNECTION_AUTENTICATION, + RsEventType::PEER_CONNECTION , + RsEventType::GXS_CIRCLES , + RsEventType::GXS_CHANNELS , + RsEventType::GXS_FORUMS , + RsEventType::GXS_POSTED , + RsEventType::MAIL_STATUS + }; + + for(uint32_t i=0;iregisterEventsHandler(mEventTypes[i], [this](std::shared_ptr event) { handleEvent(event); }, mEventHandlerIds.back() ); + } /* Invoke the Qt Designer generated object setup routine */ ui->setupUi(this); @@ -117,7 +130,8 @@ QString hlp_str = tr( NewsFeed::~NewsFeed() { - rsEvents->unregisterEventsHandler(mEventHandlerId); + for(uint32_t i=0;iunregisterEventsHandler(mEventHandlerIds[i]); // save settings processSettings(false); @@ -190,7 +204,7 @@ void NewsFeed::handleEvent_main_thread(std::shared_ptr event) if(event->mType == RsEventType::GXS_POSTED && (flags & RS_FEED_TYPE_POSTED)) handlePostedEvent(event); - if(event->mType == RsEventType::MAIL_STATUS_CHANGE && (flags & RS_FEED_TYPE_MSG)) + if(event->mType == RsEventType::MAIL_STATUS && (flags & RS_FEED_TYPE_MSG)) handleMailEvent(event); } @@ -200,6 +214,7 @@ void NewsFeed::handleMailEvent(std::shared_ptr event) dynamic_cast(event.get()); if(!pe) return; + switch(pe->mMailStatusEventCode) { case RsMailStatusEventCode::NEW_MESSAGE: diff --git a/retroshare-gui/src/gui/NewsFeed.h b/retroshare-gui/src/gui/NewsFeed.h index 2492521f5..ec9aabcb5 100644 --- a/retroshare-gui/src/gui/NewsFeed.h +++ b/retroshare-gui/src/gui/NewsFeed.h @@ -118,7 +118,8 @@ private: /* UI - from Designer */ Ui::NewsFeed *ui; - RsEventsHandlerId_t mEventHandlerId; + std::vector mEventHandlerIds; + std::vector mEventTypes; }; #endif diff --git a/retroshare-gui/src/gui/common/NewFriendList.cpp b/retroshare-gui/src/gui/common/NewFriendList.cpp index 7b07f9086..cb4c68030 100644 --- a/retroshare-gui/src/gui/common/NewFriendList.cpp +++ b/retroshare-gui/src/gui/common/NewFriendList.cpp @@ -178,7 +178,7 @@ NewFriendList::NewFriendList(QWidget *parent) : /* RsAutoUpdatePage(5000,parent) ui->filterLineEdit->showFilterIcon(); mEventHandlerId=0; // forces initialization - rsEvents->registerEventsHandler( [this](std::shared_ptr e) { handleEvent(e); }, mEventHandlerId ); + rsEvents->registerEventsHandler( RsEventType::PEER_CONNECTION, [this](std::shared_ptr e) { handleEvent(e); }, mEventHandlerId ); mModel = new RsFriendListModel(); mProxyModel = new FriendListSortFilterProxyModel(ui->peerTreeWidget->header(),this); @@ -258,13 +258,10 @@ NewFriendList::NewFriendList(QWidget *parent) : /* RsAutoUpdatePage(5000,parent) void NewFriendList::handleEvent(std::shared_ptr e) { - if(e->mType == RsEventType::PEER_CONNECTION) - { - // /!\ The function we're in is called from a different thread. It's very important - // to use this trick in order to avoid data races. + // /!\ The function we're in is called from a different thread. It's very important + // to use this trick in order to avoid data races. - RsQThreadUtils::postToObject( [=]() { forceUpdateDisplay() ; }, this ) ; - } + RsQThreadUtils::postToObject( [=]() { forceUpdateDisplay() ; }, this ) ; } NewFriendList::~NewFriendList() diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp index f346b3470..2e1b6dc7e 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelDialog.cpp @@ -52,17 +52,15 @@ GxsChannelDialog::GxsChannelDialog(QWidget *parent) { mEventHandlerId = 0; // Needs to be asynced because this function is likely to be called by another thread! - rsEvents->registerEventsHandler( [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); + rsEvents->registerEventsHandler(RsEventType::GXS_CHANNELS, [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); } void GxsChannelDialog::handleEvent_main_thread(std::shared_ptr event) { - if(event->mType == RsEventType::GXS_CHANNELS) - { - const RsGxsChannelEvent *e = dynamic_cast(event.get()); + const RsGxsChannelEvent *e = dynamic_cast(event.get()); - if(!e) - return; + if(!e) + return; switch(e->mChannelEventCode) { @@ -71,7 +69,6 @@ void GxsChannelDialog::handleEvent_main_thread(std::shared_ptr ev default: break; } - } } GxsChannelDialog::~GxsChannelDialog() diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp index c40467761..7985d6489 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidget.cpp @@ -132,17 +132,15 @@ GxsChannelPostsWidget::GxsChannelPostsWidget(const RsGxsGroupId &channelId, QWid mEventHandlerId = 0; // Needs to be asynced because this function is likely to be called by another thread! - rsEvents->registerEventsHandler( [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); + rsEvents->registerEventsHandler(RsEventType::GXS_CHANNELS, [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); } void GxsChannelPostsWidget::handleEvent_main_thread(std::shared_ptr event) { - if(event->mType == RsEventType::GXS_CHANNELS) - { - const RsGxsChannelEvent *e = dynamic_cast(event.get()); + const RsGxsChannelEvent *e = dynamic_cast(event.get()); - if(!e) - return; + if(!e) + return; switch(e->mChannelEventCode) { @@ -156,7 +154,6 @@ void GxsChannelPostsWidget::handleEvent_main_thread(std::shared_ptrregisterEventsHandler( [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); + rsEvents->registerEventsHandler(RsEventType::GXS_FORUMS, [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); } void GxsForumThreadWidget::handleEvent_main_thread(std::shared_ptr event) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp index aa4177a72..2282db1bb 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsDialog.cpp @@ -45,7 +45,7 @@ GxsForumsDialog::GxsForumsDialog(QWidget *parent) mEventHandlerId = 0; // Needs to be asynced because this function is likely to be called by another thread! - rsEvents->registerEventsHandler( [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); + rsEvents->registerEventsHandler(RsEventType::GXS_FORUMS, [this](std::shared_ptr event) { RsQThreadUtils::postToObject( [=]() { handleEvent_main_thread(event); }, this ); }, mEventHandlerId ); } void GxsForumsDialog::handleEvent_main_thread(std::shared_ptr event) diff --git a/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp b/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp index bd2d647f5..934226da4 100644 --- a/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp +++ b/retroshare-gui/src/util/RsGxsUpdateBroadcast.cpp @@ -39,11 +39,9 @@ RsGxsUpdateBroadcast::RsGxsUpdateBroadcast(RsGxsIfaceHelper *ifaceImpl) : { mEventHandlerId = 0; // forces initialization in registerEventsHandler() - rsEvents->registerEventsHandler( [this](std::shared_ptr event) + rsEvents->registerEventsHandler(RsEventType::GXS_CHANGES, [this](std::shared_ptr event) { - if(event->mType == RsEventType::GXS_CHANGES) - onChangesReceived(*dynamic_cast(event.get())); - + onChangesReceived(*dynamic_cast(event.get())); }, mEventHandlerId ); }