From a2c5f9998376a5877aef36e410921908ab8605ba Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Tue, 17 Jan 2006 00:21:01 +0000 Subject: filepush: do not loop anymore on eof, but signal an event --- lib/base/filepush.cpp | 17 ++++++++++++++++- lib/base/filepush.h | 12 +++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index cb22ea1b..7ab8c0d3 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -4,10 +4,11 @@ #include #include -eFilePushThread::eFilePushThread() +eFilePushThread::eFilePushThread(): m_messagepump(eApp, 0) { m_stop = 0; flush(); + CONNECT(m_messagepump.recv_msg, eFilePushThread::recvEvent); } static void signal_handler(int x) @@ -65,12 +66,16 @@ void eFilePushThread::thread() } if (m_buf_end == 0) { + sendEvent(evtEOF); + +#if 0 eDebug("FILEPUSH: end-of-file! (currently unhandled)"); if (!lseek(m_fd_source, 0, SEEK_SET)) { eDebug("(looping)"); continue; } +#endif break; } // printf("FILEPUSH: read %d bytes\n", m_buf_end); @@ -114,3 +119,13 @@ void eFilePushThread::flush() m_buf_start = m_buf_end = 0; } + +void eFilePushThread::sendEvent(int evt) +{ + m_messagepump.send(evt); +} + +void eFilePushThread::recvEvent(const int &evt) +{ + m_event(evt); +} diff --git a/lib/base/filepush.h b/lib/base/filepush.h index a419d719..7eb79974 100644 --- a/lib/base/filepush.h +++ b/lib/base/filepush.h @@ -2,9 +2,11 @@ #define __lib_base_filepush_h #include +#include +#include #include -class eFilePushThread: public eThread +class eFilePushThread: public eThread, public Object { public: eFilePushThread(); @@ -19,11 +21,19 @@ public: /* flushes the internal readbuffer */ void flush(); + enum { evtEOF, evtReadError, evtWriteError }; + Signal1 m_event; + private: int m_stop; unsigned char m_buffer[65536]; int m_buf_start, m_buf_end; int m_fd_source, m_fd_dest; + + eFixedMessagePump m_messagepump; + + void sendEvent(int evt); + void recvEvent(const int &evt); }; #endif -- cgit v1.2.3