Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
terminal_chat_console.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2015 est31 <MTest31@outlook.com>
4
5#pragma once
6
7#include "chat.h"
8#include "threading/thread.h"
9#include "util/container.h"
10#include "log_internal.h"
11
12#include <csignal>
13#include <set>
14#include <sstream>
15
16
17struct ChatInterface;
18
19class TermLogOutput : public ILogOutput {
20public:
21
22 void logRaw(LogLevel lev, std::string_view line)
23 {
24 queue.push_back(std::make_pair(lev, std::string(line)));
25 }
26
27 virtual void log(LogLevel lev, const std::string &combined,
28 const std::string &time, const std::string &thread_name,
29 std::string_view payload_text)
30 {
31 std::ostringstream os(std::ios_base::binary);
32 os << time << ": [" << thread_name << "] " << payload_text;
33
34 queue.push_back(std::make_pair(lev, os.str()));
35 }
36
38};
39
41public:
42
44 Thread("TerminalThread")
45 {}
46
47 void setup(
48 ChatInterface *iface,
49 volatile std::sig_atomic_t *kill_requested,
50 const std::string &nick)
51 {
52 m_nick = nick;
53 m_kill_requested = kill_requested;
54 m_chat_interface = iface;
55 }
56
57 virtual void *run();
58
59 // Highly required!
60 void clearKillStatus() { m_kill_requested = nullptr; }
61
63
64private:
65 // these have stupid names so that nobody missclassifies them
66 // as curses functions. Oh, curses has stupid names too?
67 // Well, at least it was worth a try...
70
71 void draw_text();
72
73 void typeChatMessage(const std::wstring &m);
74
75 void handleInput(int ch, bool &complete_redraw_needed);
76
77 void step(int ch);
78
79 // Used to ensure the deinitialisation is always called.
87
89 std::string m_nick;
90
93
94 std::set<std::string> m_nicks;
95
96 int m_cols;
97 int m_rows;
99
100 volatile std::sig_atomic_t *m_kill_requested = nullptr;
103
105
106 bool m_esc_mode = false;
107
108 u64 m_game_time = 0;
110};
111
Definition chat.h:270
Definition log_internal.h:90
Definition container.h:126
void push_back(const T &t)
Definition container.h:139
Definition terminal_chat_console.h:19
MutexedQueue< std::pair< LogLevel, std::string > > queue
Definition terminal_chat_console.h:37
void logRaw(LogLevel lev, std::string_view line)
Definition terminal_chat_console.h:22
virtual void log(LogLevel lev, const std::string &combined, const std::string &time, const std::string &thread_name, std::string_view payload_text)
Definition terminal_chat_console.h:27
Definition terminal_chat_console.h:40
void handleInput(int ch, bool &complete_redraw_needed)
volatile std::sig_atomic_t * m_kill_requested
Definition terminal_chat_console.h:100
void clearKillStatus()
Definition terminal_chat_console.h:60
ChatBackend m_chat_backend
Definition terminal_chat_console.h:101
int m_log_level
Definition terminal_chat_console.h:88
void typeChatMessage(const std::wstring &m)
TermLogOutput m_log_output
Definition terminal_chat_console.h:104
u8 m_utf8_bytes_to_wait
Definition terminal_chat_console.h:91
TerminalChatConsole()
Definition terminal_chat_console.h:43
int m_cols
Definition terminal_chat_console.h:96
u32 m_time_of_day
Definition terminal_chat_console.h:109
bool m_can_draw_text
Definition terminal_chat_console.h:98
void setup(ChatInterface *iface, volatile std::sig_atomic_t *kill_requested, const std::string &nick)
Definition terminal_chat_console.h:47
virtual void * run()
void step(int ch)
u64 m_game_time
Definition terminal_chat_console.h:108
std::string m_pending_utf8_bytes
Definition terminal_chat_console.h:92
std::set< std::string > m_nicks
Definition terminal_chat_console.h:94
int m_rows
Definition terminal_chat_console.h:97
bool m_esc_mode
Definition terminal_chat_console.h:106
ChatInterface * m_chat_interface
Definition terminal_chat_console.h:102
std::string m_nick
Definition terminal_chat_console.h:89
Definition thread.h:57
LogLevel
Definition log_internal.h:18
@ LL_ACTION
Definition log_internal.h:22
Definition chat_interface.h:60
Definition terminal_chat_console.h:80
CursesInitHelper(TerminalChatConsole *a_console)
Definition terminal_chat_console.h:82
~CursesInitHelper()
Definition terminal_chat_console.h:85
TerminalChatConsole * cons
Definition terminal_chat_console.h:81
TerminalChatConsole g_term_console