Removed some more Qt-dependencies from TelldusCore client library

This commit is contained in:
Micke Prag 2010-08-11 11:50:45 +00:00
parent 00e61e514f
commit 28e8bb9ac9
5 changed files with 23 additions and 46 deletions

View file

@ -18,11 +18,6 @@ SET( telldus-client_HDRS
${CMAKE_SOURCE_DIR}/driver/libtelldus-core/Thread.h
)
SET( telldus-client_MOC_HDRS
# Manager.h
../common/Socket.h
)
SET( telldus-client_LIBRARIES
${QT_LIBRARIES}
)
@ -32,9 +27,6 @@ INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/../common
)
QT4_WRAP_CPP( telldus-client_MOC_SRCS ${telldus-client_MOC_HDRS} )
QT4_AUTOMOC ( ${telldus-client_SRCS} )
######## Configurable options for the platform ########
@ -89,8 +81,6 @@ ENDIF (NOT WIN32)
ADD_LIBRARY(${telldus-client_TARGET} SHARED
${telldus-client_SRCS}
${telldus-client_HDRS}
${telldus-client_MOC_HDRS}
${telldus-client_MOC_SRCS}
)
SET_SOURCE_FILES_PROPERTIES(${telldus-service_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)

View file

@ -2,7 +2,6 @@
#define SOCKET_H
#include "Message.h"
#include <QObject>
#define BUFSIZE 512
@ -13,14 +12,13 @@
typedef unsigned int SOCKET_T;
#endif
class Socket : public QObject {
Q_OBJECT
class Socket {
public:
Socket(SOCKET_T socket);
Socket();
~Socket(void);
void connectToServer(const QString &serverName);
void connectToServer(const std::string &serverName);
void disconnect();
void write(const TelldusService::Message &msg);
void writeOverlapped(const TelldusService::Message &msg);
@ -29,9 +27,6 @@ public:
bool connected() const;
signals:
void disconnected();
private:
class PrivateData;
PrivateData *d;

View file

@ -44,7 +44,7 @@ Socket::~Socket(void) {
delete d;
}
void Socket::connectToServer(const QString &server) {
void Socket::connectToServer(const std::string &server) {
DWORD dwMode;
bool fSuccess = false;
@ -58,9 +58,11 @@ void Socket::connectToServer(const QString &server) {
return;
}
QString name = QString("\\\\.\\pipe\\%1").arg(server);
//Convert our std::string to std::wstring since we build agains win32 with unicode support
std::string strName = "\\\\.\\pipe\\" + server;
std::wstring name(strName.begin(), strName.end());
d->hPipe = CreateFile(
(const wchar_t *)name.utf16(), // pipe name
name.c_str(), // pipe name
GENERIC_READ | // read and write access
GENERIC_WRITE,
0, // no sharing
@ -75,7 +77,7 @@ void Socket::connectToServer(const QString &server) {
dwMode = PIPE_READMODE_MESSAGE;
fSuccess = SetNamedPipeHandleState(
d->hPipe, // pipe handle
d->hPipe, // pipe handle
&dwMode, // new pipe mode
NULL, // don't set maximum bytes
NULL); // don't set maximum time
@ -92,17 +94,14 @@ void Socket::disconnect() {
if (d->event != INVALID_HANDLE_VALUE) {
SetEvent(d->event);
}
emit disconnected();
}
void Socket::write(const TelldusService::Message &msg) {
DWORD bytesWritten = 0;
if (WriteFile(d->hPipe, msg.data(), msg.length(), &bytesWritten, NULL)) {
if (WriteFile(d->hPipe, msg.data(), (DWORD)msg.length(), &bytesWritten, NULL)) {
FlushFileBuffers(d->hPipe);
} else {
d->connected = false;
emit disconnected();
}
}
@ -113,18 +112,16 @@ void Socket::writeOverlapped(const TelldusService::Message &msg) {
bool fSuccess;
oOverlap.hEvent = d->event;
WriteFile(d->hPipe, msg.data(), msg.length(), &bytesWritten, &oOverlap);
WriteFile(d->hPipe, msg.data(), (DWORD)msg.length(), &bytesWritten, &oOverlap);
result = WaitForSingleObject(oOverlap.hEvent, 10000);
if (result == WAIT_TIMEOUT) {
d->connected = false;
emit disconnected();
return;
}
fSuccess = GetOverlappedResult(d->hPipe, &oOverlap, &bytesWritten, false);
if (!fSuccess) {
d->connected = false;
emit disconnected();
return;
}
}
@ -191,7 +188,6 @@ std::string Socket::read() {
}
//TelldusCore::logMessage(QString("= Failed read %1").arg(GetLastError()));
d->connected = false;
emit disconnected();
}
return "";
}

View file

@ -1,6 +1,5 @@
#include "TelldusCore.h"
#include "Manager.h"
#include "Message.h"
#include "MessageReceiver.h"
#include "Socket.h"
#include <QLocalServer>
@ -71,20 +70,16 @@ void TelldusCore::newConnection(Socket *socket) {
void TelldusCore::newEventConnection(Socket *socket) {
logMessage(" New eventConnection");
// QLocalSocket *s = d->eventServer.nextPendingConnection();
connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
//connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected())); //TODO: Must check for disconnect somehow
d->eventSockets.append(socket);
}
void TelldusCore::disconnected() {
void TelldusCore::disconnected(Socket *s) {
logMessage(" Event disconnection");
Socket *s = qobject_cast<Socket *>(sender());
// Socket *s = reinterpret_cast<Socket *>(sender());
if (s) {
d->eventSockets.removeOne(s);
d->eventSockets.removeOne(s);
//if (d->eventServer.isListening()) {
//delete s;
delete s;
//}
}
}
void TelldusCore::deviceInserted(int vid, int pid, const QString &serial) {
@ -114,10 +109,7 @@ void TelldusCore::deviceEventSlot(int deviceId, int method, const char *data) {
msg.addArgument(deviceId);
msg.addArgument(method);
msg.addArgument(data);
foreach(Socket *s, d->eventSockets) {
logMessage(" Sending deviceEvent");
s->write(msg);
}
sendEventMessage(msg);
}
void TelldusCore::deviceChangeEventSlot(int deviceId, int eventId, int changeType) {
@ -125,14 +117,16 @@ void TelldusCore::deviceChangeEventSlot(int deviceId, int eventId, int changeTyp
msg.addArgument(deviceId);
msg.addArgument(eventId);
msg.addArgument(changeType);
foreach(Socket *s, d->eventSockets) {
s->write(msg);
}
sendEventMessage(msg);
}
void TelldusCore::rawDeviceEventSlot(const char *data) {
Message msg("TDRawDeviceEvent");
msg.addArgument(data);
sendEventMessage(msg);
}
void TelldusCore::sendEventMessage(const Message &msg) {
foreach(Socket *s, d->eventSockets) {
s->write(msg);
}

View file

@ -3,6 +3,7 @@
#include <QObject>
#include "Pipe.h"
#include "Message.h"
#include <libtelldus-core/telldus-core-service.h>
class TelldusCorePrivate;
@ -27,7 +28,6 @@ public slots:
private slots:
void newConnection(Socket *);
void newEventConnection(Socket *);
void disconnected();
void deviceEventSlot(int, int, const char *);
void deviceChangeEventSlot(int, int, int);
void rawDeviceEventSlot(const char *);
@ -39,6 +39,8 @@ signals:
void rawDeviceEventSignal(const char *);
private:
void disconnected(Socket *);
void sendEventMessage(const TelldusService::Message &msg);
TelldusCorePrivate * const d;
static void WINAPI deviceEvent(int deviceId, int, const char *, int, void *);