/* # 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 #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; bool isOpen() const; void shutdown(int interval = DEFAULT_MULTICAST_SHUTDOWN_TIMEOUT); signals: void readyToSend(); void receivedPacket(QByteArray const& bytes); void connectionReset(); void connectionFinished(); void shutdownComplete(); 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; bool _opened; QTimer* _nakTimeout; QTimer* _dataTimeout; QTimer* _sendTimeout; QTimer* _shutdownTimer; int _shutdown_timeout; void setupNotifiers(); }; #endif /* MCASTPGMSOCKET_H_ */