Wed, 27 Jan 2021 19:39:14 +0200
handle exiting ZFC without using exceptions
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
190 | 2 | Copyright 2014 - 2021 Teemu Piippo |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
3 | All rights reserved. |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | Redistribution and use in source and binary forms, with or without |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | modification, are permitted provided that the following conditions |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | are met: |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | 1. Redistributions of source code must retain the above copyright |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | notice, this list of conditions and the following disclaimer. |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | 2. Redistributions in binary form must reproduce the above copyright |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | notice, this list of conditions and the following disclaimer in the |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | documentation and/or other materials provided with the distribution. |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | 3. Neither the name of the copyright holder nor the names of its |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | contributors may be used to endorse or promote products derived from |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | this software without specific prior written permission. |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
22 | OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
23 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
25 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
26 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | */ |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | #pragma once |
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | #include "main.h" |
72 | 33 | #include "network/ipaddress.h" |
34 | #include "coloredline.h" | |
35 | #include "network/rconsession.h" | |
89
777b2a10b835
Add support for standard pdcurses, thanks to Leonard for pointing out the solutions to a few mysteries.
Teemu Piippo <tsapii@utu.fi>
parents:
88
diff
changeset
|
36 | #include "coloredline.h" |
777b2a10b835
Add support for standard pdcurses, thanks to Leonard for pointing out the solutions to a few mysteries.
Teemu Piippo <tsapii@utu.fi>
parents:
88
diff
changeset
|
37 | |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
38 | BEGIN_ZFC_NAMESPACE |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
39 | |
72 | 40 | class Interface |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | { |
72 | 42 | public: |
43 | enum InputState | |
44 | { | |
45 | INPUTSTATE_NORMAL, | |
46 | INPUTSTATE_ADDRESS, | |
47 | INPUTSTATE_PASSWORD, | |
48 | INPUTSTATE_CONFIRM_DISCONNECTION, | |
49 | }; | |
50 | ||
51 | Interface(); | |
192
94c67ae846fc
handle exiting ZFC without using exceptions
Teemu Piippo <teemu@hecknology.net>
parents:
191
diff
changeset
|
52 | virtual ~Interface(); |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
53 | void connect(std::string address, std::string password); |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
54 | void disconnected(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
55 | RCONSession* getSession() { return &m_session; } |
192
94c67ae846fc
handle exiting ZFC without using exceptions
Teemu Piippo <teemu@hecknology.net>
parents:
191
diff
changeset
|
56 | void handleCommand(const std::string& input, bool *shouldquit); |
94c67ae846fc
handle exiting ZFC without using exceptions
Teemu Piippo <teemu@hecknology.net>
parents:
191
diff
changeset
|
57 | void handleInput(bool *shouldquit); |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
58 | void needRefresh(); |
189
248d0b85cbda
various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents:
186
diff
changeset
|
59 | void __cdecl print(const char* fmtstr, ...) GNUATTRIBUTE((format(printf, 2, 3))); |
248d0b85cbda
various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents:
186
diff
changeset
|
60 | void __cdecl printWarning(const char* fmtstr, ...) GNUATTRIBUTE((format(printf, 2, 3))); |
248d0b85cbda
various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents:
186
diff
changeset
|
61 | void __cdecl printError(const char* fmtstr, ...) GNUATTRIBUTE((format(printf, 2, 3))); |
248d0b85cbda
various changes, better network error handling
Teemu Piippo <teemu@hecknology.net>
parents:
186
diff
changeset
|
62 | void __cdecl printText(const char* fmtstr, ...) GNUATTRIBUTE((format(printf, 2, 3))); |
72 | 63 | void render(); |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
64 | void renderFull(); |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
65 | void setPlayerNames(const std::vector<std::string>& names); |
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
66 | void setTitle(const std::string& message); |
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
67 | void tabComplete(const std::string& part, std::string complete); |
138
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
68 | void updateStatusBar(); |
c909c38ca886
Restyled Interface's public method names
Teemu Piippo <teemu@compsta2.com>
parents:
132
diff
changeset
|
69 | void vprint(const char* fmtstr, va_list args); |
72 | 70 | |
71 | private: | |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
72 | std::vector<std::string> m_inputHistory; |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
73 | int m_inputCursor; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
74 | int m_cursorPosition; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
75 | int m_inputPanning; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
76 | bool m_needRefresh; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
77 | bool m_needStatusBarRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
78 | bool m_needInputRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
79 | bool m_needOutputRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
80 | bool m_needNicklistRender; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
81 | struct { char ch; int x; } m_cursorCharacter; |
191
2e6cbacafdc7
various little touchups
Teemu Piippo <teemu@hecknology.net>
parents:
190
diff
changeset
|
82 | std::vector<ColoredLine> m_outputLines; |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
83 | int m_outputScroll; |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
84 | std::string m_title; |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
85 | InputState m_inputState; |
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
86 | std::function<void(bool)> m_disconnectCallback; |
186
9330b93d9946
cleanup ip address code
Teemu Piippo <teemu@hecknology.net>
parents:
183
diff
changeset
|
87 | net::ip_address m_remoteAddress; |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
88 | std::string m_statusBarText; |
179
7fc34735178e
start cleaning up unused code
Teemu Piippo <teemu@hecknology.net>
parents:
139
diff
changeset
|
89 | std::vector<ColoredLine> m_playerNames; |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
90 | std::string m_pasteBuffer; |
127
6610b8b29848
Restyled the names of Interface's private members
Teemu Piippo <crimsondusk64@gmail.com>
parents:
116
diff
changeset
|
91 | RCONSession m_session; |
72 | 92 | |
139
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
93 | void detachInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
94 | int findNextWord(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
95 | int findPreviousWord(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
96 | void flushInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
97 | chtype getColorPair(Color fg, Color bg); |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
98 | const std::string& getCurrentInput(); |
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
99 | std::string& getEditableInput(); |
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
100 | std::string getPromptString(); |
139
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
101 | void moveInputCursor(int delta); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
102 | int nicklistWidth(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
103 | void positionCursor(); |
183
9b6a0daedfc0
renamed String and StringList uses
Teemu Piippo <teemu@hecknology.net>
parents:
179
diff
changeset
|
104 | void printToConsole(std::string message); |
139
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
105 | int renderColorline(int y, int x0, int width, const ColoredLine& line, bool allowWrap); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
106 | void renderInput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
107 | void renderNicklist(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
108 | void renderOutput(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
109 | void renderStatusBar(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
110 | void renderTitlebar(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
111 | void resetTitle(); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
112 | void safeDisconnect(std::function<void(bool)> afterwards); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
113 | void setInputState(InputState newstate); |
da7d5a8e608f
Restyled the names of the private methods of Interface
Teemu Piippo <teemu@compsta2.com>
parents:
138
diff
changeset
|
114 | void yank(int a, int b); |
186
9330b93d9946
cleanup ip address code
Teemu Piippo <teemu@hecknology.net>
parents:
183
diff
changeset
|
115 | bool tryResolveAddress(const std::string& address_string, net::ip_address *target); |
14
33b8f428bacb
- begin work on interface - input line works for the most part :)
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
116 | }; |
88
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
117 | |
08ccaf26cffd
Now works with MSVC 2010/pdcurses-win32a
Teemu Piippo <tsapii@utu.fi>
parents:
83
diff
changeset
|
118 | END_ZFC_NAMESPACE |