26 #include <glibmm/timer.h>
32 , _requests(new
RingBuffer<uint8_t>(ring_size))
33 , _responses(new
RingBuffer<uint8_t>(ring_size))
34 , _response((uint8_t*)malloc(ring_size))
37 , _thread (
Glib::Threads::Thread::create(
sigc::mem_fun(*this, &
Worker::run)))
53 if (
_requests->
write((
const uint8_t*)&size,
sizeof(size)) !=
sizeof(size)) {
69 if (
_responses->
write((
const uint8_t*)&size,
sizeof(size)) !=
sizeof(size)) {
85 if (vec.len[0] + vec.len[1] <
sizeof(size)) {
88 if (vec.len[0] >=
sizeof(size)) {
89 memcpy (&size, vec.
buf[0], sizeof (size));
91 memcpy (&size, vec.
buf[0], vec.len[0]);
92 memcpy (&size + vec.len[0], vec.
buf[1],
sizeof(size) - vec.len[0]);
94 if (read_space < size+
sizeof(size)) {
106 while (read_space >=
sizeof(size)) {
115 read_space -=
sizeof(size) + size;
132 if (size <
sizeof(size)) {
143 if (
_requests->
read((uint8_t*)&size,
sizeof(size)) <
sizeof(size)) {
144 PBD::error <<
"Worker: Error reading size from request ring"
149 if (size > buf_size) {
150 buf = realloc(buf, size);
154 PBD::error <<
"Worker: Error allocating memory"
161 PBD::error <<
"Worker: Error reading body from request ring"
bool respond(uint32_t size, const void *data)
Worker(Workee *workee, uint32_t ring_size)
virtual int work_response(uint32_t size, const void *data)=0
LIBPBD_API Transmitter error
void get_read_vector(rw_vector *)
guint write_space() const
std::ostream & endmsg(std::ostream &ostr)
virtual int work(uint32_t size, const void *data)=0
guint read(T *dest, guint cnt)
bool schedule(uint32_t size, const void *data)
RingBuffer< uint8_t > * _responses
RingBuffer< uint8_t > * _requests
guint write(T const *src, guint cnt)
Glib::Threads::Thread * _thread
bool verify_message_completeness(RingBuffer< uint8_t > *rb)