implemented exit from client
This commit is contained in:
parent
7cd7535eb0
commit
e0646139e3
62
src/main.c
62
src/main.c
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user