Refactor server (and client), fix typo
authorLukas Jiriste <ljiriste@student.42prague.com>
Tue, 23 Jan 2024 12:28:30 +0000 (13:28 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Tue, 23 Jan 2024 12:28:30 +0000 (13:28 +0100)
Makefile
src/client.c
src/server.c
src/server.h [new file with mode: 0644]
src/server_aux.c [new file with mode: 0644]

index e71a430e28c1492f27c5f307c47b601be3b98635..22c77b6d79664e33edfeb742bcc0d8be51479615 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,7 @@ CLISOURCES := $(addprefix $(SRCDIR)/, $(CLISOURCES))
 CLIOBJECTS := $(CLISOURCES:.c=.o)
 
 SERVSOURCES := server.c                        \
+                               server_aux.c            \
 
 SERVSOURCES := $(addprefix $(SRCDIR)/, $(SERVSOURCES))
 
index e6c4f37a0133c3311b8cedc981effabf92a0a20d..b03a3b72ad56f5e3be81adb31bd66d722247379a 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/01/20 17:15:06 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/01/23 12:29:57 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/01/23 13:27:45 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -24,19 +24,6 @@ void handler(int signum)
        return ;
 }
 
-void   send_bit(pid_t server_pid, int bit)
-{
-       if (bit)
-       {
-               kill(server_pid, SIGUSR1);
-       }
-       else
-       {
-               kill(server_pid, SIGUSR2);
-       }
-       return ;
-}
-
 void   send_message(pid_t server_pid, const char *message)
 {
        int             char_bits_sent;
@@ -49,11 +36,14 @@ void        send_message(pid_t server_pid, const char *message)
        while (char_ind <= message_length)
        {
                if (!g_may_send)
-               pause();
+                       pause();
                else
                {
                        g_may_send = 0;
-                       send_bit(server_pid, message[char_ind] & 1 << char_bits_sent);
+                       if (message[char_ind] & 1 << char_bits_sent)
+                               kill(server_pid, SIGUSR1);
+                       else
+                               kill(server_pid, SIGUSR2);
                        ++char_bits_sent;
                        if (char_bits_sent == CHAR_BIT)
                                ++char_ind;
@@ -72,7 +62,10 @@ void send_pid(pid_t server_pid)
        my_pid = getpid();
        while (bits_sent < sizeof(pid_t) * CHAR_BIT)
        {
-               send_bit(server_pid, my_pid & 1 << bits_sent);
+               if (my_pid & 1 << bits_sent)
+                       kill(server_pid, SIGUSR1);
+               else
+                       kill(server_pid, SIGUSR2);
                ++bits_sent;
                usleep(100);
        }
@@ -100,8 +93,8 @@ int  main(int argc, char **argv)
        setup_handler();
        if (argc != 3)
        {
-               ft_printf("Invalid number of args. Th call should look like:\n"
-                               "client SERVER_PID MESSAGE\n");
+               ft_printf("Invalid number of args. The call should look like this:\n"
+                       "client SERVER_PID MESSAGE\n");
                return (0);
        }
        server_pid = ft_atoi(argv[1]);
index 16615333087a215919238c14589f553780c1a2fd..898d46a9d5de7980e9d101ce4699441151a7346f 100644 (file)
@@ -6,34 +6,29 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/01/20 15:12:04 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/01/23 12:36:00 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/01/23 13:26:46 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
+#include "server.h"
 #include "libft.h"
 #include <limits.h>
 #include <unistd.h>
 #include <signal.h>
 
-typedef struct s_transfer
-{
-       int             bit;
-       int             transfer_done;
-}              t_transfer;
-
-t_transfer     g_transfer;
+static t_transfer      g_trans;
 
-void   bit_reciever(int signum)
+static void    bit_reciever(int signum)
 {
        if (signum == SIGUSR1)
-               g_transfer.bit = 1;
+               g_trans.bit = 1;
        else
-               g_transfer.bit = 0;
-       g_transfer.transfer_done = 1;
+               g_trans.bit = 0;
+       g_trans.transfer_done = 1;
        return ;
 }
 
-void   setup_handler(void)
+static void    setup_handler(void)
 {
        struct sigaction        sa;
 
@@ -47,22 +42,21 @@ void        setup_handler(void)
        return ;
 }
 
-void   init_transfer(t_transfer *t)
-{
-       t->transfer_done = 0;
-       return ;
-}
-
-void   general_setup(t_transfer *t)
+static void    general_setup(t_vec *string, pid_t *c_pid,
+               int *c_pid_known, char *ch)
 {
-       init_transfer(t);
        setup_handler();
        ft_printf("Hello, I'm a minitalk server.\n"
-                       "You can contact me through my PID: %i.\n"
-                       "For legibility I'll leave one empty line "
-                       "after this initial message.\n"
-                       "I'll also append newline to every message recieved.\n"
-                       "I'm starting to print the messages now:\n\n", getpid());
+               "You can contact me through my PID: %i.\n"
+               "For legibility I'll leave one empty line "
+               "after this initial message.\n"
+               "I'll also append empty line to every message recieved.\n"
+               "I'm starting to print the messages now:\n\n", getpid());
+       *c_pid = 0;
+       *c_pid_known = 0;
+       *ch = 0;
+       g_trans.transfer_done = 0;
+       ft_vec_init(string, sizeof(char));
        return ;
 }
 
@@ -70,54 +64,25 @@ int main(void)
 {
        pid_t   c_pid;
        int             c_pid_known;
-       int             bits_recieved;
        char    ch;
        t_vec   string;
 
-       bits_recieved = 0;
-       c_pid = 0;
-       c_pid_known = 0;
-       ch = 0;
-       general_setup(&g_transfer);
-       ft_vec_init(&string, sizeof(char));
+       general_setup(&string, &c_pid, &c_pid_known, &ch);
        while (1)
        {
                if (c_pid_known)
                        kill(c_pid, SIGUSR1);
-               if (!g_transfer.transfer_done)
+               if (!g_trans.transfer_done)
                        pause();
-               if (g_transfer.transfer_done && !c_pid_known)
-               {
-                       c_pid |= g_transfer.bit << bits_recieved;
-                       g_transfer.transfer_done = 0;
-                       ++bits_recieved;
-                       if (bits_recieved == sizeof(pid_t) * CHAR_BIT)
-                       {
-                               bits_recieved = 0;
-                               c_pid_known = 1;
-                       }
-               }
-               else if (g_transfer.transfer_done)
+               if (g_trans.transfer_done && !c_pid_known)
+                       c_pid_known = pid_constructor(&c_pid, &g_trans);
+               else if (g_trans.transfer_done && char_constructor(&ch, &g_trans))
                {
-                       ch |= g_transfer.bit << bits_recieved;
-                       g_transfer.transfer_done = 0;
-                       ++bits_recieved;
-                       if (bits_recieved == CHAR_BIT && ch != 0)
-                       {
-                               ft_vec_append(&string, &ch);
-                       }
-                       else if (bits_recieved == CHAR_BIT && ch == 0)
-                       {
-                               ft_printf("From process %i: %s\n", c_pid, string.vec);
-                               ft_vec_forget_range(&string, string.size, 0);
-                               c_pid_known = 0;
-                               c_pid = 0;
-                       }
-                       bits_recieved %= CHAR_BIT;
-                       if (bits_recieved == 0)
-                               ch = 0;
+                       ft_vec_append(&string, &ch);
+                       if (ch == 0)
+                               end_connection(&string, &c_pid, &c_pid_known);
+                       ch = 0;
                }
        }
-       ft_vec_free(&string, NULL);
        return (0);
 }
diff --git a/src/server.h b/src/server.h
new file mode 100644 (file)
index 0000000..f4b6b04
--- /dev/null
@@ -0,0 +1,29 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   server.h                                           :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/01/23 13:12:14 by ljiriste          #+#    #+#             */
+/*   Updated: 2024/01/23 13:26:14 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#ifndef SERVER_H
+# define SERVER_H
+
+# include "libft.h"
+# include <signal.h>
+
+typedef struct s_transfer
+{
+       int             bit;
+       int             transfer_done;
+}              t_transfer;
+
+int            pid_constructor(pid_t *c_pid, t_transfer *t);
+int            char_constructor(char *c, t_transfer *t);
+void   end_connection(t_vec *string, pid_t *c_pid, int *c_pid_known);
+
+#endif //SERVER_H
diff --git a/src/server_aux.c b/src/server_aux.c
new file mode 100644 (file)
index 0000000..22ae20b
--- /dev/null
@@ -0,0 +1,55 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   server_aux.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/01/23 13:10:43 by ljiriste          #+#    #+#             */
+/*   Updated: 2024/01/23 13:25:43 by ljiriste         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "server.h"
+#include "libft.h"
+#include <limits.h>
+#include <signal.h>
+
+int    pid_constructor(pid_t *c_pid, t_transfer *t)
+{
+       static int      bits_recieved = 0;
+
+       *c_pid |= t->bit << bits_recieved;
+       t->transfer_done = 0;
+       ++bits_recieved;
+       if (bits_recieved == sizeof(pid_t) * CHAR_BIT)
+       {
+               bits_recieved = 0;
+               return (1);
+       }
+       return (0);
+}
+
+int    char_constructor(char *c, t_transfer *t)
+{
+       static int      bits_recieved = 0;
+
+       *c |= t->bit << bits_recieved;
+       t->transfer_done = 0;
+       ++bits_recieved;
+       if (bits_recieved == CHAR_BIT)
+       {
+               bits_recieved = 0;
+               return (1);
+       }
+       return (0);
+}
+
+void   end_connection(t_vec *string, pid_t *c_pid, int *c_pid_known)
+{
+       ft_printf("%s\n\n", string->vec);
+       ft_vec_forget_range(string, string->size, 0);
+       *c_pid_known = 0;
+       *c_pid = 0;
+       return ;
+}