From 282d93a97ee06251bf32083e01fad0c35748dc10 Mon Sep 17 00:00:00 2001 From: max Date: Mon, 3 Feb 2025 02:23:00 +0100 Subject: [PATCH] Reworking ui & server initializing --- .vscode/settings.json | 5 ++++- src/net/include/log.h | 2 +- src/net/include/nx_curses.h | 3 +-- src/net/logging/log.c | 26 +++++++++++++++++++++++++- src/net/netex.c | 10 ---------- src/net/tui/nx_curses.c | 30 +++++++++++++++++++++++++----- src/server/main.c | 26 +++++++++++++++++--------- src/server/server.c | 9 ++++++--- src/server/server.h | 4 ++-- src/server/srv_ui.c | 16 +++++++++++++++- 10 files changed, 96 insertions(+), 35 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 37b1354..67a335c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,9 @@ { "task.problemMatchers.neverPrompt": true, "files.associations": { - "log.h": "c" + "log.h": "c", + "netex.h": "c", + "nx_curses.h": "c", + "server.h": "c" } } \ No newline at end of file diff --git a/src/net/include/log.h b/src/net/include/log.h index ae07929..03ec4cc 100755 --- a/src/net/include/log.h +++ b/src/net/include/log.h @@ -13,7 +13,7 @@ typedef enum log_severity struct log_info { - LogSeverity serverity; + size_t message_length; char* message; }; diff --git a/src/net/include/nx_curses.h b/src/net/include/nx_curses.h index 0860dd3..48b1e5c 100755 --- a/src/net/include/nx_curses.h +++ b/src/net/include/nx_curses.h @@ -11,8 +11,7 @@ #define CHAT_PREFIX_COLOR 4 -int setup_curses(void); -void shutdown_curses(void); +int execute_ncurses(void); typedef struct scr_size { diff --git a/src/net/logging/log.c b/src/net/logging/log.c index 399fb72..4fbcfd3 100755 --- a/src/net/logging/log.c +++ b/src/net/logging/log.c @@ -7,4 +7,28 @@ void initialize_logger(void) // Create log queue // Create log thread // Start log thread -} \ No newline at end of file +} + +//void log(char* msg, LogSeverity severity) +//{ +// switch (severity) +// { +// case Verbose: +// /* code */ +// break; +// case Debug: +// break; +// case Info: +// break; +// case Warning: +// break; +// case Error: +// break; +// case Fatal: +// break; +// default: +// break; +// } +// +// +//} \ No newline at end of file diff --git a/src/net/netex.c b/src/net/netex.c index 9850759..c63842e 100755 --- a/src/net/netex.c +++ b/src/net/netex.c @@ -14,14 +14,10 @@ #define PORT_NUM_LENGHT 6 void handle_exit(int c); -void handle_term_resize(int c); void netex_init(void) { signal(SIGINT, handle_exit); - signal(SIGWINCH, handle_term_resize); - - setup_curses(); // OpenSSL SSL_load_error_strings(); @@ -31,7 +27,6 @@ void netex_init(void) void netex_shutdown(void) { - shutdown_curses(); // OpenSSL ERR_free_strings(); EVP_cleanup(); @@ -198,9 +193,4 @@ void handle_exit(int c) (void)c; netex_shutdown(); exit(OK); -} -void handle_term_resize(int c) -{ - (void)c; - //TODO: Set parameter for ncurses code to check if window is resized. } \ No newline at end of file diff --git a/src/net/tui/nx_curses.c b/src/net/tui/nx_curses.c index 18033ff..0b9d67e 100755 --- a/src/net/tui/nx_curses.c +++ b/src/net/tui/nx_curses.c @@ -1,7 +1,9 @@ #include "netex.h" #include "nx_curses.h" -int setup_curses(void) +bool running; + +int execute_ncurses(void) { initscr(); noecho(); // Stop printing key presses @@ -13,10 +15,28 @@ int setup_curses(void) init_pair(DEF_COLOR_PAIR, COLOR_WHITE, COLOR_BLACK); init_pair(DEF_WIN_COLOR, COLOR_GREEN, COLOR_BLACK); } - return 0; -} -void shutdown_curses(void) -{ + halfdelay(10); + running = true; + + while (running) + { + int key = getch(); + switch (key) + { + case KEY_RESIZE: + // Resize function + break; + case 'q': + // Exit? + running = false; + break; + default: + // Default rendering + break; + } + } + endwin(); + return 0; } \ No newline at end of file diff --git a/src/server/main.c b/src/server/main.c index 6e2931b..c338f27 100755 --- a/src/server/main.c +++ b/src/server/main.c @@ -10,20 +10,28 @@ int main(int argc, char *argv[]) { netex_init(); - if (!setup_srv_curses()) - { - PRINT_LINE("Failed to setup srv windows!"); - getch(); - return 0; - } - getch(); // For debuging! + const int init_result = initialize_server(argc, argv); if (init_result) { WARN("Failed to initialize server. Exiting..."); return init_result; } - const int srv_exec_result = server_execute(); + const int srv_start_result = server_start(); // Is now holding + + if (!srv_start_result) + { + netex_shutdown(); + return srv_start_result; + } + + if (!execute_ui()) + { + PRINT_LINE("Failed to setup srv windows!"); + getch(); + return 0; + } + netex_shutdown(); - return srv_exec_result; + return 0; } \ No newline at end of file diff --git a/src/server/server.c b/src/server/server.c index 9a9e236..7498edc 100755 --- a/src/server/server.c +++ b/src/server/server.c @@ -62,19 +62,22 @@ int initialize_server(int argc, char* argv[]) return 0; } -int server_execute(void) +int server_start(void) { const int thread_create_result = pthread_create(&listen_thread, NULL, server_listen, NULL); if (thread_create_result != 0) { ERROR("Failed to create main listening thread, pthread error: %i", thread_create_result); - return -1; + return 0; } int listen_thread_result; const int join_result = pthread_join(listen_thread, (void**)&listen_thread_result); if (join_result == 0) + { WARN("Listen thread has exited with errors!"); - return 0; + return 0; + } + return 1; } void* server_listen(void* args) diff --git a/src/server/server.h b/src/server/server.h index 036e0f8..fba9d84 100755 --- a/src/server/server.h +++ b/src/server/server.h @@ -3,9 +3,9 @@ #include "nx_curses.h" int initialize_server(int argc, char* argv[]); -int server_execute(void); +int server_start(void); /* Curses */ -bool setup_srv_curses(); +bool execute_ui(); #endif //SERVER_H diff --git a/src/server/srv_ui.c b/src/server/srv_ui.c index 88afa7b..5912aa4 100755 --- a/src/server/srv_ui.c +++ b/src/server/srv_ui.c @@ -1,3 +1,5 @@ +#include + #include "netex.h" #include "server.h" @@ -9,8 +11,10 @@ bool write_info(const char* conn, int port, const char* ipv); bool setup_log_window(void); void calculate_window_sizes(void); -bool setup_srv_curses(void) +bool execute_ui(void) { + // setup_curses(resize_func, keypressed_func, onexit_func); + execute_ncurses(); calculate_window_sizes(); if (!setup_info_window()) return false; @@ -78,4 +82,14 @@ void calculate_window_sizes(void) log_win_size.y = scr_size.y-16; log_win_size.x = GET_PERC(scr_size.x, 50); +} + +void handle_term_resize(int c) +{ + (void)c; + calculate_window_sizes(); + refresh(); + wrefresh(info_win); + wrefresh(log_win); + wrefresh(log_win_content); } \ No newline at end of file