The Send method sends data out from the connection port. This operation is thread-protected.
int RiCOSConnectionPort_Send(
RiCOSConnectionPort *const me, struct RiCSData *m);
me
The RiCOSConnectionPort object from which to send the data
m
The data to be sent from the port
An integer that represents the number of bytes sent through the 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;
/* This MUST match the number in 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);
/* cleanup */
RiCSData_cleanup(m);
return rv;
}