Эх сурвалжийг харах

Creation du main et gestion Ctrl+C

Arthur Brandao 6 жил өмнө
parent
commit
05db7cefbb

+ 13 - 0
Serveur/bomberstudent_server.log

@@ -0,0 +1,13 @@
+----- Log processus 4020 (timestamp : 1542876361) -----
+----- Fin log processus 4020 (temps en seconde : 3) -----
+----- Log processus 4039 (timestamp : 1542876381) -----
+----- Fin log processus 4039 (temps en seconde : 1) -----
+----- Log processus 4074 (timestamp : 1542876410) -----
+----- Fin log processus 4074 (temps en seconde : 1) -----
+----- Log processus 4127 (timestamp : 1542876501) -----
+----- Fin log processus 4127 (temps en seconde : 2) -----
+----- Log processus 4131 (timestamp : 1542876512) -----
+----- Fin log processus 4131 (temps en seconde : 0) -----
+----- Log processus 4152 (timestamp : 1542876516) -----
+----- Log processus 4231 (timestamp : 1542876605) -----
+----- Fin log processus 4231 (temps en seconde : 1) -----

+ 41 - 159
Serveur/main.c

@@ -1,188 +1,70 @@
+/* 
+ * File:   main.c
+ * Author: Arthur Brandao
+ *
+ * Created on 22 novembre 2018
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include "json.h"
-#include "arraylist.h"
-#include "server.h"
+#include <signal.h>
 #include "error.h"
 #include "bomberstudent_server.h"
-#include "client.h"
+#include "main.h"
 
 /* --- Extern --- */
 extern Error error;
 
-int parse(){
-    char str[200];
-    char* key = NULL;
-    char* val = NULL;
-    JsonParser json;
-    strcpy(str, "{\"name\" : \"Jack\", \"age\": 27, \"test\": true, \"tab\": [1, 2, 3, 4, 5], \"obj\": {\"name\" : \"Jack\", \"age\": 27}, \"nb\": 27.8 }");
-    //Parse
-    int a = json_parse(&json, str);
-    printf("Parse : %d\n", a);
-    //Affiche toutes les clefs : valeurs
-    for(int i = 0; i < json.elt; i++){
-        key = key_index(&json, i);
-        val = get_index(&json, i);
-        printf("%s : %s\n", key, val);
-    }
-    //Recup un nombre
-    printf("Double : %f %.2f | Int : %d %d\n", get_number(&json, "age"), get_number(&json, "nb"), get_integer(&json, "age"), get_integer(&json, "nb"));
-    //Recup boolean
-    printf("Bool : %d %d\n", get_boolean(&json, "test"), get_boolean(&json, "tab"));
-    //Recup obj
-    JsonParser* js;
-    js = get_object(&json, "obj");
-    if(js != NULL){
-        int key_i = get_pos(js, "name");
-        printf("JSON : %s %s, age %d\n", key_index(js, key_i), get_value(js, "name"), get_integer(js, "age"));
-    } else {
-        printf("JSON : Error");
-    }
-    //Supprime
-    free(key);
-    free(val);
-    clean_json_parser(&json);
-    return 0;
-}
-
-int encode(){
-    //Encode
-    JsonEncoder json;
-    ini_encoder(&json);
-    add_string(&json, "name", "robert");
-    add_number(&json, "nb", 25.698, 2);
-    add_integer(&json, "int", 846);
-    add_string(&json, "aze", "rty");
-    add_boolean(&json, "bool", false);
-    add_value(&json, "\"test\": \"aze\nrty\"");
-    printf("Json\n");
-    printf("%s\n", json_encode(&json));
-    
-    //Encode un JsonEncoder
-    JsonEncoder json2;
-    ini_encoder(&json2);
-    add_integer(&json2, "vie", 42);
-    add_object(&json2, "obj", json);
-    printf("\nJson 2\n");
-    printf("%s\n", json_encode(&json2));
-    
-    //Decode
-    JsonParser parser, *parser2;
-    char* key, *val;
-    json_parse(&parser, json_encode(&json2));
-    //Affiche toutes les clefs : valeurs
-    printf("\nParser\n");
-    for(int i = 0; i < parser.elt; i++){
-        key = key_index(&parser, i);
-        val = get_index(&parser, i);
-        printf("%s : %s\n", key, val);
-    }
-    //Lecture du sous json
-    parser2 = get_object(&parser, "obj");
-    //Affiche toutes les clefs : valeurs
-    printf("\nParser 2\n");
-    for(int i = 0; i < parser2->elt; i++){
-        key = key_index(parser2, i);
-        val = get_index(parser2, i);
-        printf("%s : %s\n", key, val);
-    }
-    
-    //Clean
-    clean_json_encoder(&json);
-    clean_json_encoder(&json2);
-    clean_json_parser(&parser);
-    
-    return 0;
-}
-
-int serv(){
-    char str[BUFFER_SIZE];
-    
-    Server s = server_create_tcp();
-    s->server_bind(s, 8080);
-    s->server_accept(s);
-    s->server_receive(s, str, BUFFER_SIZE);
-    printf("%s\n", str);
-    server_close_client(s);
-    server_close(s);
-    
-    s = server_create_udp();
-    s->server_bind(s, 8080);
-    s->server_receive(s, str, BUFFER_SIZE);
-    printf("%s\n", str);
-    server_close(s);
-    
-    return 0;
-}
-
-int serv_udp(){
-    char str[BUFFER_SIZE];
-    Server s = server_create_udp();
-    s->server_bind(s, 18624);
-    s->server_receive(s, str, BUFFER_SIZE);
-    s->server_send(s, "i'm a bomberstudent server");
-    printf("%s\n", str);
-    server_close(s);
-    
-    return 0;
-}
+/* --- Global --- */
+boolean stop = false;
 
-int serv_tcp(){
-    char str[BUFFER_SIZE]; 
-    Server s = server_create_tcp();
-    s->server_bind(s, 18642);
-    s->server_accept(s);
-    s->server_receive(s, str, BUFFER_SIZE);
-    printf("%s\n", str);
-    s->server_send(s, "Hello");
-    server_close_client(s);
-    server_close(s);
-    
-    return 0;
-}
+/* --- Fonctions privées --- */
 
-int handler(int cliId, JsonParser* jp){
-    printf("Handler : %d - %s\n", cliId, get_value(jp, "key"));
-    JsonEncoder je;
-    ini_encoder(&je);
-    add_integer(&je, "code", 200);
-    add_string(&je, "etat", "ok");
-    send_client(cliId, &je);
-    return 1;
+void handler(int sig){
+    //Si SIGINT
+    if(sig == SIGINT){
+        stop = true;
+        //Remet le handler
+        signal(SIGINT, handler);
+        //Avertit les clients
+        notify_close(END_USER);
+    }
 }
 
-void notify(){
-    Client* cli = get_client(0);
+/* --- Fonctions publiques --- */
+void notify_close(int code){
+    //Encode la reponse
     JsonEncoder je;
     ini_encoder(&je);
-    add_string(&je, "etat", "ok");
-    add_integer(&je, "value", 42);
-    notify_client(cli, "POST", "test", &je);
+    add_integer(&je, "status", code);
+    //Avertit tous les clients
+    notify_all("POST", "server/end", &je);
 }
 
 int main(){
-    //return parse();
-    //return encode();
-    //return serv();
-    //return serv_udp();
-    //return serv_tcp();
-    
-    //*
+    //Lancement gestion d'erreur
     error_finit("bomberstudent_server.log");
+    //Inialise le serveur
     ini_server();
-    add_handler("POST", "aze/rty", handler);
+    //Gestion des signaux
+    signal(SIGINT, handler);
+    //Ajout des handlers
+    /*add_handler("POST", "aze/rty", handler);*/
+    //Lance le serveur UDP
     if(!launch_udp_server(PORT_UDP)){
         error.print("Impossible de démarrer le serveur");
         error.exit_err();
     }
+    //Lance les seerveurs TCP
     if(!launch_tcp_server(PORT_TCP)){
         error.print("Impossible de démarrer le serveur");
         error.exit_err();
     }
-    sleep(10);
-    notify();
-    sleep(15);
-    error.exit();
-    //*/
+    //Attend la fin du programme
+    while(!stop){
+        pause();
+    } 
+    error.end();
+    return EXIT_SUCCESS;
 }

+ 23 - 0
Serveur/main.h

@@ -0,0 +1,23 @@
+/* 
+ * File:   main.h
+ * Author: Arthur Brandao
+ *
+ * Created on 22 novembre 2018
+ */
+
+#ifndef MAIN_H
+#define MAIN_H
+
+/* --- Include --- */
+#include "constante.h"
+
+/* --- Constantes --- */
+#define END_USER 0
+#define END_ERR 1
+
+/* --- Fonctions --- */
+void notify_close(int);
+
+
+#endif /* MAIN_H */
+

+ 2 - 2
Serveur/makefile

@@ -2,9 +2,9 @@
 # CONFIGURATION GENERALE
 #
 
-EXEC = main
+EXEC = main test
 OBJETS = str.o json_parser.o json_encoder.o error.o arraylist.o server_tcp.o server_udp.o bomberstudent_server.o client.o
-NOM_PROJET = Porjet Reseau
+NOM_PROJET = Projet Reseau
 
 #
 # SUFFIXES

BIN
Serveur/test