author | nemo |
Mon, 14 Jan 2019 15:11:15 -0500 | |
branch | 0.9.25 |
changeset 14594 | 9c03b3cd6d16 |
parent 11046 | 47a8c19ecb60 |
child 14604 | b86e6e4f3c58 |
permissions | -rw-r--r-- |
184 | 1 |
/* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
4976 | 3 |
* Copyright (c) 2006-2007 Igor Ulyanov <iulyanov@gmail.com> |
11046 | 4 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
184 | 5 |
* |
6 |
* This program is free software; you can redistribute it and/or modify |
|
7 |
* it under the terms of the GNU General Public License as published by |
|
8 |
* the Free Software Foundation; version 2 of the License |
|
9 |
* |
|
10 |
* This program is distributed in the hope that it will be useful, |
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
* GNU General Public License for more details. |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License |
|
16 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
9998
diff
changeset
|
17 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
184 | 18 |
*/ |
19 |
||
20 |
#ifndef _TCPBASE_INCLUDED |
|
21 |
#define _TCPBASE_INCLUDED |
|
22 |
||
23 |
#include <QObject> |
|
24 |
#include <QTcpServer> |
|
25 |
#include <QTcpSocket> |
|
26 |
#include <QByteArray> |
|
27 |
#include <QString> |
|
28 |
#include <QDir> |
|
29 |
#include <QProcess> |
|
10177 | 30 |
#include <QThread> |
389 | 31 |
#include <QPointer> |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
32 |
#include <QVector> |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
33 |
#include <QList> |
184 | 34 |
|
35 |
#include <QImage> |
|
36 |
||
37 |
#define MAXMSGCHARS 255 |
|
38 |
||
39 |
class TCPBase : public QObject |
|
40 |
{ |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
41 |
Q_OBJECT |
389 | 42 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
43 |
public: |
8070
66bc20d089fc
Okay, remove previous request only if it has same parent
unc0rr
parents:
8069
diff
changeset
|
44 |
TCPBase(bool demoMode, QObject * parent = 0); |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
45 |
virtual ~TCPBase(); |
184 | 46 |
|
8069
bb7671829935
- Only allow one engine instance running at the moment
unc0rr
parents:
7289
diff
changeset
|
47 |
virtual bool couldBeRemoved(); |
9800
169fbb968bb3
No idea what this is doing, seems to allow recorder instance to not block further engine starts while it is doing its job.
unc0rr
parents:
9080
diff
changeset
|
48 |
virtual bool simultaneousRun(); |
169fbb968bb3
No idea what this is doing, seems to allow recorder instance to not block further engine starts while it is doing its job.
unc0rr
parents:
9080
diff
changeset
|
49 |
bool isConnected(); |
169fbb968bb3
No idea what this is doing, seems to allow recorder instance to not block further engine starts while it is doing its job.
unc0rr
parents:
9080
diff
changeset
|
50 |
bool hasStarted(); |
8069
bb7671829935
- Only allow one engine instance running at the moment
unc0rr
parents:
7289
diff
changeset
|
51 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
52 |
signals: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
53 |
void isReadyNow(); |
184 | 54 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
55 |
protected: |
8069
bb7671829935
- Only allow one engine instance running at the moment
unc0rr
parents:
7289
diff
changeset
|
56 |
bool m_hasStarted; |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
57 |
quint16 ipc_port; |
291 | 58 |
|
8069
bb7671829935
- Only allow one engine instance running at the moment
unc0rr
parents:
7289
diff
changeset
|
59 |
void Start(bool couldCancelPreviousRequest); |
184 | 60 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
61 |
QByteArray readbuffer; |
184 | 62 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
63 |
QByteArray toSendBuf; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
64 |
QByteArray demo; |
184 | 65 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
66 |
void SendIPC(const QByteArray & buf); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
67 |
void RawSendIPC(const QByteArray & buf); |
184 | 68 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
69 |
virtual QStringList getArguments()=0; |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
70 |
virtual void onClientRead(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
71 |
virtual void onClientDisconnect(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
72 |
virtual void SendToClientFirst(); |
184 | 73 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
74 |
private: |
7289
835bb2852579
Restore almost old TCPBase behaviour
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
75 |
static QPointer<QTcpServer> IPCServer; |
10177 | 76 |
#ifdef HWLIBRARY |
77 |
QThread * thread; |
|
78 |
#else |
|
79 |
QProcess * process; |
|
80 |
#endif |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
81 |
bool m_isDemoMode; |
9800
169fbb968bb3
No idea what this is doing, seems to allow recorder instance to not block further engine starts while it is doing its job.
unc0rr
parents:
9080
diff
changeset
|
82 |
bool m_connected; |
7289
835bb2852579
Restore almost old TCPBase behaviour
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
83 |
void RealStart(); |
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
84 |
QPointer<QTcpSocket> IPCSocket; |
184 | 85 |
|
6616
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
86 |
private slots: |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
87 |
void NewConnection(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
88 |
void ClientDisconnect(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
89 |
void ClientRead(); |
f77bb02b669f
astyle -C -S -L -N --style=allman --recursive "QTfrontend/*.cpp" "QTfrontend/*.h"
nemo
parents:
6060
diff
changeset
|
90 |
void StartProcessError(QProcess::ProcessError error); |
10307
e13d3147f15b
do not get stuck on "in game..." page just because of game crash. output a message instead. could still need some tweaking, but a man gotta sleep. and sheep too...
sheepluva
parents:
10177
diff
changeset
|
91 |
void onEngineDeath(int exitCode, QProcess::ExitStatus exitStatus); |
184 | 92 |
|
7289
835bb2852579
Restore almost old TCPBase behaviour
Stepan777 <stepik-777@mail.ru>
parents:
7180
diff
changeset
|
93 |
void tcpServerReady(); |
184 | 94 |
}; |
95 |
||
8310
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
96 |
#ifdef HWLIBRARY |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
97 |
class EngineInstance : public QObject |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
98 |
{ |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
99 |
Q_OBJECT |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
100 |
public: |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
101 |
EngineInstance(QObject *parent = 0); |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
102 |
~EngineInstance(); |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
103 |
|
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
104 |
void setArguments(const QStringList & arguments); |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
105 |
|
8310
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
106 |
public slots: |
10177 | 107 |
void start(); |
108 |
||
8310
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
109 |
signals: |
10177 | 110 |
void finished(); |
111 |
||
8310
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
112 |
private: |
10175
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
113 |
QList<QByteArray> m_arguments; |
c92668840ea8
Remove game/preview functions split in library mode, just let normal procedure run instead:
unc0rr
parents:
10108
diff
changeset
|
114 |
QVector<char *> m_argv; |
8310
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
115 |
}; |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
116 |
#endif |
a98c349bc06b
minor adjustments to libengine, moc is correctly created as definitions are set before calling it, params are better numbered and we don't subclass qthread but rather use moveToThread()
koda
parents:
8070
diff
changeset
|
117 |
|
184 | 118 |
#endif // _TCPBASE_INCLUDED |