/* * File: bomberstudent_server.c * Author: Arthur Brandao * * Created on 14 novembre 2018 */ #include #include #include #include "arraylist.h" #include "bomberstudent_server.h" #include "error.h" /* --- Globale --- */ arraylist get; arraylist post; /* --- Fonctions privées --- */ void* udp_thread(void* data){ Server s; char buffer[BUFFER_SIZE]; //Cast data en serveur s = (Server) data; //Detache le thread if(pthread_detach(pthread_self()) != 0){ return NULL; } //Boucle attente while(true){ //Attente connexion if(s->server_receive(s, buffer, BUFFER_SIZE) == ERR){ addserror("Impossible de recevoir le demande de recherche"); continue; } //Si la phrase est correcte if(strncmp(buffer, SEARCH_SERV, strlen(buffer)) == 0){ if(!s->server_send(s, "i'm a bomberstudent server")){ addserror("Impossible de repondre à la recherche"); } } } return NULL; } /* --- Fonctions publiques --- */ void ini_server(){ arraylist_ini(&get); arraylist_ini(&post); } void add_handler(char* method, char* ressource, int(*handler)(Server, JsonParser*)){ if(strncmp(method, "POST", 5) == 0){ arraylist_add(&post, ressource, handler); } else if(strncmp(method, "POST", 5) == 0){ arraylist_add(&get, ressource, handler); } } 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){ return false; } //Lancement thread serveur udp if(pthread_create(&udp, NULL, udp_thread, s) != 0){ adderror("Impossible de créer le thread UDP"); server_close(s); return false; } return true; } boolean launch_tcp_server(int); boolean receive_client(Server); boolean send_client(Server, JsonEncoder*); boolean notify_client(Server, char*, char*, JsonEncoder*);