diff --git a/builds/client.o b/builds/client.o index 58a2b53..c04b4b1 100644 Binary files a/builds/client.o and b/builds/client.o differ diff --git a/builds/server.o b/builds/server.o index 5316af3..ab4570f 100644 Binary files a/builds/server.o and b/builds/server.o differ diff --git a/client b/client index acb8105..53afcb2 100755 Binary files a/client and b/client differ diff --git a/includes/client.h b/includes/client.h index baeab8d..8e64d16 100644 --- a/includes/client.h +++ b/includes/client.h @@ -6,7 +6,15 @@ # include // for getpid # include "libft.h" -int msg_received; +typedef struct s_client +{ + int mask; + int count_char; + int server_pid; + char *text; +} t_client; + +t_client client; #endif diff --git a/server b/server index b7577da..27056d6 100755 Binary files a/server and b/server differ diff --git a/srcs/client.c b/srcs/client.c index bdb3244..767461a 100644 --- a/srcs/client.c +++ b/srcs/client.c @@ -6,48 +6,77 @@ int usage(void) return (0); } -void send_char(int server_pid, char c) -{ - int mask; +// 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)); +// } - 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_char(char c, int mask, int server_pid) +{ + if ((c & mask) != 0) + kill(server_pid, SIGUSR1); + if ((c & mask) == 0) + kill(server_pid, SIGUSR2); } -void send_message(int server_pid, char *msg) -{ - while (*msg) - { - send_char(server_pid, *msg); - msg++; - } - send_char(server_pid, *msg); -} - -void message_received(int sig_num) +void send_message(int sig_num) { (void)sig_num; - msg_received = 1; + if (client.text[client.count_char] != '\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); + } + 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); +} + +void init_client(int pid, char *msg) +{ + client.mask = 0; + client.count_char = 1 << 7; + client.server_pid = pid; + client.text = msg; } int main(int ac, char **av) { - signal(SIGUSR1, message_received); + signal(SIGUSR1, send_message); if (ac != 3) return (usage()); - msg_received = 1; - ft_putnbrendl((int)getpid()); - send_message(ft_atoi(av[1]), av[2]); + init_client(ft_atoi(av[1]), av[2]); + kill((int)getpid(), SIGUSR1); return (0); } diff --git a/srcs/server.c b/srcs/server.c index 89d633d..c088d80 100644 --- a/srcs/server.c +++ b/srcs/server.c @@ -4,17 +4,21 @@ void sig_handler_1(int sig_num, siginfo_t *info, void *context) { (void)sig_num; (void)context; - kill(info->si_pid, SIGUSR1); message.character ^= 1 << (6 - message.count_bits); message.count_bits++; + 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) { (void)sig_num; (void)context; - kill(info->si_pid, SIGUSR1); message.count_bits++; + 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) @@ -41,13 +45,16 @@ void concat_msg() { if (message.count_bits == 7) { - 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))); + + 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; }