时隔N久,才发现TRDP中的MD一直没有更新。距离项目已经好几个月了,大致已经忘光啦。何时能达到张无忌学习太极拳剑的地步QAQ。
不过还是稍微总结一下吧 。
MD大致也就是caller和replier的交互。需要做的工作便是加入监听的comId,然后发送call请求,剩下的便是在收包时做处理了。关于MD的类型也是有好几种,不同类型的处理流程也是不一样的。
EXT_DECL TRDP_ERR_T tlm_addListener (
TRDP_APP_SESSION_T appHandle,
TRDP_LIS_T *pListenHandle,
const void *pUserRef,
TRDP_MD_CALLBACK_T pfCbFunction,
BOOL8 comIdListener,
UINT32 comId,
UINT32 etbTopoCnt,
UINT32 opTrnTopoCnt,
TRDP_IP_ADDR_T srcIpAddr1,
TRDP_IP_ADDR_T srcIpAddr2,
TRDP_IP_ADDR_T mcDestIpAddr,
TRDP_FLAGS_T pktFlags,
const TRDP_URI_USER_T srcURI,
const TRDP_URI_USER_T destURI)
TRDP_ERR_T tlm_request (
TRDP_APP_SESSION_T appHandle,
const void *pUserRef,
TRDP_MD_CALLBACK_T pfCbFunction,
TRDP_UUID_T *pSessionId,
UINT32 comId,
UINT32 etbTopoCnt,
UINT32 opTrnTopoCnt,
TRDP_IP_ADDR_T srcIpAddr,
TRDP_IP_ADDR_T destIpAddr,
TRDP_FLAGS_T pktFlags,
UINT32 numReplies,
UINT32 replyTimeout,
const TRDP_SEND_PARAM_T *pSendParam,
const UINT8 *pData,
UINT32 dataSize,
const TRDP_URI_USER_T sourceURI,
const TRDP_URI_USER_T destURI)
call动作调用的是
TRDP_ERR_T trdp_mdCall (
const TRDP_MSG_T msgType,
TRDP_APP_SESSION_T appHandle,
const void *pUserRef,
TRDP_MD_CALLBACK_T pfCbFunction,
TRDP_UUID_T *pSessionId,
UINT32 comId,
UINT32 etbTopoCnt,
UINT32 opTrnTopoCnt,
TRDP_IP_ADDR_T srcIpAddr,
TRDP_IP_ADDR_T destIpAddr,
TRDP_FLAGS_T pktFlags,
UINT32 numExpReplies,
UINT32 replyTimeout,
INT32 replyStatus,
const TRDP_SEND_PARAM_T *pSendParam,
const UINT8 *pData,
UINT32 dataSize,
const TRDP_URI_USER_T srcURI,
const TRDP_URI_USER_T destURI)
这里面做了很多准备工作,socket etc..
replier和caller一样,需要加入监听comId,剩下的都是收包处理。可以在Linux下用rep-repliertest试试效果。
MD在实时数据传输中是非常重要的,TTDB的数据都是基于这个模型,整体流程没那么复杂,重要的是理解交换流程来满足业务需求。