假若不同的L2 client side (L2A, L2B), 需回覆不同格式的ack format時(ACK_A, ACK_B), 如何因應??
struct ackA {
TCP_HEAD head;
char blank1;
char acept; /**< accept or not */
char trans_id[4];
char err_code[4];
char blank2[2];
char err_msg[31];
} ACK_A;
struct ackB {
TCP_HEAD head;
char blank1;
char acept; /**< accept or not */
char trans_id[4];
char err_code[4];
} ACK_B;
建議做法::
可以於SockTcpHandler::setAckSize (ack_size, accept_position)進行調整
ack_size: 客戶端連線所回覆的ack message資料長度
accept_position: 客戶端連線對於前一筆送出資料的驗證結果的字元位置
針對L2A : myTcpSvr.setAckSize(sizeof(ACK_A), sizeof(TCP_HEAD)+2);
針對L2B : myTcpSvr.setAckSize(sizeof(ACK_B), sizeof(TCP_HEAD)+2);
提供一般Control Class::run ()的範例程式碼::
void NGORcvCtrl::run()
{
/* specify the header size of message */
myTcpSvr.setHeaderSize(sizeof(TCP_HEAD));
/* specify the ack size and function position */
myTcpSvr.setAckSize(sizeof(TCP_ACK), sizeof(TCP_HEAD)+1);
/* set need to reply ack */
myTcpSvr.setNeedAck(1);
/* assign a funcion, when tcp server on receive complete message will call back */
myTcpSvr.setOnReceive(CB(onReceive));
/* assign a funcion, when tcp server on reply custom ack will call back it */
myTcpSvr.setOnReply(CB_RP(onReply));
/* run the tcp server */
myTcpSvr.runSingleSvr ();
}
沒有留言:
張貼留言