qpidctrl  0.7.1
qpidserver.cpp
Go to the documentation of this file.
1 #include "qpidserver.h"
2 #include "qpidcontroller.h"
3 #include "qpiddebug.h"
4 #include <QThread>
5 #include <QTcpSocket>
6 #include "qpidserversession.h"
7 
8 QPidServer::QPidServer(QcepSettingsSaverWPtr saver, QPidControllerWPtr ctrl) :
9  QTcpServer(NULL),
10  m_ObjectNamer(this, "socketServer"),
11  m_RunPidServer(saver, this,"runPidServer", 1, "Run Simple Socket Server?"),
12  m_PidServerPort(saver, this,"pidServerPort", 1234, "Port for Simple Socket Server"),
13  m_Controller(ctrl)
14 {
15  if (qcepDebug(DEBUG_CONSTRUCTORS)) {
16  printf("QPidServer::QPidServer(%p)\n", this);
17  }
18 
19  qRegisterMetaType<QPidServerSessionWPtr>("QPidServerSessionWPtr");
20 
21  connect(prop_RunPidServer(), SIGNAL(valueChanged(int,int)), this, SLOT(runModeChanged()));
22  connect(prop_PidServerPort(), SIGNAL(valueChanged(int,int)), this, SLOT(serverPortChanged()));
23 
24  connect(this, SIGNAL(newConnection()), this, SLOT(openNewConnection()));
25 }
26 
28 {
29  if (qcepDebug(DEBUG_CONSTRUCTORS)) {
30  printf("QPidServer::~QPidServer(%p)\n", this);
31  }
32 
33  stopServer();
34 }
35 
36 void QPidServer::readSettings(QSettings *settings, QString section)
37 {
38  QcepProperty::readSettings(this, &staticMetaObject, section, settings);
39 
41 }
42 
43 void QPidServer::writeSettings(QSettings *settings, QString section)
44 {
45  QcepProperty::writeSettings(this, &staticMetaObject, section, settings);
46 }
47 
49 {
50  if (QThread::currentThread() != thread()) {
51  QMetaObject::invokeMethod(this, "runModeChanged");
52  } else {
53  if (get_RunPidServer()) {
54  startServer(QHostAddress::Any, get_PidServerPort());
55  } else {
56  stopServer();
57  }
58  }
59 }
60 
62 {
63  if (QThread::currentThread() != thread()) {
64  QMetaObject::invokeMethod(this, "serverPortChanged");
65  } else {
66  stopServer();
67 
68  if (get_RunPidServer()) {
69  startServer(QHostAddress::Any, get_PidServerPort());
70  }
71  }
72 }
73 
74 void QPidServer::printMessage(QString msg, QDateTime ts)
75 {
77 
78  if (ctl) {
79  ctl->printMessage(msg, ts);
80  }
81 }
82 
83 void QPidServer::criticalMessage(QString msg)
84 {
86 
87  if (ctl) {
88  ctl->criticalMessage(msg);
89  }
90 }
91 
92 void QPidServer::startServer(QHostAddress addr, int port)
93 {
94  if (qcepDebug(DEBUG_SERVER)) {
95  printMessage(tr("Starting simple server on address %1, port %2")
96  .arg(addr.toString()).arg(port));
97  }
98 
99  setMaxPendingConnections(10);
100 
101  if (isListening()) {
102  close();
103  }
104 
105  if (!listen(addr, port)) {
106  criticalMessage(tr("Failed to bind to address %1 port %2\nIs there another copy running already?").arg(addr.toString()).arg(port));
107  }
108 }
109 
111 {
112  if (isListening()) {
113  close();
114  }
115 }
116 
118 {
120 
121  if (session) {
122  m_Sessions.append(session);
123  }
124 }
125 
127 {
128  INVOKE_CHECK(
129  QMetaObject::invokeMethod(this, "deleteSessionLater", Qt::QueuedConnection, Q_ARG(QPidServerSessionWPtr, sess)));
130 }
131 
133 {
134  QPidServerSessionPtr p(sess);
135 
136  int i = m_Sessions.indexOf(p);
137 
138  if (i>=0) {
139  m_Sessions.removeAt(i);
140  }
141 }
142 
144 {
145  close();
146 
147  thread()->exit();
148 }
void startServer(QHostAddress addr, int port)
Definition: qpidserver.cpp:92
void stopServer()
Definition: qpidserver.cpp:110
virtual void writeSettings(QSettings *settings, QString section)
Definition: qpidserver.cpp:43
QWeakPointer< QPidController > QPidControllerWPtr
QWeakPointer< QPidServerSession > QPidServerSessionWPtr
void criticalMessage(QString msg)
Definition: qpidserver.cpp:83
QSharedPointer< QPidController > QPidControllerPtr
QSharedPointer< QPidServerSession > QPidServerSessionPtr
void openNewConnection()
Definition: qpidserver.cpp:117
void deleteSession(QPidServerSessionWPtr sess)
Definition: qpidserver.cpp:126
QList< QPidServerSessionPtr > m_Sessions
Definition: qpidserver.h:48
void runModeChanged()
Definition: qpidserver.cpp:48
QPidObjectNamer m_ObjectNamer
Definition: qpidserver.h:19
virtual void readSettings(QSettings *settings, QString section)
Definition: qpidserver.cpp:36
QSharedPointer< QTcpSocket > QTcpSocketPtr
void deleteSessionLater(QPidServerSessionWPtr sess)
Definition: qpidserver.cpp:132
virtual ~QPidServer()
Definition: qpidserver.cpp:27
void shutdown()
Definition: qpidserver.cpp:143
QPidServer(QcepSettingsSaverWPtr saver, QPidControllerWPtr ctrl)
Definition: qpidserver.cpp:8
QPidControllerWPtr m_Controller
Definition: qpidserver.h:47
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime())
Definition: qpidserver.cpp:74
void serverPortChanged()
Definition: qpidserver.cpp:61
QSharedPointer< QPidServer > QPidServerPtr
Definition: qpidserver-ptr.h:6