Send 方法會從連接埠傳出資料。
此作業是執行緒受保護的作業。
簽章int RiCOSConnectionPort_Send(
RiCOSConnectionPort *const me, struct RiCSData *m);
參數me
要從中傳送資料的 RiCOSConnectionPort 物件
M
要從埠傳送的資料
範例RiCOSResult RiCOSConnectionPort_Send(
RiCOSConnectionPort * const me, struct RiCSData *m)
{
int rv = 0, m_NumberOfMessagesBetweenAck = 0;
RiCOSMutex_lock(&me->m_SendMutex);
if (me->m_Connected) {
char lenStr[MAX_LEN_STR+1];
(void)sprintf(lenStr,"%d",RiCSData_getLength(m));
rv = RiCOSSocket_send(&me->m_Socket,
lenStr, MAX_LEN_STR);
if (rv > 0) {
rv = RiCOSSocket_send(&me->m_Socket,
RiCSData_getRawData(m), RiCSData_getLength(m));
}
if (me->m_ShouldWaitForAck) {
const int maxNumOfMessagesBetweenAck = 127;
/* 這必須符合 Rational Rhapsody 中的數字。 */
if (maxNumOfMessagesBetweenAck > 0) {
m_NumberOfMessagesBetweenAck++;
if (m_NumberOfMessagesBetweenAck >=
maxNumOfMessagesBetweenAck) {
m_NumberOfMessagesBetweenAck = 0;
RiCOSEventFlag_wait(
&me->m_AckEventFlag, -1);
RiCOSEventFlag_reset(
&me->m_AckEventFlag);
}
}
}
}
RiCOSMutex_free(&me->m_SendMutex);
/* 清除 */
RiCSData_cleanup(m);
return rv;
}