/* # Copyright (c) 2009 - OpenSLX Project, Computer Center University of Freiburg # # This program is free software distributed under the GPL version 2. # See http://openslx.org/COPYING # # If you have any feedback please consult http://openslx.org/feedback and # send your suggestions, praise, or complaints to feedback@openslx.org # # General information about OpenSLX can be found at http://openslx.org/ # ----------------------------------------------------------------------------- # src/net/mcast/McastPGMSocket.h # - wrap OpenPGM Sockets in a nicer interface -- interface # ----------------------------------------------------------------------------- */ #ifndef MCASTPGMSOCKET_H_ #define MCASTPGMSOCKET_H_ #include #include #include #include class McastPGMSocket_priv; class QTimer; class McastPGMSocket : public QObject { Q_OBJECT public: enum Direction { PSOCK_READ, PSOCK_WRITE }; McastPGMSocket(QObject* parent = 0); virtual ~McastPGMSocket(); bool open(McastConfiguration const* config, Direction direction); bool finished() const; signals: void readyToSend(); void receivedPacket(QByteArray const& bytes); void connectionReset(); void connectionFinished(); public slots: void sendPacket(QByteArray const& bytes); void finish(); private slots: void handleNak(int fd); void handleData(int fd); void handleNak(); void handleData(); void handleNakTimeout(); void handleDataTimeout(); void canSend(); private: McastPGMSocket_priv* _priv; QQueue _q; bool _finished; QTimer* _nakTimeout; QTimer* _dataTimeout; QTimer* _sendTimeout; void setupNotifiers(); }; #endif /* MCASTPGMSOCKET_H_ */