diff --git a/builds/client.o b/builds/client.o index c04b4b1..c0a3059 100644 Binary files a/builds/client.o and b/builds/client.o differ diff --git a/builds/server.o b/builds/server.o index ab4570f..15218d6 100644 Binary files a/builds/server.o and b/builds/server.o differ diff --git a/client b/client index 53afcb2..09cf9db 100755 Binary files a/client and b/client differ diff --git a/includes/client.h b/includes/client.h index 8e64d16..2d38dcd 100644 --- a/includes/client.h +++ b/includes/client.h @@ -10,8 +10,9 @@ typedef struct s_client { int mask; int count_char; - int server_pid; + int srv_pid; char *text; + int done; } t_client; t_client client; diff --git a/server b/server index 27056d6..3bafd18 100755 Binary files a/server and b/server differ diff --git a/srcs/client.c b/srcs/client.c index 767461a..d80caf8 100644 --- a/srcs/client.c +++ b/srcs/client.c @@ -6,36 +6,6 @@ int usage(void) return (0); } -// void send_char(int server_pid, char c) -// { -// int mask; -// -// mask = 1 << 6; -// while (mask != 0) -// { -// if (msg_received == 1) -// { -// if ((c & mask) != 0) -// kill(server_pid, SIGUSR1); -// if ((c & mask) == 0) -// kill(server_pid, SIGUSR2); -// msg_received = 0; -// mask >>= 1; -// } -// } -// } -// -// void send_message(int sig_num) -// { -// (void)sig_num; -// while (*(client.text)) -// { -// send_char(client.server_pid, *(client.text)); -// (client.text)++; -// } -// send_char(client.server_pid, *(client.text)); -// } - void send_char(char c, int mask, int server_pid) { if ((c & mask) != 0) @@ -47,28 +17,26 @@ void send_char(char c, int mask, int server_pid) void send_message(int sig_num) { (void)sig_num; - if (client.text[client.count_char] != '\0') + client.mask >>= 1; + if (client.mask == 0) { - if (client.mask == 0) - { - client.mask = 1 << 6; - (client.count_char)++; - } - else - client.mask >>= 1; - send_char(client.text[client.count_char], client.mask, client.server_pid); + client.mask = 1 << 6; + if (client.text[client.count_char] == '\0') + client.done = 1; + (client.count_char)++; } - send_char(client.text[client.count_char], client.mask, client.server_pid); - - ft_putnbrbase(client.mask, "01"); ft_printf(" (%i) - [%i] %s\n", client.mask, client.count_char, client.text + client.count_char); + if (client.done == 0) + send_char(client.text[client.count_char], client.mask, client.srv_pid); + ft_putnbrbase(client.text[client.count_char], "01"); ft_printf(" - %i - [%i] %s\n", (client.text[client.count_char] & client.mask) != 0, client.count_char, client.text + client.count_char); } void init_client(int pid, char *msg) { - client.mask = 0; - client.count_char = 1 << 7; - client.server_pid = pid; + client.mask = 1 << 7; + client.count_char = 0; + client.srv_pid = pid; client.text = msg; + client.done = 0; } int main(int ac, char **av) @@ -78,5 +46,6 @@ int main(int ac, char **av) return (usage()); init_client(ft_atoi(av[1]), av[2]); kill((int)getpid(), SIGUSR1); + while (client.done == 0); return (0); } diff --git a/srcs/server.c b/srcs/server.c index c088d80..cfc1d73 100644 --- a/srcs/server.c +++ b/srcs/server.c @@ -1,14 +1,25 @@ #include "server.h" +void send_char(void) +{ + if (message.count_bits == 7) + { + ft_putchar(message.character); + if (message.character == '\0') + exit(EXIT_SUCCESS); + message.count_bits = 0; + message.character = 0; + } +} + void sig_handler_1(int sig_num, siginfo_t *info, void *context) { (void)sig_num; (void)context; message.character ^= 1 << (6 - message.count_bits); message.count_bits++; + send_char(); kill(info->si_pid, SIGUSR1); -// if (kill(info->si_pid, SIGUSR1) == 0) -// ft_putstr("client->server signal 1 received, server->client signal 1 sent"); } void sig_handler_2(int sig_num, siginfo_t *info, void *context) @@ -16,22 +27,8 @@ void sig_handler_2(int sig_num, siginfo_t *info, void *context) (void)sig_num; (void)context; message.count_bits++; + send_char(); kill(info->si_pid, SIGUSR1); -// if (kill(info->si_pid, SIGUSR1) == 0) -// ft_putstr("client->server signal 2 received, server->client signal 1 sent"); -} - -void handler_1(int sig_num) -{ - (void)sig_num; - message.character ^= 1 << (6 - message.count_bits); - message.count_bits++; -} - -void handler_2(int sig_num) -{ - (void)sig_num; - message.count_bits++; } void init_message(void) @@ -41,25 +38,6 @@ void init_message(void) message.text = ft_strdup(""); } -void concat_msg() -{ - if (message.count_bits == 7) - { - - ft_putchar(message.character); - - // if (message.character == 0) - // { - // ft_printf("%s\n", message.text); - // message.text = ft_strdup(""); - // } - // else - // message.text = ft_strjoinfree(message.text, ft_strdup(&(message.character))); - message.count_bits = 0; - message.character = 0; - } -} - int main() { struct sigaction act_1; @@ -71,14 +49,9 @@ int main() act_2.sa_sigaction = sig_handler_2; sigaction(SIGUSR1, &act_1, NULL); sigaction(SIGUSR2, &act_2, NULL); - -// signal(SIGUSR1, handler_1); -// signal(SIGUSR2, handler_2); - ft_putnbrendl((int)getpid()); init_message(); - while (1) - concat_msg(); + while (1); return (0); }