Explorar el Código

:construction: Debut serveurs TCP

Arthur Brandao hace 6 años
padre
commit
1085aa11c9
Se han modificado 2 ficheros con 82 adiciones y 6 borrados
  1. 68 4
      Serveur/bomberstudent_server.c
  2. 14 2
      Serveur/main.c

+ 68 - 4
Serveur/bomberstudent_server.c

@@ -43,6 +43,38 @@ void* udp_thread(void* data){
     return NULL;
 }
 
+//Thread initialisation de la communication principale entre client et serveur
+//Connexion utilisé pour traiter les requetes emise par le client
+void* tcp_cli_thread(void* data){
+    Server s;
+    //Cast data en serveur
+    s = (Server) data;
+    //Detache le thread
+    if(pthread_detach(pthread_self()) != 0){
+        return NULL;
+    }
+    //Boucle attente
+    while(true){
+        
+    }
+    return NULL;
+}
+
+//Thread initialisation de la communication utilisé par le serveur pour notifier les clients
+void* tcp_serv_thread(void* data){
+    Server s;
+    //Cast data en serveur
+    s = (Server) data;
+    //Detache le thread
+    if(pthread_detach(pthread_self()) != 0){
+        return NULL;
+    }
+    //Boucle attente
+    while(true){
+        
+    }
+    return NULL;
+}
 
 /* --- Fonctions publiques --- */
 void ini_server(){
@@ -60,12 +92,15 @@ void add_handler(char* method, char* ressource, int(*handler)(Server, JsonParser
 
 boolean launch_udp_server(int port){
     Server s;
-    boolean res;
     pthread_t udp;
     //Creation serveur
     s = server_create_udp();
-    res = s->server_bind(s, port);
-    if(!res){
+    if(s == NULL){
+        addserror("Impossible de créer le serveur UDP");
+        return false;
+    }
+    if(!s->server_bind(s, port)){
+        addserror("Impossible de bind le serveur UDP");
         return false;
     }
     //Lancement thread serveur udp
@@ -77,7 +112,36 @@ boolean launch_udp_server(int port){
     return true;
 }
 
-boolean launch_tcp_server(int);
+boolean launch_tcp_server(int port){
+    Server s[2];
+    pthread_t tcp;
+    //Creation serveur
+    s[0] = server_create_tcp();
+    s[1] = server_create_tcp();
+    if(s[0] == NULL || s[1] == NULL){
+        addserror("Impossible de créer les serveurs TCP");
+        return false;
+    }
+    if(!( s[0]->server_bind(s[0], port) && s[1]->server_bind(s[1], port + 1) )){
+        addserror("Impossible de bind les serveurs TCP");
+        return false;
+    }
+    //Lancement Thread attente connexion TCP 
+    if(pthread_create(&tcp, NULL, tcp_cli_thread, s[0]) != 0){
+        adderror("Impossible de créer le thread TCP Client");
+        server_close(s[0]);
+        server_close(s[1]);
+        return false;
+    }
+    if(pthread_create(&tcp, NULL, tcp_serv_thread, s[1]) != 0){
+        adderror("Impossible de créer le thread TCP Serveur");
+        server_close(s[0]);
+        server_close(s[1]);
+        return false;
+    }
+    return true;
+}
+
 boolean receive_client(Server);
 boolean send_client(Server, JsonEncoder*);
 boolean notify_client(Server, char*, char*, JsonEncoder*);

+ 14 - 2
Serveur/main.c

@@ -7,6 +7,9 @@
 #include "error.h"
 #include "bomberstudent_server.h"
 
+/* --- Extern --- */
+extern Error error;
+
 int parse(){
     char str[200];
     char* key = NULL;
@@ -169,7 +172,16 @@ int main(){
     //return serv_udp();
     //return serv_tcp();
     
+    error_finit("bomberstudent_server.log");
     ini_server();
-    launch_udp_server(PORT_UDP);
-    pause();
+    if(!launch_udp_server(PORT_UDP)){
+        error.print("Impossible de démarrer le serveur");
+        error.exit_err();
+    }
+    if(!launch_tcp_server(PORT_TCP)){
+        error.print("Impossible de démarrer le serveur");
+        error.exit_err();
+    }
+    sleep(30);
+    error.exit();
 }