Performance fix + SAO factorization
[oweals/minetest.git] / src / chat_interface.h
1 /*
2 Minetest
3 Copyright (C) 2015 est31 <MTest31@outlook.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef CHAT_INTERFACE_H
21 #define CHAT_INTERFACE_H
22
23 #include "util/container.h"
24 #include <string>
25 #include <queue>
26 #include "irrlichttypes.h"
27
28 enum ChatEventType {
29         CET_CHAT,
30         CET_NICK_ADD,
31         CET_NICK_REMOVE,
32         CET_TIME_INFO,
33 };
34
35 class ChatEvent {
36 protected:
37         ChatEvent(ChatEventType a_type) { type = a_type; }
38 public:
39         ChatEventType type;
40 };
41
42 struct ChatEventTimeInfo : public ChatEvent {
43         ChatEventTimeInfo(
44                 u64 a_game_time,
45                 u32 a_time) :
46         ChatEvent(CET_TIME_INFO),
47         game_time(a_game_time),
48         time(a_time)
49         {}
50
51         u64 game_time;
52         u32 time;
53 };
54
55 struct ChatEventNick : public ChatEvent {
56         ChatEventNick(ChatEventType a_type,
57                 const std::string &a_nick) :
58         ChatEvent(a_type), // one of CET_NICK_ADD, CET_NICK_REMOVE
59         nick(a_nick)
60         {}
61
62         std::string nick;
63 };
64
65 struct ChatEventChat : public ChatEvent {
66         ChatEventChat(const std::string &a_nick,
67                 const std::wstring &an_evt_msg) :
68         ChatEvent(CET_CHAT),
69         nick(a_nick),
70         evt_msg(an_evt_msg)
71         {}
72
73         std::string nick;
74         std::wstring evt_msg;
75 };
76
77 struct ChatInterface {
78         MutexedQueue<ChatEvent *> command_queue; // chat backend --> server
79         MutexedQueue<ChatEvent *> outgoing_queue; // server --> chat backend
80 };
81
82 #endif