author | unc0rr |
Wed, 16 Aug 2006 11:41:00 +0000 | |
changeset 111 | 30ca06092a64 |
parent 97 | e7c1df9cce2c |
child 125 | 0532e70b1ce4 |
permissions | -rw-r--r-- |
28 | 1 |
/* |
2 |
* Hedgewars, a worms-like game |
|
3 |
* Copyright (c) 2005 Andrey Korotaev <unC0Rr@gmail.com> |
|
4 |
* |
|
5 |
* Distributed under the terms of the BSD-modified licence: |
|
6 |
* |
|
7 |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
|
8 |
* of this software and associated documentation files (the "Software"), to deal |
|
9 |
* with the Software without restriction, including without limitation the |
|
10 |
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
11 |
* sell copies of the Software, and to permit persons to whom the Software is |
|
12 |
* furnished to do so, subject to the following conditions: |
|
13 |
* |
|
14 |
* 1. Redistributions of source code must retain the above copyright notice, |
|
15 |
* this list of conditions and the following disclaimer. |
|
16 |
* 2. Redistributions in binary form must reproduce the above copyright notice, |
|
17 |
* this list of conditions and the following disclaimer in the documentation |
|
18 |
* and/or other materials provided with the distribution. |
|
19 |
* 3. The name of the author may not be used to endorse or promote products |
|
20 |
* derived from this software without specific prior written permission. |
|
21 |
* |
|
22 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
|
23 |
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
24 |
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
|
25 |
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
26 |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
27 |
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
|
28 |
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
29 |
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
|
30 |
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
|
31 |
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
32 |
*/ |
|
33 |
||
34 |
#ifndef NET_H |
|
35 |
#define NET_H |
|
36 |
||
37 |
#include <QObject> |
|
38 |
#include <QTcpSocket> |
|
39 |
#include <QRegExp> |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
40 |
#include <QStringList> |
36 | 41 |
#include <QTimer> |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
42 |
#include "team.h" |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
43 |
#include "rndstr.h" |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
44 |
|
97
e7c1df9cce2c
- make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents:
85
diff
changeset
|
45 |
#define MAGIC_CHAR "\x2f" |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
46 |
|
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
47 |
struct netTeam |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
48 |
{ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
49 |
QString nick; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
50 |
QStringList hhs; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
51 |
}; |
28 | 52 |
|
85
44d9045b26ff
New GameCFGWidget. Now it's possible to set forts mode from ui
unc0rr
parents:
84
diff
changeset
|
53 |
class GameUIConfig; |
84 | 54 |
|
28 | 55 |
class HWNet : public QObject |
56 |
{ |
|
57 |
Q_OBJECT |
|
58 |
||
59 |
public: |
|
85
44d9045b26ff
New GameCFGWidget. Now it's possible to set forts mode from ui
unc0rr
parents:
84
diff
changeset
|
60 |
HWNet(GameUIConfig * config); |
29 | 61 |
void Connect(const QString & hostName, quint16 port, const QString & nick); |
28 | 62 |
void Disconnect(); |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
63 |
void JoinGame(const QString & game); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
64 |
void AddTeam(const HWTeam & team); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
65 |
void StartGame(); |
28 | 66 |
|
67 |
signals: |
|
68 |
void Connected(); |
|
69 |
void AddGame(const QString & chan); |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
70 |
void EnteredGame(); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
71 |
void FromNet(const QByteArray & buf); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
72 |
void LocalCFG(const QString & team); |
32
78bff13b11c0
With this patch the game doesn't crash when gaming by net
unc0rr
parents:
31
diff
changeset
|
73 |
void ChangeInTeams(const QStringList & teams); |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
74 |
|
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
75 |
public slots: |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
76 |
void SendNet(const QByteArray & buf); |
28 | 77 |
|
78 |
private: |
|
79 |
enum NetState { |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
80 |
nsDisconnected = 0, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
81 |
nsConnecting = 1, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
82 |
nsConnected = 3, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
83 |
nsJoining = 4, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
84 |
nsJoined = 5, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
85 |
nsStarting = 6, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
86 |
nsGaming = 7, |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
87 |
nsQuitting = 8 |
28 | 88 |
}; |
89 |
||
90 |
QTcpSocket NetSocket; |
|
91 |
NetState state; |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
92 |
QRegExp * IRCmsg_cmd_text; |
28 | 93 |
QRegExp * IRCmsg_number_param; |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
94 |
QRegExp * IRCmsg_who_cmd_target; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
95 |
QRegExp * IRCmsg_who_cmd_target_text; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
96 |
QRegExp * IRCmsg_who_cmd_text; |
29 | 97 |
QString mynick; |
98 |
QString opnick; |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
99 |
QString channel; |
97
e7c1df9cce2c
- make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents:
85
diff
changeset
|
100 |
QString seed; |
29 | 101 |
bool isOp; |
102 |
quint32 opCount; |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
103 |
netTeam teams[5]; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
104 |
quint8 teamsCount; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
105 |
RNDStr seedgen; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
106 |
int playerscnt; |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
107 |
int configasks; |
36 | 108 |
QByteArray NetBuffer; |
109 |
QTimer * TimerFlusher; |
|
85
44d9045b26ff
New GameCFGWidget. Now it's possible to set forts mode from ui
unc0rr
parents:
84
diff
changeset
|
110 |
GameUIConfig * config; |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
111 |
|
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
112 |
void RawSendNet(const QString & buf); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
113 |
void RawSendNet(const QByteArray & buf); |
28 | 114 |
|
115 |
void ParseLine(const QString & msg); |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
116 |
void msgcmd_textHandler(const QString & msg); |
28 | 117 |
void msgnumber_paramHandler(const QString & msg); |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
118 |
void msgwho_cmd_targetHandler(const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
119 |
void msgwho_cmd_textHandler(const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
120 |
void msgwho_cmd_target_textHandler(const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
121 |
|
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
122 |
void hwp_opmsg(const QString & who, const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
123 |
void hwp_chanmsg(const QString & who, const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
124 |
void ConfigAsked(); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
125 |
void NetTeamAdded(const QString & msg); |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
126 |
|
97
e7c1df9cce2c
- make the game be run from ${PREFIX}/bin with data in ${PREFIX}/share/hedgewars/Data
unc0rr
parents:
85
diff
changeset
|
127 |
void RunGame(); |
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
128 |
|
28 | 129 |
|
130 |
private slots: |
|
131 |
void ClientRead(); |
|
132 |
void OnConnect(); |
|
133 |
void OnDisconnect(); |
|
134 |
void Perform(); |
|
135 |
void displayError(QAbstractSocket::SocketError socketError); |
|
36 | 136 |
void FlushNetBuf(); |
28 | 137 |
}; |
138 |
||
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
139 |
#define SENDCFGSTRNET(a) {\ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
140 |
QByteArray strmsg; \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
141 |
strmsg.append(a); \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
142 |
quint8 sz = strmsg.size(); \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
143 |
QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg; \ |
36 | 144 |
QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(enginemsg.toBase64()); \ |
145 |
hwp_chanmsg(mynick, _msg); \ |
|
146 |
RawSendNet(QString("PRIVMSG %1 :").arg(channel) + _msg); \ |
|
31
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
147 |
} |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
148 |
|
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
149 |
#define SENDCFGSTRLOC(a) {\ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
150 |
QByteArray strmsg; \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
151 |
strmsg.append(a); \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
152 |
quint8 sz = strmsg.size(); \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
153 |
QByteArray enginemsg = QByteArray((char *)&sz, 1) + strmsg; \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
154 |
emit FromNet(enginemsg); \ |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
155 |
} |
99888245a4e8
Now net game is near available, but exception occurs...
unc0rr
parents:
29
diff
changeset
|
156 |
|
28 | 157 |
#endif |