00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CPACKETSTREAMFILTER_H
00020 #define CPACKETSTREAMFILTER_H
00021
00022 #include "CStreamFilter.h"
00023 #include "CStreamBuffer.h"
00024 #include "CMutex.h"
00025
00027
00030 class CPacketStreamFilter : public CStreamFilter {
00031 public:
00032 CPacketStreamFilter(synergy::IStream* stream, bool adoptStream = true);
00033 ~CPacketStreamFilter();
00034
00035
00036 virtual void close();
00037 virtual UInt32 read(void* buffer, UInt32 n);
00038 virtual void write(const void* buffer, UInt32 n);
00039 virtual void shutdownInput();
00040 virtual bool isReady() const;
00041 virtual UInt32 getSize() const;
00042
00043 protected:
00044
00045 virtual void filterEvent(const CEvent&);
00046
00047 private:
00048 bool isReadyNoLock() const;
00049 void readPacketSize();
00050 bool readMore();
00051
00052 private:
00053 CMutex m_mutex;
00054 UInt32 m_size;
00055 CStreamBuffer m_buffer;
00056 bool m_inputShutdown;
00057 };
00058
00059 #endif