# 服务器端的pro文件
# 注意, simpleswitch.rep 文件在服务器端目录下。server 和 client 目录平行
QT -= gui
QT += remoteobjects
CONFIG += c++11 console
CONFIG -= app_bundle
SOURCES += main.cpp \
simpleswitch.cpp
REPC_SOURCE = simpleswithch.rep
HEADERS += \
simpleswitch.h
// server的main.cpp
#include <QCoreApplication>
#include "simpleswitch.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SimpleSwitch srcSwitch; // create simple switch
// 示范 1
// QRemoteObjectHost srcNode(QUrl(QStringLiteral("local:switch"))); // create host node without Registry
// 示范 3 注册制
QRemoteObjectRegistryHost regNode(QUrl(QStringLiteral("local:registry"))); // create node that hosts registry
QRemoteObjectHost srcNode(QUrl(QStringLiteral("local:switch")), QUrl(QStringLiteral("local:registry"))); // create node that will host source and connect to registry
srcNode.enableRemoting(&srcSwitch); // enable remoting/sharing
return a.exec();
}
#ifndef SIMPLESWITCH_H
#define SIMPLESWITCH_H
// simpleswitch.h
#include <QObject>
#include "rep_simpleswithch_source.h"
class SimpleSwitch : public SimpleSwitchSimpleSource
{
Q_OBJECT
public:
SimpleSwitch(QObject *parent = nullptr);
~SimpleSwitch();
virtual void server_slot(bool clientState);
public Q_SLOTS:
void timeout_slot();
private:
bool mCurrentStatus;
QTimer *stateChangeTimer;
};
#endif // SIMPLESWITCH_H
// simpleswitch.cpp
#include "simpleswitch.h"
#include <QTimer>
SimpleSwitch::SimpleSwitch(QObject *parent) : SimpleSwitchSimpleSource(parent)
{
stateChangeTimer = new QTimer(this);
QObject::connect(stateChangeTimer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
stateChangeTimer->start(2000);
qDebug() << "Source Node Started";
}
SimpleSwitch::~SimpleSwitch()
{
stateChangeTimer->stop();
}
void SimpleSwitch::server_slot(bool clientState)
{
qDebug() << "Replica state is " << clientState;
}
void SimpleSwitch::timeout_slot()
{
if (currState())
setCurrState(false);
else
setCurrState(true);
qDebug() << "Source State is "<<currState();
}
// SimpleSwitch.rep
class SimpleSwitch
{
PROP(bool currState=false);
SLOT(server_slot(bool clientState));
};