Send

Send 方法會從從連接埠傳出資料。 此作業是執行緒受保護的作業。

簽章
int RiCOSConnectionPort_Send(
   RiCOSConnectionPort *const me, struct RiCSData *m);
參數
me

要從中傳送資料的 RiCOSConnectionPort 物件

M

要從埠傳送的資料

傳回

代表透過 Socket 傳送之位元組數的整數

範例
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;
}

意見回饋