qcp/libqcp/qcp.h

77 lines
1.6 KiB
C++

#ifndef QCP_H
#define QCP_H
#include "libqcp_global.h"
#include <QObject>
#include <QLinkedList>
#include "../libqtavahi/qtavahi.h"
namespace QCP {
class LIBQCPSHARED_EXPORT Share;
class LIBQCPSHARED_EXPORT WatchShare;
class LIBQCPSHARED_EXPORT Browse;
}
namespace QCP {
/* The private data of the Avahi::Service instances belongs to QCP ! :) */
class LIBQCPSHARED_EXPORT Browse : public QObject {
Q_OBJECT
private:
friend class QCP::Share;
struct ShareData {
void *data;
};
public:
Browse(QObject *parent = 0);
Avahi::Browse* avahiBrowse() { return m_av_browse; }
inline bool start() { return m_av_browse->start(); }
inline void stop() { m_av_browse->stop(); }
signals:
void found(QCP::Share s);
void lost(QCP::Share s);
void started();
void stopped();
private slots:
void foundService(Avahi::Service s);
void lostService(Avahi::Service s);
private:
static inline ShareData* shareData(const Avahi::Service &service) {
return static_cast<ShareData*>(service.data());
}
Avahi::Browse *m_av_browse;
};
class LIBQCPSHARED_EXPORT Share {
private:
friend class QCP::Browse;
friend class QCP::WatchShare;
public:
inline Share(QCP::Browse *browse, Avahi::Service service) : m_browse(browse), m_service(service) { }
public:
Avahi::Service avahiService() const { return m_service; }
void* data() const { Browse::ShareData *sd = Browse::shareData(m_service); return sd ? sd->data : 0; }
void setData(void *data) const { Browse::ShareData *sd = Browse::shareData(m_service); if (sd) sd->data = data; }
private:
QCP::Browse *m_browse;
Avahi::Service m_service;
};
}
#endif // QCP_H