|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "header.h"
10: #if defined(HAVE_HISTEDIT_H)
11: #include <histedit.h>
12: #endif
13:
14: // コンソールの基本クラス
15: class Console
16: {
17: public:
18: Console();
19: virtual ~Console() { }
20:
21: // 初期化
22: virtual bool Init() = 0;
1.1.1.2 root 23: // 受け付ける
24: virtual bool Accept() = 0;
1.1 root 25:
26: // EditLine を初期化する
27: void InitEditLine(const char *prompt);
28:
29: virtual void Close();
30:
31: // プロンプトを出力する
32: void Prompt();
33:
34: void Print(const char *fmt, ...) __printflike(2, 3);
35: void Flush();
36:
37: // 1行読み込む。
38: // 正常に読み込めれば true を返す。
39: // バッファは \0 で終端してある。
40: bool Gets(std::string&);
41:
42: // 受信データがあれば正、なければ 0 を返す。エラーなら負数を返す。
1.1.1.2 root 43: // msec はタイムアウト値の指定。0 ならポーリング。(タイムアウトなしは-1)
44: int Poll(int msec = 0);
1.1 root 45:
46: protected:
47: void FDOpen();
48:
49: struct {
50: int fd;
51: FILE *file;
1.1.1.3 root 52: } inp {}, out {};
1.1 root 53:
54: // Editline を使うかどうかのフラグ。継承側がセットする。
55: // 今のところ TCP console では動かないのでこんなことになっている。
1.1.1.3 root 56: bool use_editline {};
1.1 root 57:
58: // Editline
1.1.1.3 root 59: const char *prompt {};
1.1 root 60: #if defined(HAVE_HISTEDIT_H)
1.1.1.3 root 61: EditLine *el {};
62: History *hist {};
1.1 root 63: HistEvent hev {};
64: #endif
65:
66: private:
67: // Gets() の下請け
68: #if defined(HAVE_HISTEDIT_H)
69: bool Gets_editline(std::string& buf);
70: #endif
71: bool Gets_normal(std::string& buf);
72: };
73:
74: // 標準入出力コンソール
1.1.1.4 ! root 75: class ConsoleStdio : public Console
1.1 root 76: {
77: public:
78: ConsoleStdio();
1.1.1.2 root 79: ~ConsoleStdio() override;
1.1 root 80:
1.1.1.2 root 81: bool Init() override;
82: bool Accept() override;
83: void Close() override;
1.1 root 84: };
85:
86: // TCP コンソール
1.1.1.4 ! root 87: class ConsoleTCP : public Console
1.1 root 88: {
1.1.1.2 root 89: using inherited = Console;
1.1 root 90: public:
91: ConsoleTCP();
1.1.1.2 root 92: ~ConsoleTCP() override;
1.1 root 93:
1.1.1.2 root 94: bool Init() override;
95: bool Accept() override;
96: void Close() override;
1.1 root 97:
98: private:
1.1.1.3 root 99: int ls {};
100: int sock {};
101: struct addrinfo *res {};
102: struct addrinfo *ai {};
1.1 root 103: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.