Removed some more Qt-dependencies from TelldusCore client library
This commit is contained in:
parent
00e61e514f
commit
28e8bb9ac9
5 changed files with 23 additions and 46 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 "";
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue