|
|
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: // 標準入出力コンソール
75: class ConsoleStdio
76: : public Console
77: {
78: public:
79: ConsoleStdio();
1.1.1.2 root 80: ~ConsoleStdio() override;
1.1 root 81:
1.1.1.2 root 82: bool Init() override;
83: bool Accept() override;
84: void Close() override;
1.1 root 85: };
86:
87: // TCP コンソール
88: class ConsoleTCP
89: : public Console
90: {
1.1.1.2 root 91: using inherited = Console;
1.1 root 92: public:
93: ConsoleTCP();
1.1.1.2 root 94: ~ConsoleTCP() override;
1.1 root 95:
1.1.1.2 root 96: bool Init() override;
97: bool Accept() override;
98: void Close() override;
1.1 root 99:
100: private:
1.1.1.3 ! root 101: int ls {};
! 102: int sock {};
! 103: struct addrinfo *res {};
! 104: struct addrinfo *ai {};
1.1 root 105: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.