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};
// thread-safe print
/// thread-safe print
#define printf_safe(ARGS...) {\
pthread_mutex_lock(&stdout_mutex);\
printf(ARGS);\
@ -51,6 +51,28 @@ static pthread_mutex_t stdout_mutex = {0};
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){
printf_safe("[server]: opening main socket\n");
try_fatal(main_socket, socket_open_TCP(), );
@ -66,29 +88,17 @@ void* test_server(void* data){
while(true){
try_fatal(read_n,
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){
sleepMsec(20);
continue;
}
char* data_s = (char*)buf.data;
char last_char;
bool stop = false;
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);
str message = str_construct(buf.data, read_n.u, false);
line_trim(&message, true);
printf_safe("[server]: received '%s'\n", message.data);
}
socket_close(client_conn.i);
printf_safe("[server]: client socket closed\n");
@ -106,15 +116,19 @@ void* test_client(void* data){
socket_connect(client_socket.i, server_end),
socket_close(client_socket.i));
Array buf = Array_alloc(u8, 1024);
i32 read_n;
printf_safe("[client]: reading stdin\n");
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,
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));
}
printf_safe("[client]: stdin end\n");
printf_safe("[client]: closing connection\n");
socket_close(client_socket.i);
return NULL;
}