implemented exit from client

This commit is contained in:
Timerix 2025-07-23 00:26:02 +03:00
parent 7cd7535eb0
commit e0646139e3

View File

@ -43,7 +43,7 @@ Result(void) test_aes(){
static pthread_mutex_t stdout_mutex = {0}; static pthread_mutex_t stdout_mutex = {0};
// thread-safe print /// thread-safe print
#define printf_safe(ARGS...) {\ #define printf_safe(ARGS...) {\
pthread_mutex_lock(&stdout_mutex);\ pthread_mutex_lock(&stdout_mutex);\
printf(ARGS);\ printf(ARGS);\
@ -51,6 +51,28 @@ static pthread_mutex_t stdout_mutex = {0};
pthread_mutex_unlock(&stdout_mutex);\ pthread_mutex_unlock(&stdout_mutex);\
} }
/// removes blank characters from line end
void line_trim(str* line, bool set_zero_at_end){
bool stop = false;
while(line->size > 0 && !stop)
{
char last_char = line->data[line->size - 1];
switch(last_char){
case '\0': case '\r': case '\n':
case '\t': case ' ':
line->size--;
break;
default:
stop = true;
break;
}
}
if(set_zero_at_end){
line->data[line->size] = '\0';
line->isZeroTerminated = true;
}
}
void* test_server(void* data){ void* test_server(void* data){
printf_safe("[server]: opening main socket\n"); printf_safe("[server]: opening main socket\n");
try_fatal(main_socket, socket_open_TCP(), ); try_fatal(main_socket, socket_open_TCP(), );
@ -66,29 +88,17 @@ void* test_server(void* data){
while(true){ while(true){
try_fatal(read_n, try_fatal(read_n,
socket_recv(client_conn.i, buf), socket_recv(client_conn.i, buf),
socket_close(client_conn.i)); {
socket_close(client_conn.i);
socket_close(main_socket.i);
});
if(read_n.i == 0){ if(read_n.i == 0){
sleepMsec(20); sleepMsec(20);
continue; continue;
} }
char* data_s = (char*)buf.data; str message = str_construct(buf.data, read_n.u, false);
char last_char; line_trim(&message, true);
bool stop = false; printf_safe("[server]: received '%s'\n", message.data);
while(read_n.i > 0 && !stop)
{
last_char = data_s[read_n.i - 1];
switch(last_char){
case '\0': case '\r': case '\n':
case '\t': case ' ':
read_n.i--;
break;
default:
stop = true;
break;
}
}
data_s[read_n.i] = '\0';
printf_safe("[server]: got '%s'\n", data_s);
} }
socket_close(client_conn.i); socket_close(client_conn.i);
printf_safe("[server]: client socket closed\n"); printf_safe("[server]: client socket closed\n");
@ -106,15 +116,19 @@ void* test_client(void* data){
socket_connect(client_socket.i, server_end), socket_connect(client_socket.i, server_end),
socket_close(client_socket.i)); socket_close(client_socket.i));
Array buf = Array_alloc(u8, 1024); Array buf = Array_alloc(u8, 1024);
i32 read_n;
printf_safe("[client]: reading stdin\n"); printf_safe("[client]: reading stdin\n");
while(fgets(buf.data, buf.size, stdin) != NULL){ while(fgets(buf.data, buf.size, stdin) != NULL){
read_n = strlen(buf.data) + 1; str line = str_construct(buf.data, strlen(buf.data), true);
line_trim(&line, true);
if(str_equals(line, STR("/q"))){
printf_safe("[client]: quit\n");
break;
}
try_fatal(_50, try_fatal(_50,
socket_send(client_socket.i, Array_construct_size(buf.data, read_n)), socket_send(client_socket.i, str_castTo_Array(line)),
socket_close(client_socket.i)); socket_close(client_socket.i));
} }
printf_safe("[client]: stdin end\n"); printf_safe("[client]: closing connection\n");
socket_close(client_socket.i); socket_close(client_socket.i);
return NULL; return NULL;
} }