mirror of
https://github.com/hmaxnl/netex.git
synced 2025-02-22 13:45:02 +01:00
Reworking threads. Thread states
This commit is contained in:
parent
282d93a97e
commit
a07a3236e6
7
.vscode/tasks.json
vendored
7
.vscode/tasks.json
vendored
|
@ -3,10 +3,15 @@
|
||||||
{
|
{
|
||||||
"label": "build_start_server",
|
"label": "build_start_server",
|
||||||
"dependsOn": [
|
"dependsOn": [
|
||||||
"CMake: clean rebuild",
|
"cmake-build",
|
||||||
"netex_srv-gdbserver"
|
"netex_srv-gdbserver"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"label": "cmake-build",
|
||||||
|
"command": "cmake --build ."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"label": "netex_srv-gdbserver",
|
"label": "netex_srv-gdbserver",
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#define CHAT_PREFIX_COLOR 4
|
#define CHAT_PREFIX_COLOR 4
|
||||||
|
|
||||||
|
|
||||||
int execute_ncurses(void);
|
unsigned long start_ui(void);
|
||||||
|
|
||||||
typedef struct scr_size
|
typedef struct scr_size
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,10 +1,22 @@
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "netex.h"
|
#include "netex.h"
|
||||||
#include "nx_curses.h"
|
#include "nx_curses.h"
|
||||||
|
|
||||||
bool running;
|
bool running;
|
||||||
|
pthread_t ui_thread;
|
||||||
|
void* ui_routine(void* args);
|
||||||
|
|
||||||
int execute_ncurses(void)
|
|
||||||
|
unsigned long start_ui(void)
|
||||||
{
|
{
|
||||||
|
const int thread_result = pthread_create(&ui_thread, NULL, ui_routine, NULL);
|
||||||
|
return thread_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* ui_routine(void* args)
|
||||||
|
{
|
||||||
|
(void)args;
|
||||||
initscr();
|
initscr();
|
||||||
noecho(); // Stop printing key presses
|
noecho(); // Stop printing key presses
|
||||||
if (has_colors() && can_change_color())
|
if (has_colors() && can_change_color())
|
||||||
|
@ -38,5 +50,6 @@ int execute_ncurses(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
endwin();
|
endwin();
|
||||||
return 0;
|
|
||||||
|
pthread_exit(0);
|
||||||
}
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "netex.h"
|
#include "netex.h"
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
|
@ -6,32 +8,48 @@
|
||||||
// https://stackoverflow.com/questions/40812836/how-to-create-chat-server-using-openssl-in-c
|
// https://stackoverflow.com/questions/40812836/how-to-create-chat-server-using-openssl-in-c
|
||||||
// https://www.cs.cmu.edu/~srini/15-441/F02/Projects/lab01/reference/part1.pdf
|
// https://www.cs.cmu.edu/~srini/15-441/F02/Projects/lab01/reference/part1.pdf
|
||||||
|
|
||||||
|
int shutdown(int code);
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
netex_init();
|
netex_init();
|
||||||
|
|
||||||
|
const unsigned long ui_thread = start_ui();
|
||||||
|
if (ui_thread != 0)
|
||||||
|
{
|
||||||
|
PRINT_LINE("Failed to start ui thread!");
|
||||||
|
return shutdown(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start server thread
|
||||||
|
|
||||||
const int init_result = initialize_server(argc, argv);
|
const int init_result = initialize_server(argc, argv);
|
||||||
if (init_result)
|
if (init_result)
|
||||||
{
|
{
|
||||||
WARN("Failed to initialize server. Exiting...");
|
WARN("Failed to initialize server. Exiting...");
|
||||||
return init_result;
|
|
||||||
}
|
}
|
||||||
const int srv_start_result = server_start(); // Is now holding
|
const int srv_start_result = server_start(); // Is now holding
|
||||||
|
|
||||||
if (!srv_start_result)
|
if (!srv_start_result)
|
||||||
{
|
{
|
||||||
netex_shutdown();
|
WARN("Error running server...");
|
||||||
return srv_start_result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!execute_ui())
|
// Join server thread
|
||||||
|
|
||||||
|
int ui_thread_result;
|
||||||
|
const int join_ui = pthread_join(ui_thread, (void**)&ui_thread_result);
|
||||||
|
if (join_ui != 0)
|
||||||
{
|
{
|
||||||
PRINT_LINE("Failed to setup srv windows!");
|
// Something went wrong
|
||||||
getch();
|
WARN("Error exiting ui thread! Code: %i", ui_thread_result);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return shutdown(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int shutdown(int code)
|
||||||
|
{
|
||||||
netex_shutdown();
|
netex_shutdown();
|
||||||
return 0;
|
return code;
|
||||||
}
|
}
|
6
src/server/server_state.c
Normal file
6
src/server/server_state.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "server_state.h"
|
||||||
|
|
||||||
|
static bool is_server_running;
|
||||||
|
static bool shutdown_requested;
|
7
src/server/server_state.h
Normal file
7
src/server/server_state.h
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef SERVER_STATE
|
||||||
|
#define SERVER_STATE
|
||||||
|
|
||||||
|
extern bool is_server_running;
|
||||||
|
extern bool shutdown_requested;
|
||||||
|
|
||||||
|
#endif // SERVER_STATE
|
|
@ -13,8 +13,6 @@ void calculate_window_sizes(void);
|
||||||
|
|
||||||
bool execute_ui(void)
|
bool execute_ui(void)
|
||||||
{
|
{
|
||||||
// setup_curses(resize_func, keypressed_func, onexit_func);
|
|
||||||
execute_ncurses();
|
|
||||||
calculate_window_sizes();
|
calculate_window_sizes();
|
||||||
if (!setup_info_window())
|
if (!setup_info_window())
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user