From dacf6e0625d10ff47d2aad0ca8d705f90f030119 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Tom=C3=A1s?= Date: Wed, 22 Jul 2020 22:52:51 -0300 Subject: Update architecture --- src/client/interface.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/client/interface.cpp (limited to 'src/client/interface.cpp') diff --git a/src/client/interface.cpp b/src/client/interface.cpp new file mode 100644 index 0000000..0da5653 --- /dev/null +++ b/src/client/interface.cpp @@ -0,0 +1,95 @@ +#define NORMAL_MODE 0 +#define INSERT_MODE 1 + +class Interface { + Socket io; + Window window; + Cursor cursor; + + public: + + Interface() : cursor(window) { + io.connect(); + } + + void run() { + int mode = NORMAL_MODE; + int quit = 0; + while (!quit) { + update(); + + int input = window.get_input(); + if (mode == NORMAL_MODE) { + switch (input) { + case '': + quit = 1; + break; + case 'i': + mode = INSERT_MODE; + break; + case 'h': + move_left(); + break; + case 'l': + move_right(); + break; + } + } else { + switch (input) { + case '': + mode = NORMAL_MODE; + break; + case KEY_BACKSPACE: + delete_element(); + break; + default: + insert_element(input); + } + } + } + } + + void update() { + int8_t msg[5]; + msg[0] = OP_SHOW; + encode2(window.width, msg, 1); + encode2(window.height, msg, 3); + io.send(msg, 5); + io.recv(window.view, window.width * window.height); + io.recv(window.line_ends, window.height); + + window.update(); + cursor.update(); + } + + void move_left() { + int8_t mov[2]; + mov[0] = OP_MOVE1; + mov[1] = -1; + io.send(mov, 2); + cursor.move_left(); + } + + void move_right() { + int8_t mov[2]; + mov[0] = OP_MOVE1; + mov[1] = 1; + io.send(mov, 2); + cursor.move_right(); + } + + void delete_element() { + int8_t del; + del = OP_DELETE; + io.send(&del, 1); + cursor.move_left(); + } + + void insert_element(int input) { + int8_t ins[2]; + ins[0] = OP_INSERT; + ins[1] = input; + io.send(ins, 2); + cursor.move_right(); + } +}; -- cgit v1.2.3