|
|
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;
52: } inp, out;
53:
54: // Editline を使うかどうかのフラグ。継承側がセットする。
55: // 今のところ TCP console では動かないのでこんなことになっている。
56: bool use_editline = false;
57:
58: // Editline
59: const char *prompt = NULL;
60: #if defined(HAVE_HISTEDIT_H)
61: EditLine *el = NULL;
62: History *hist = NULL;
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:
101: int ls = 0;
102: int sock = 0;
103: struct addrinfo *res = NULL;
104: struct addrinfo *ai = NULL;
105: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.