From 29e854354982dcdd8f548ca10b2f2f6b889b280c Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Fri, 9 Nov 2012 17:22:33 +0000 Subject: The attempt to use symlinks in place of the header files was silly. --- c++-qt/gats-qt/gatsstream.h | 80 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) mode change 120000 => 100644 c++-qt/gats-qt/gatsstream.h (limited to 'c++-qt/gats-qt/gatsstream.h') diff --git a/c++-qt/gats-qt/gatsstream.h b/c++-qt/gats-qt/gatsstream.h deleted file mode 120000 index 38d4d0e..0000000 --- a/c++-qt/gats-qt/gatsstream.h +++ /dev/null @@ -1 +0,0 @@ -../src/gatsstream.h \ No newline at end of file diff --git a/c++-qt/gats-qt/gatsstream.h b/c++-qt/gats-qt/gatsstream.h new file mode 100644 index 0000000..979ca60 --- /dev/null +++ b/c++-qt/gats-qt/gatsstream.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2007-2012 Xagasoft, All rights reserved. + * + * This file is part of the libgats library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#ifndef GATS_STREAM_H +#define GATS_STREAM_H + +#include +#include + +namespace Gats +{ + class Object; + + class GatsStream : public QObject + { + Q_OBJECT; + public: + GatsStream( QIODevice &rStream ); + virtual ~GatsStream(); + + public slots: + /** + * Read an object packet from the assosiated stream. This will make + * every effort to only read exactly enough data to describe one packet, + * in case you want to do other things with your stream. It will + * automatically skip NULL byte spacing between packets, which makes + * a convinient padding method for encrypted data streams. Since + * sizing information is available in the packet header exact amounts + * of data can be read, however this function doesn't assume that it + * can read the entire object in one operation. If it fails to read + * a complete packet in one call, it will keep the data it's read so + * far buffered and return NULL, ready for another attempt. You can + * use the function hasReadBuffer() to deterimne if readObject() + * has read part of an object packet or not. If readObject returns + * non-null then hasReadBuffer should return false on it's next call. + */ + Gats::Object *readObject(); + + /** + * Works exactly like readObject, except it reads all pending objects + * and emits a objectRead signal for each one read. It doesn't return + * anything. This is perfect for connecting to a QIODevice's readRead + * signal. + */ + void readAllObjects(); + + public: + /** + * Write an object + */ + void writeObject( Gats::Object *pObject ); + + /** + * Tells you if there is data still in the read buffer, i.e. that a + * packet is part way through being read. If readObject has returned + * non-null in the most recent call, this should always be false. + */ + bool hasReadBuffer() { return qbRead.size() > 0; } + int getReadBufferSize() { return qbRead.size(); } + + QIODevice &getIODevice() { return rStream; } + + signals: + void objectRead( Gats::Object *pObj ); + + private: + bool skipReadNulls(); + + private: + QIODevice &rStream; + QByteArray qbRead; + }; +}; + +#endif -- cgit v1.2.3