Пример #1
0
    void
    run(void)
    {
        Frame* frame = NULL;
        IOMultiplexing iom;
        m_socket.addToPoll(iom);

        while (!isStopping())
        {
            if (!iom.poll(1.0))
                continue;

            int rv = m_socket.read((char*)m_buffer, m_buffer_capacity);

            if (rv == c_header_size)
            {
                m_count = 0;
                frame = dequeueClean();
                if (frame == NULL)
                {
                    DUNE_ERR("GVSP", "buffer overrun");
                    break;
                }

                frame->setTimeStamp();
            }
            else if (rv == c_footer_size)
            {
                enqueueDirty(frame);
                frame = NULL;
            }
            else
            {
                if (frame != NULL)
                {
                    uint16_t packet_number = 0;
                    ByteCopy::fromBE(packet_number, m_buffer + 6);
                    m_count += frame->writePacket(packet_number, m_buffer + 8, rv - 8);
                }
                else
                {
                    DUNE_ERR("GVSP", "null frame");
                }
            }
        }
    }