sources/network/rconsession.cpp

Wed, 27 Jan 2021 12:41:50 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 27 Jan 2021 12:41:50 +0200
branch
protocol5
changeset 176
060a13878ca0
parent 171
d0fba0d7ad03
child 177
131518f86af6
child 195
be953e1621d9
permissions
-rw-r--r--

remove PacketHeader from base protocol5

73
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
1 /*
109
e4966d7e615d Happy new year 2016
Teemu Piippo <crimsondusk64@gmail.com>
parents: 105
diff changeset
2 Copyright 2014 - 2016 Teemu Piippo
73
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
3 All rights reserved.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
4
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
5 Redistribution and use in source and binary forms, with or without
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
6 modification, are permitted provided that the following conditions
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
7 are met:
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
8
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
9 1. Redistributions of source code must retain the above copyright
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
10 notice, this list of conditions and the following disclaimer.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
11 2. Redistributions in binary form must reproduce the above copyright
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
12 notice, this list of conditions and the following disclaimer in the
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
13 documentation and/or other materials provided with the distribution.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
14 3. Neither the name of the copyright holder nor the names of its
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
15 contributors may be used to endorse or promote products derived from
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
16 this software without specific prior written permission.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
17
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
19 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
20 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
21 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
22 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
23 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
24 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
25 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
26 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
29 */
07dda51a7a8e Update license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
30
81
a18aaf460648 Allow compilation on Windows/MinGW
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
31 #include <time.h>
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 #include "rconsession.h"
23
f7221183a994 - the prompt is now colored
Teemu Piippo <crimsondusk64@gmail.com>
parents: 22
diff changeset
33 #include "../interface.h"
88
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
34 BEGIN_ZFC_NAMESPACE
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
35
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
36 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
37 //
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
38 RCONSession::RCONSession() :
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
39 m_state(RCON_DISCONNECTED),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
40 m_lastPing(0),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
41 m_adminCount(0),
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
42 m_interface(nullptr)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
44 if (not m_socket.set_blocking(false))
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
45 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
46 fprintf(stderr, "unable to set socket as non-blocking: %s\n",
58
d175243ad169 - rcon sessions are no longer allocated on the heap
Teemu Piippo <crimsondusk64@gmail.com>
parents: 57
diff changeset
47 m_socket.error_string().chars());
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
48 exit(EXIT_FAILURE);
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
49 }
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
50 }
15
33da84af4bba - log area done, re-enabled the rcon connection
Teemu Piippo <crimsondusk64@gmail.com>
parents: 14
diff changeset
51
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
52 // -------------------------------------------------------------------------------------------------
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
53 //
58
d175243ad169 - rcon sessions are no longer allocated on the heap
Teemu Piippo <crimsondusk64@gmail.com>
parents: 57
diff changeset
54 RCONSession::~RCONSession() {}
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
55
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
58 void RCONSession::connect(IPAddress address)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60 m_address = address;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61 m_state = RCON_CONNECTING;
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
62 m_interface->updateStatusBar();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
63 sendHello();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
66 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
67 //
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
68 void RCONSession::disconnect()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69 {
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
70 if (m_state > RCON_CONNECTING)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
71 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
72 // Say goodbye to remote
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
73 send({CLRC_DISCONNECT});
111
51c93a0cc317 Now disconnects properly without instantly quitting
Teemu Piippo <crimsondusk64@gmail.com>
parents: 109
diff changeset
74 m_interface->disconnected();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77 m_state = RCON_DISCONNECTED;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
81 //
158
de7574d292ad Added the ByteArray typedef for Vector<unsigned char>
Teemu Piippo <teemu@compsta2.com>
parents: 157
diff changeset
82 void RCONSession::send(const ByteArray& packet)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
84 m_socket.send(m_address, packet);
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 //
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
89 void RCONSession::tick()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90 {
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
91 if (m_state == RCON_DISCONNECTED)
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
92 return;
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
93
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94 time_t now;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
95 time(&now);
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 if (m_lastPing < now)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 if (m_state == RCON_CONNECTING)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
101 sendHello();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 else if (m_state == RCON_AUTHENTICATING)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
105 sendPassword();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 else if (m_state == RCON_CONNECTED and m_lastPing + 5 < now)
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
109 send({CLRC_PONG});
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
110 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113
167
0150f86e68f0 Added the PacketQueue class to make use of the sequence numbering to process packets in the correct order, and the ZFC9000 end of packet recovery protocol.
Teemu Piippo <teemu@compsta2.com>
parents: 166
diff changeset
114 // Check for new packets in our socket
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
115 for (Datagram datagram; m_socket.read(datagram);)
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
116 {
170
40d8d7231a36 Reduce delta between branches
Teemu Piippo <teemu@compsta2.com>
parents: 169
diff changeset
117 // Only process packets that originate from the game server.
40d8d7231a36 Reduce delta between branches
Teemu Piippo <teemu@compsta2.com>
parents: 169
diff changeset
118 if (datagram.address == m_address)
171
d0fba0d7ad03 remove the packet queue for now
Teemu Piippo <teemu@hecknology.net>
parents: 170
diff changeset
119 handlePacket(datagram.message);
167
0150f86e68f0 Added the PacketQueue class to make use of the sequence numbering to process packets in the correct order, and the ZFC9000 end of packet recovery protocol.
Teemu Piippo <teemu@compsta2.com>
parents: 166
diff changeset
120 }
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
121 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
122
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
124 //
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
125 void RCONSession::handlePacket(ByteArray& message)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
126 {
168
96ffd13c08a2 Reduce delta to protocol5 branch by importing the change to RCONSessoin::handlePacket's signature
Teemu Piippo <teemu@compsta2.com>
parents: 163
diff changeset
127 Bytestream stream(message);
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
128
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
129 try
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
130 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
131 while (stream.bytesLeft() > 0)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
132 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
133 int header = stream.readByte();
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
134
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
135 switch (ServerResponse(header))
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
136 {
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
137 case SVRC_OLDPROTOCOL:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
138 m_interface->printError("Your RCON client is using outdated protocol.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
139 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
140 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
141
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
142 case SVRC_BANNED:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
143 m_interface->printError("You have been banned from the server.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
144 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
145 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
146
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
147 case SVRC_SALT:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
148 m_salt = stream.readString();
32
ee770597a281 - added support for in-game colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 31
diff changeset
149 m_state = RCON_AUTHENTICATING;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
150 sendPassword();
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
151 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
152
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
153 case SVRC_INVALIDPASSWORD:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
154 m_interface->printError("Login failed.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
155 m_state = RCON_DISCONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
156 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
157
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
158 case SVRC_MESSAGE:
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
159 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
160 String message = stream.readString();
32
ee770597a281 - added support for in-game colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 31
diff changeset
161 message.normalize();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
162 m_interface->printText("%s\n", message.chars());
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
163 }
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
164 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
166 case SVRC_LOGGEDIN:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
167 m_interface->print("Login successful!\n");
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
168 m_serverProtocol = stream.readByte();
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
169 m_hostname = stream.readString();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
170 m_interface->setTitle(m_hostname);
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
171 m_state = RCON_CONNECTED;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
172
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
173 for (int i = stream.readByte(); i > 0; --i)
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
174 processServerUpdates(stream);
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
175
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
176 m_interface->print("Previous messages:\n");
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
177
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
178 for (int i = stream.readByte(); i > 0; --i)
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
179 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
180 String message = stream.readString();
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
181 message.normalize();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
182 m_interface->printText("--- %s\n", message.chars());
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
183 }
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
184
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
185 m_interface->print("End of previous messages.\n");
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
186
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
187 // Watch sv_hostname so that we can update the titlebar when it changes.
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
188 requestWatch("sv_hostname");
130
9f54db6f9922 Commit ZFC's end of reliable RCON streams
Teemu Piippo <crimsondusk64@gmail.com>
parents: 106
diff changeset
189 m_interface->print ("Watch requested.\n");
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
190 break;
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
191
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
192 case SVRC_UPDATE:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
193 processServerUpdates(stream);
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
194 break;
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
195
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
196 case SVRC_TOOMANYTABCOMPLETES:
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
197 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
198 unsigned int numCompletions = stream.readShort();
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
199 m_interface->print("%d completions for '%s'.\n",
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
200 int(numCompletions), m_lastTabComplete.chars());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
201 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
202 break;
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
203
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
204 case SVRC_TABCOMPLETE:
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
205 {
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
206 StringList completes;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
207 completes.resize(stream.readByte());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
208
137
485cb6d6b98c Made Range not include the 'max' parameter, replaced a lot of for()-loops with C++11-style range-for-loops
Teemu Piippo <teemu@compsta2.com>
parents: 115
diff changeset
209 for (String& completion : completes)
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
210 completion = stream.readString();
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
211
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
212 if (completes.size() == 1)
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
213 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
214 m_interface->tabComplete(m_lastTabComplete, completes[0]);
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
215 }
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
216 else if (not completes.is_empty())
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
217 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
218 m_interface->print("Completions for '%s':\n", m_lastTabComplete.chars());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
219
137
485cb6d6b98c Made Range not include the 'max' parameter, replaced a lot of for()-loops with C++11-style range-for-loops
Teemu Piippo <teemu@compsta2.com>
parents: 115
diff changeset
220 for (int i : range(0, completes.size(), 8))
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
221 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
222 Range<int> spliceRange(i, min(i + 8, completes.size()));
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
223 StringList splice(completes.splice(spliceRange));
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
224 m_interface->print("- %s\n", splice.join(", ").chars());
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
225 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
226 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
227 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
228 break;
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
229
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
230 case SVRC_WATCHINGCVAR:
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
231 m_interface->print ("You are now watching %s\n", stream.readString().chars());
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
232 m_interface->print ("Its value is: %s\n", stream.readString().chars());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
233 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
234
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
235 case SVRC_ALREADYWATCHINGCVAR:
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
236 m_interface->print ("You are already watching %s\n", stream.readString().chars());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
237 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
238
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
239 case SVRC_WATCHCVARNOTFOUND:
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
240 m_interface->print ("CVar %s not found\n", stream.readString().chars());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
241 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
242
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
243 case SVRC_CVARCHANGED:
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
244 {
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
245 String name = stream.readString();
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
246 String value = stream.readString();
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
247 m_interface->print ("The value of CVar %s", name.chars());
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
248 m_interface->print (" is now %s\n", value.chars());
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
249
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
250 // If sv_hostname changes, update the titlebar
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
251 if (name == "sv_hostname")
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
252 {
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
253 m_hostname = value;
151
267ef11bd3ba Fixed complation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 150
diff changeset
254 m_interface->setTitle(m_hostname);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
255 }
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
256 }
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
257 break;
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
258
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
259 case SVRC_YOUREDISCONNECTED:
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
260 m_interface->print ("You have been disconnected: %s\n", stream.readString().chars());
103
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
261 m_interface->disconnected();
b78c0ca832a9 CVar watching stuff works now, fixed compilation
Teemu Piippo <crimsondusk64@gmail.com>
parents: 84
diff changeset
262 break;
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
263 }
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
264 }
13
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
265 }
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
266 catch (std::exception& e)
09dcaeaa216b - to hell with that 'ok' field. now throws an exception if attempts to read past the end
Teemu Piippo <crimsondusk64@gmail.com>
parents: 12
diff changeset
267 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
268 m_interface->printWarning("Couldn't process packet: %s\n", e.what());
163
5948441a1951 Added the ByteArray::quote() method to return a string representation of the byte array, and used it to print out the contents of unparseable packets.
Teemu Piippo <teemu@compsta2.com>
parents: 158
diff changeset
269 m_interface->printWarning("Packet contents was: %s\n", message.quote().chars());
5948441a1951 Added the ByteArray::quote() method to return a string representation of the byte array, and used it to print out the contents of unparseable packets.
Teemu Piippo <teemu@compsta2.com>
parents: 158
diff changeset
270 m_interface->printWarning("Stream position in payload was: %d\n", stream.position());
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
271 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
272 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
273
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
274 void RCONSession::processServerUpdates(Bytestream& packet)
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
275 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
276 int header = packet.readByte();
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
277
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
278 switch (RCONUpdateType(header))
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
279 {
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
280 case SVRCU_PLAYERDATA:
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
281 {
47
35b968619b0c - added a nicklist!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 32
diff changeset
282 StringList players;
35b968619b0c - added a nicklist!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 32
diff changeset
283
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
284 for (int i = packet.readByte(); i > 0; --i)
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
285 players.append(packet.readString());
47
35b968619b0c - added a nicklist!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 32
diff changeset
286
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
287 m_interface->setPlayerNames(players);
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
288 }
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
289 break;
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
290
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
291 case SVRCU_ADMINCOUNT:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
292 m_adminCount = packet.readByte();
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
293 m_interface->updateStatusBar();
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
294 break;
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
295
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
296 case SVRCU_MAP:
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
297 m_level = packet.readString();
138
c909c38ca886 Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents: 137
diff changeset
298 m_interface->updateStatusBar();
12
8d0d1b368de0 - rcon session now works! woo!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 11
diff changeset
299 break;
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
300
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
301 default:
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
302 m_interface->printWarning("Unknown server update type: %d\n", header);
70
0e947b487b18 Yay colors
Teemu Piippo <crimsondusk64@gmail.com>
parents: 58
diff changeset
303 break;
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
304 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
305 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
306
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
307 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
308 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
309 UDPSocket* RCONSession::getSocket()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
310 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
311 return &m_socket;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
312 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
313
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
314 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
315 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
316 void RCONSession::sendHello()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
317 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
318 m_interface->print("Connecting to %s...\n", m_address.to_string(IPAddress::WITH_PORT).chars());
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
319 send({CLRC_BEGINCONNECTION, RCON_PROTOCOL_VERSION});
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
320 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
321 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
322
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
323 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
324 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
325 void RCONSession::sendPassword()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
326 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
327 m_interface->print("Authenticating...\n");
158
de7574d292ad Added the ByteArray typedef for Vector<unsigned char>
Teemu Piippo <teemu@compsta2.com>
parents: 157
diff changeset
328 ByteArray message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
329 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
330 stream.writeByte(CLRC_PASSWORD);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
331 stream.writeString((m_salt + m_password).md5());
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
332 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
333 bumpLastPing();
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
334 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
335
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
336 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
337 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
338 void RCONSession::setPassword(const String& password)
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
339 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
340 m_password = password;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
341 }
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
342
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
343 // -------------------------------------------------------------------------------------------------
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
344 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
345 void RCONSession::bumpLastPing()
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
346 {
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
347 time_t now;
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
348 time(&now);
10
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
349 m_lastPing = now;
3874575d924d - begin work on rcon sessions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
350 }
14
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
351
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
352 // -------------------------------------------------------------------------------------------------
33b8f428bacb - begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 13
diff changeset
353 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
354 bool RCONSession::isActive() const
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
355 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
356 return getState() != RCON_DISCONNECTED;
31
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
357 }
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
358
b5b5a6a96d91 - added input history (use up/down to navigate)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 29
diff changeset
359 // -------------------------------------------------------------------------------------------------
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
360 // Returns true if the message was successfully sent.
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
361 //
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
362 bool RCONSession::sendCommand(const String& commandString)
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
363 {
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
364 if (m_state != RCON_CONNECTED or commandString.isEmpty())
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
365 return false;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
366
158
de7574d292ad Added the ByteArray typedef for Vector<unsigned char>
Teemu Piippo <teemu@compsta2.com>
parents: 157
diff changeset
367 ByteArray message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
368 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
369 stream.writeByte(CLRC_COMMAND);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
370 stream.writeString(commandString);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
371 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
372 bumpLastPing();
17
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
373 return true;
50341dec533e - added command sending
Teemu Piippo <crimsondusk64@gmail.com>
parents: 15
diff changeset
374 }
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
375
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
376 // -------------------------------------------------------------------------------------------------
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
377 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
378 RCONSessionState RCONSession::getState() const
24
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
379 {
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
380 return m_state;
e651d02802c0 - the interface is now able to connect to arbitrary hosts (uses ^N to start the prompt) instead of the hardcoded localhost:10666
Teemu Piippo <crimsondusk64@gmail.com>
parents: 23
diff changeset
381 }
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
382
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
383 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
384 //
72
1b9c53e0c846 Massive refactor
Teemu Piippo <crimsondusk64@gmail.com>
parents: 71
diff changeset
385 const IPAddress& RCONSession::address() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
386 {
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
387 return m_address;
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
388 }
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
389
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
390 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
391 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
392 int RCONSession::getAdminCount() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
393 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
394 return m_adminCount;
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
395 }
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
396
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
397 // -------------------------------------------------------------------------------------------------
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
398 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
399 const String& RCONSession::getLevel() const
27
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
400 {
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
401 return m_level;
089e37c0887e - now exits cleanly with ^Q!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 25
diff changeset
402 }
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
403
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
404 // -------------------------------------------------------------------------------------------------
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
405 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
406 void RCONSession::requestTabCompletion(const String& part)
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
407 {
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
408 if (m_serverProtocol >= 4)
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
409 {
158
de7574d292ad Added the ByteArray typedef for Vector<unsigned char>
Teemu Piippo <teemu@compsta2.com>
parents: 157
diff changeset
410 ByteArray message;
157
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
411 Bytestream stream(message);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
412 stream.writeByte(CLRC_TABCOMPLETE);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
413 stream.writeString(part);
42bb29924218 Bytestream now behaves more like a cursor. It does not store the data anymore, rather it leaves the user to specify a vector to use for storage.
Teemu Piippo <teemu@compsta2.com>
parents: 156
diff changeset
414 send(message);
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
415 bumpLastPing();
41
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
416 m_lastTabComplete = part;
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
417 }
9ab869656b9e - re-commit tab-complete
Teemu Piippo <crimsondusk64@gmail.com>
parents: 40
diff changeset
418 else
83
08bfc3d9d2ae Removed format.cpp and format.h, use built-in formatting instead
Teemu Piippo <crimsondusk64@gmail.com>
parents: 81
diff changeset
419 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
420 m_interface->print("This server does not support tab-completion\n", m_serverProtocol);
83
08bfc3d9d2ae Removed format.cpp and format.h, use built-in formatting instead
Teemu Piippo <crimsondusk64@gmail.com>
parents: 81
diff changeset
421 }
88
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
422 }
08ccaf26cffd Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents: 83
diff changeset
423
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
424 // -------------------------------------------------------------------------------------------------
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
425 //
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
426 void RCONSession::setInterface(Interface* interface)
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
427 {
156
ce66d7e374bf Restyled RCONSession method names and paren style
Teemu Piippo <teemu@compsta2.com>
parents: 152
diff changeset
428 m_interface = interface;
92
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
429 }
39947c46ed17 Suppress more MSVC warnings
Teemu Piippo <tsapii@utu.fi>
parents: 88
diff changeset
430
106
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
431 // -------------------------------------------------------------------------------------------------
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
432 //
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
433 void RCONSession::requestWatch(const String& cvar)
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
434 {
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
435 StringList cvars;
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
436 cvars.append(cvar);
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
437 requestWatch(cvars);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
438 }
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
439
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
440 // -------------------------------------------------------------------------------------------------
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
441 //
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
442 void RCONSession::requestWatch(const StringList& cvars)
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
443 {
166
af5fa8c43ca8 Fixed compilation problem
Teemu Piippo <teemu@compsta2.com>
parents: 165
diff changeset
444 ByteArray message;
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
445 Bytestream stream(message);
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
446 stream.writeByte(CLRC_WATCHCVAR);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
447
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
448 for (const String& cvar : cvars)
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
449 stream.writeString(cvar.normalized());
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
450
160
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
451 stream.writeString("");
cf514fa0f1cc Fixed compilation problems.
Teemu Piippo <teemu@compsta2.com>
parents: 159
diff changeset
452 send(message);
104
a76af67a3a4b Update the titlebar when sv_hostname changes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 103
diff changeset
453 }
106
7b156b764d11 Merged with default
Teemu Piippo <crimsondusk64@gmail.com>
parents: 104 105
diff changeset
454
105
b4466472aecd Added some basic IRC-like commands that can be used to do what keystrokes can do without actually using keystrokes
Teemu Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
455 END_ZFC_NAMESPACE

mercurial