CGraph
Public Member Functions | Protected Member Functions | Private Attributes | Friends | List of all members
GMessageManager< T, > Class Template Reference

基于topic,支持send/recv(一发一收),也支持pub/sub(一发多收) sub端每次订阅特定的topic之前都要先bindTopic生成一个唯一的conn_id_,实际上是绑定到这个conn_id_对应的GMessageObject的消息队列 recv是一发一收则可以直接用topic作为入参 More...

#include <GMessageManager.h>

Inheritance diagram for GMessageManager< T, >:
Inheritance graph
[legend]
Collaboration diagram for GMessageManager< T, >:
Collaboration graph
[legend]

Public Member Functions

template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus createTopic (const std::string &topic, CUInt size)
 
CStatus removeTopic (const std::string &topic)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus recvTopicValue (const std::string &topic, TImpl &value, CMSec timeout=CGRAPH_MAX_BLOCK_TTL)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus recvTopicValue (const std::string &topic, std::unique_ptr< TImpl > &value, CMSec timeout=CGRAPH_MAX_BLOCK_TTL)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus sendTopicValue (const std::string &topic, const TImpl &value, GMessagePushStrategy strategy)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus sendTopicValue (const std::string &topic, std::unique_ptr< TImpl > &value, GMessagePushStrategy strategy)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CIndex bindTopic (const std::string &topic, CUInt size)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus pubTopicValue (const std::string &topic, const TImpl &value, GMessagePushStrategy strategy)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus subTopicValue (CIndex connId, TImpl &value, CMSec timeout=CGRAPH_MAX_BLOCK_TTL)
 
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus subTopicValue (CIndex connId, std::unique_ptr< TImpl > &value, CMSec timeout=CGRAPH_MAX_BLOCK_TTL)
 
CStatus dropTopic (const std::string &topic)
 
CStatus clear () final
 
- Public Member Functions inherited from GMessageObject
CStatus run () final
 
- Public Member Functions inherited from CObject
 CObject ()=default
 
virtual ~CObject ()=default
 

Protected Member Functions

CStatus init () final
 
CStatus destroy () final
 
 ~GMessageManager () override
 
- Protected Member Functions inherited from GraphManager< GMessage< GMessageParam > >
virtual CStatus add (GMessage< GMessageParam > *object)
 
virtual CStatus remove (GMessage< GMessageParam > *object)
 
virtual CBool find (GMessage< GMessageParam > *object) const
 
virtual CStatus create (const std::string &key)
 
virtual GMessage< GMessageParam > * get (const std::string &key)
 
virtual CStatus reset ()
 
virtual CSize getSize () const
 
CStatus run () override
 

Private Attributes

std::unordered_map< std::string, GMessagePtr< T > > send_recv_message_map_
 
std::unordered_map< std::string, std::set< GMessagePtr< T > > > pub_sub_message_map_
 
std::unordered_map< CIndex, GMessagePtr< T > > conn_message_map_
 
CIndex cur_conn_id_ = 0
 
std::mutex pub_sub_mutex_
 
std::mutex send_recv_mutex_
 

Friends

template<typename U , USingletonType , CBool >
class USingleton
 

Detailed Description

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
class GMessageManager< T, >

基于topic,支持send/recv(一发一收),也支持pub/sub(一发多收) sub端每次订阅特定的topic之前都要先bindTopic生成一个唯一的conn_id_,实际上是绑定到这个conn_id_对应的GMessageObject的消息队列 recv是一发一收则可以直接用topic作为入参

Template Parameters
T

Constructor & Destructor Documentation

◆ ~GMessageManager()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
GMessageManager< T, >::~GMessageManager ( )
inlineoverrideprotected
Here is the call graph for this function:

Member Function Documentation

◆ bindTopic()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CIndex GMessageManager< T, >::bindTopic ( const std::string &  topic,
CUInt  size 
)
inline

绑定对应的topic信息,并且获取 conn_id 信息

Template Parameters
TImpl
Parameters
topic
size
Returns

◆ clear()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CStatus GMessageManager< T, >::clear ( )
inlinefinalvirtual

清空数据

Returns

Implements GraphManager< GMessage< GMessageParam > >.

◆ createTopic()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::createTopic ( const std::string &  topic,
CUInt  size 
)
inline

创建 topic

Template Parameters
TImpl
Parameters
topic
size
Returns

◆ destroy()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CStatus GMessageManager< T, >::destroy ( )
inlinefinalprotectedvirtual

释放函数

Reimplemented from CObject.

◆ dropTopic()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CStatus GMessageManager< T, >::dropTopic ( const std::string &  topic)
inline

删除对应的topic信息

Parameters
topic
Returns

◆ init()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CStatus GMessageManager< T, >::init ( )
inlinefinalprotectedvirtual

初始化函数

仅可能被 USingleton 类调用,自动构造时候使用 防止菱形引用的奇异

Reimplemented from CObject.

◆ pubTopicValue()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::pubTopicValue ( const std::string &  topic,
const TImpl &  value,
GMessagePushStrategy  strategy 
)
inline

开始发送对应topic的信息

Template Parameters
TImpl
Parameters
topic
value
strategy
Returns

◆ recvTopicValue() [1/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::recvTopicValue ( const std::string &  topic,
std::unique_ptr< TImpl > &  value,
CMSec  timeout = CGRAPH_MAX_BLOCK_TTL 
)
inline

根据传入的topic,获得信息。仅针对传入智能指针的情况

Template Parameters
TImpl
Parameters
topic
value
timeout
Returns
@notice 这里的逻辑,跟上面的函数一致。里面调用了底层RingBuffer的同名不同入参的接口。 本人暂时没有能力完成接口的统一。如果有了解这一块内容的朋友,欢迎交流指正。

◆ recvTopicValue() [2/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::recvTopicValue ( const std::string &  topic,
TImpl &  value,
CMSec  timeout = CGRAPH_MAX_BLOCK_TTL 
)
inline

根据传入的topic,获得信息

Template Parameters
TImpl
Parameters
topic
value
timeout
Returns

◆ removeTopic()

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CStatus GMessageManager< T, >::removeTopic ( const std::string &  topic)
inline

删除 topic

Parameters
topic
Returns

◆ sendTopicValue() [1/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::sendTopicValue ( const std::string &  topic,
const TImpl &  value,
GMessagePushStrategy  strategy 
)
inline

根据传入的topic,输入信息

Template Parameters
TImpl
Parameters
topic
value
strategy
Returns

◆ sendTopicValue() [2/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::sendTopicValue ( const std::string &  topic,
std::unique_ptr< TImpl > &  value,
GMessagePushStrategy  strategy 
)
inline

根据传入的topic,输入智能指针类型的信息

Template Parameters
TImpl
Parameters
topic
value
strategy
Returns

◆ subTopicValue() [1/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::subTopicValue ( CIndex  connId,
std::unique_ptr< TImpl > &  value,
CMSec  timeout = CGRAPH_MAX_BLOCK_TTL 
)
inline

根据传入的 connId信息,来获取对应的message信息。仅针对传入智能指针的情况

Template Parameters
TImpl
Parameters
connId
value
timeout
Returns

◆ subTopicValue() [2/2]

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename TImpl , c_enable_if_t< std::is_base_of< T, TImpl >::value, int > = 0>
CStatus GMessageManager< T, >::subTopicValue ( CIndex  connId,
TImpl &  value,
CMSec  timeout = CGRAPH_MAX_BLOCK_TTL 
)
inline

根据传入的 connId信息,来获取对应的message信息

Template Parameters
TImpl
Parameters
connId
value
timeout
Returns

Friends And Related Function Documentation

◆ USingleton

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
template<typename U , USingletonType , CBool >
friend class USingleton
friend

Member Data Documentation

◆ conn_message_map_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
std::unordered_map<CIndex, GMessagePtr<T> > GMessageManager< T, >::conn_message_map_
private

◆ cur_conn_id_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
CIndex GMessageManager< T, >::cur_conn_id_ = 0
private

◆ pub_sub_message_map_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
std::unordered_map<std::string, std::set<GMessagePtr<T> > > GMessageManager< T, >::pub_sub_message_map_
private

◆ pub_sub_mutex_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
std::mutex GMessageManager< T, >::pub_sub_mutex_
private

◆ send_recv_message_map_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
std::unordered_map<std::string, GMessagePtr<T> > GMessageManager< T, >::send_recv_message_map_
private

◆ send_recv_mutex_

template<typename T = GMessageParam, c_enable_if_t< std::is_base_of< GMessageParam, T >::value, int > = 0>
std::mutex GMessageManager< T, >::send_recv_mutex_
private

The documentation for this class was generated from the following file: