/**@file $RCSfile: tbus.h,v $
Invoked function header file for tsf4g-tbus module
$Id: tbus.h,v 1.24 2009-09-14 10:53:48 jacky Exp $
@author $Author: jacky $
@date $Date: 2009-09-14 10:53:48 $
@version $Revision: 1.24 $
@note Editor: Vim 6.3, Gcc 4.0.2, tab=4
@note Platform: Linux
*/
#ifndef _TBUS_H
#define _TBUS_H
/* automatically include the correct library on windows */
#if defined(_WIN32) || defined(_WIN64)
#ifdef TSF4G_SMALL_LIB
#undef _TSF4G_LARGE_LIB_
#endif
#ifdef _TSF4G_LARGE_LIB_
#ifdef _DEBUG
#pragma comment(lib, "libtsf4g_d.lib")
#else
#pragma comment(lib, "libtsf4g.lib")
#endif
#else
#ifdef _DEBUG
#pragma comment(lib, "libtbus_d.lib")
#else
#pragma comment(lib, "libtbus.lib")
#endif
#endif
#endif /*#if defined(_WIN32) || defined(_WIN64)*/
#include "pal/pal.h"
#include "tlog/tlog.h"
#include "tbus/tbus_macros.h"
#include "tbus/tbus_error.h"
/**@name 函数参数输入/输出属性
*@{
*/
/*表示该参数只是输入参数*/
#ifndef IN
#define IN
#endif
/*表示该参数只是输出参数*/
#ifndef OUT
#define OUT
#endif
/*表示该参数既是输入参数,又是输出参数*/
#ifndef INOUT
#define INOUT
#endif
/**@}*/ // 函数参数输入/输出属性
/* TbusFlag*/
enum tagTbusFlag
{
TBUS_FLAG_START_DYE_MSG = 1, /* 指示tbus系统对此消息进行染色 */
TBUS_FLAG_KEEP_DYE_MSG = 2, /* 指示tbus系统保持前一个消息的染色信息 */
TBUS_FLAG_SET_TEST_MSG = 4, /* 指示tbus系统此数据包为测试数据包 */
TBUS_FLAG_WITH_TIMESTAMP = 8, /* 指示携带时间戳信息 */
TBUS_FLAG_USE_GETTIMEOFDAY = 16, /* 指示使用gettimeofday取得的时间作为时间戳值 */
};
/* initialize flags*/
enum tagTbusInitFlag
{
TBUS_INIT_FLAG_NONE = 0x00000000, /*无特殊标记*/
TBUS_INIT_FLAG_USE_SAVED_TIME = 0x00000001, /*记录时间戳值时使用tbus_set_current_time设置的时间值*/
};
/*channel mode initialize flags*/
enum tagTbusChannelModeInitFlag
{
TBUS_CHANNEL_MODE_INIT_FLAG_NONE = 0x00000000, /*无特殊标记*/
/*打开缺省日志功能,对channel调用进行调试跟踪,此标志位只适合单线程且只是调试问题时使用,
正式运营不能打开此标志位*/
TBUS_CHANNEL_MODE_INIT_FLAG_ENABLE_TRACE = 0x00000001,
};
/* tbus handle option */
enum tagTbusHandleOptionName
{
/* 设置了此选项后,句柄只能接收tbus_connect指定的相关通道 */
TBUS_HANDLE_OPT_NAME_EXCLUSIVE_CHANNELS = 1,
/* 通过设置此选项,指示所有通道发送数据时携带时间戳信息 */
TBUS_HANDLE_OPT_NAME_CHANNELS_TIMESTAMP = 2,
};
typedef enum tagTbusHandleOptionName TBUSHANDLEOPTIONAME;
typedef enum tagTbusHandleOptionName *LPTBUSHANDLEOPTIONAME;
enum tagTbusPeerStateType
{
TBUS_PEER_STATE_UNAVAILABLE = 0x00,
TBUS_PEER_STATE_AVAILABLE = 0x01,
};
#define TBUS_ADDR_DEFAULT 0 /* 表示适配第一个地址*/
#define TBUS_ADDR_ALL -1 /* 表示适配所有地址 */
#define TBUS_LOGCAT_NAME "tsf4g.tbus" /*tbus日志类名称*/
#define TBUS_DEFAULT_GCIM_KEY "1688" /*defalt share memory key fro GCIM(Global Channel Infomation Map)*/
#define TBUS_DEFAULT_GRM_KEY "2688" /*defalt share memory key fro GRM(Global Route Map)*/
#define TBUS_ROUTE_GLOBAL_SHMKEY 1688 /*defalt share memory key fro GCIM(Global Channel Infomation Map), for tbus_init*/
#define TBUS_CHANNEL_MAGIC 0x42545553 //TBUS
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef int TBUSADDR; /*tbus系统通信地址*/
typedef int *LPTBUSADDR; /*tbus系统通信地址*/
typedef struct tagTbusChannel *LPTBUSCHANNEL;
/*route info of package */
struct tagHeadRoute
{
TBUSADDR iSrc;
};
typedef struct tagHeadRoute HEADROUTE;
typedef struct tagHeadRoute *LPHEADROUTE;
struct tagTbusTimeStamp
{
int iIsAvailable;
long long llSec;
unsigned int dwUSec;
unsigned int dwCumm;
};
typedef struct tagTbusTimeStamp TBUSTIMESTAMP;
typedef struct tagTbusTimeStamp *LPTBUSTIMESTAMP;
struct tagTbusRecv
{
IN int iHandle; /* tbus 句柄 */
INOUT TBUSADDR iSrc; /* tbus 源地址 */
INOUT TBUSADDR iDst; /* tbus 目的地址 */
INOUT void *pvData; /* 接收数据的缓冲区 */
INOUT size_t tDataLen; /* 保存接收数据的长度 */
IN int iFlag; /* 取tagTbusFlag中的值,可"|"操作 */
INOUT LPTBUSTIMESTAMP pstTimeStamp; /* 如果不为NULL,接收消息的时间戳值 */
};
typedef struct tagTbusRecv TBUSRECV;
typedef struct tagTbusRecv *LPTBUSRECV;
struct tagTbusPeerState
{
long long llLastBeatTime;
int iIsAvailable; /*参考enum类型tagTbusPeerStateType*/
int iTimeOutGap;
};
typedef struct tagTbusPeerState TBUSPEERSTATE;
typedef struct tagTbusPeerState *LPTBUSPEERSTATE;
/**@defgroup TBUS_INIT TBUS_句柄管理
*@{
*/
/**brief 初始化Tbus系统
* 其主要职责是向tbus配置管理系统注册业务ID,并尝试挂载(attach)上保存tbus
* 通道配置信息的共享内存GCIM(Global Channel Infomation Map)
*@param[in] a_pszShmkey 保存生产GCIM共享内存key的信息串,此信息串中的信息只能为十进制数字
* 串或为一个文件的路径(当此文件不存在时,tbus系统会尝试生成此文件),根据此信息串生成GCIM共享内存key的算法是:
* - 十进制数字串 则将此数字串转换整数,此整数作为GCIM的共享内存的key
* - 文件路径 将此文件路径和a_iBussId作为参数,调用ftok接口生产GCIM共享内存的key
* - NULL或空串 使用缺省值 TBUS_ROUTE_GLOBAL_SHMKEY 作为GCIM共享内存的key
*@param[in] a_iFlag 初始化操作标志位,
- TBUS_INIT_FLAG_USE_SAVED_TIME 所有tbus时间戳和心跳机制需要使用系统时间时,使用通过tbus_set_current_time保存的时间
*
*@note 本接口必须在其他tbus接口调用之前调用
*@note 当业务进程退出时,必须调用tbus_fini接口,是否本接口分配的资源
*@note 在同一个进程内,本接口只有第一次成功调用会产生作用,一旦tbus系统初始化好后,后续调用本接口
* 将直接返回
*@note 本接口是非线程安全的,同一个进程内如果有多个线程,调用者必须自行保证此接口互斥调用
*
*@pre \e 本接口调用之前必须通过 tbusmgr工具或tbus配置管理系统成功创建GCIM共享内存,否则本接口调用会
* 失败
*
*@retval 0 处理成功
*@retval <0 处理失败,通过TBUS_ERR_GET_ERROR_CODE(retval),可以获取错误代码,可能的错误代码有:
* - TBUS_ERROR_INIT_LOGSYSTEM_FAILED 初始化日志系统失败
* - TBUS_ERROR_GEN_SHMKEY_FAILED 生成共享内存的key值失败
* - TBUS_ERROR_SHMGET_FAILED 通过shmget分配共享内存失败
* - TBUS_ERROR_SHMAT_FAILED 通过shmat加载共享内存失败
* - TBUS_ERROR_CHECK_GCIMSHM_FAILED GCIM共享内存校验失败
*
*@see tbus_fini
*@note 如果a_pszShmkey为NULL,将尝试"1688"为key的共享内存
*@ref tbus_use_saved_time
*@ref tbus_use_sys_time
*/
TSF4G_API int tbus_init_ex(IN const char *a_pszShmkey, IN int a_iFlag);
/**
*@brief 创建tbus处理句柄
*@param[in,out] a_piHandle 存储处理句柄的指针
*@retval 0 -- success, get handle ok
*@retval <0 -- failed, 通过TBUS_ERR_GET_ERROR_CODE(retval)可以获取错误代码,可以会返回以下错误代码
- TBUS_ERROR_INVALID_ARG 传递给接口的参数不对
- TBUS_ERROR_NOT_INITIALIZED bus系统还没有初始化
- TBUS_ERROR_HANDLE_FULL 已分配tbus句柄数据已经达到设定的最大数目,不能在分配
*@pre \e a_piHandle should be not NULL
*@note 本接口是非线程安全的,创建出来的句柄也只能在同一个线程空间里使用
*@note 本接口创建的句柄必须使用tbus_delete来关闭,以释放资源
*/
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Tbus是tsf4g(Tencent ServiceFramework for Game,腾讯游戏服务框架)中的基础组件之一,主要的目的是为上层业务提供统一的线程或进程间通信接口,屏蔽本地进程间通信以及远程进程通信的细节,让开发人员可以集中精力关注业务逻辑,是tsf4g重要组成部分。 Tbus原理 Tbus基于共享内存构建无锁双通循环消息队列,发送的双方通过专用的读写队列完成数据收发,实现本地进程通信或者远程进程间通信。通信双方使用的两个队列称之为tbus通道(channel),每一组通讯的双方就需要有一个tbus通道。如下是一组tbus通道的图例描述。
资源详情
资源评论
资源推荐
收起资源包目录
tsf4g_lib.rar_tencent game_无锁队列_腾讯tbus_腾讯tbus是_腾讯游戏 (100个子文件)
libtsf4g.a 4.34MB
libexpat.a 305KB
libscew.a 54KB
tbus.h 64KB
tmib.h 23KB
tapp.h 22KB
tree.h 22KB
tdr_data_io.h 22KB
tos.h 21KB
tdr_sql.h 20KB
tdr_metalib_manage.h 19KB
tdr_error.h 18KB
queue.h 18KB
tlog.h 16KB
tpoll.h 16KB
tsm_tdr.h 15KB
tnet.h 14KB
tsocket.h 14KB
ttypes.h 13KB
tdr_types.h 12KB
tdr_XMLtags.h 12KB
tfile.h 11KB
tmetabase.h 10KB
tdr_ctypes_info.h 10KB
tdr_XMLMetaLib.h 9KB
siginfo.h 9KB
tthread.h 8KB
tdr_net.h 8KB
taes.h 7KB
terrno.h 7KB
tsignal.h 7KB
shtable.h 7KB
tagentapi.h 6KB
tmempool.h 6KB
tdr_meta_entries_index.h 6KB
tshm.h 6KB
tdr_data_sort.h 6KB
tbus_error.h 6KB
tsm_uri.h 6KB
tdr_define.h 6KB
tmmap.h 5KB
pcreposix.h 5KB
oi_tea.h 5KB
texec.h 4KB
tfcntl.h 4KB
tdr_operate_data.h 4KB
terrimpl.h 4KB
tlog_category.h 4KB
getopt.h 3KB
tdr_metalib_to_hpp.h 3KB
ttime.h 3KB
tlist.h 3KB
tsem.h 3KB
tlock.h 3KB
tipc.h 3KB
twait.h 3KB
tdr_metalib_init.h 3KB
swaitque.h 3KB
terr.h 3KB
tmutex.h 3KB
tstring.h 3KB
tlogload.h 2KB
md5.h 2KB
tresource.h 2KB
tini.h 2KB
tmsgque.h 2KB
pal.h 2KB
tlog_bill.h 2KB
ttimer.h 2KB
tstdio.h 2KB
tstdlib.h 2KB
tdlfcn.h 2KB
tlogerr.h 2KB
tdr.h 2KB
tbus_macros.h 1KB
tlog_loc_info.h 1KB
tdirent.h 1KB
tapi_external.h 1KB
tsafecode.h 1KB
tinet.h 1KB
tdr_external.h 1KB
tsemaphore.h 995B
tparser.h 928B
tlog_priority_def.h 873B
tconvert.h 797B
err.h 771B
tmempool_shm.h 762B
tlog_event.h 761B
tsec.h 726B
tuio.h 664B
shtable_shm.h 662B
tappctrlapi.h 609B
tsched.h 587B
tmodid.h 574B
comm.h 570B
trules.h 561B
tdir.h 529B
tfork.h 524B
tmng.h 492B
tapp_def.h 450B
共 100 条
- 1
weixin_42653672
- 粉丝: 109
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4