時隔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的數據都是基於這個模型,整體流程沒那麼複雜,重要的是理解交換流程來滿足業務需求。