// communCOL3.h // dim. mars 24 06:35:44 2019 // Copyright 2019 pernelle // /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * lib.h * Copyright (C) 2019 Pernelle * * col3 is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * col3 is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ /************************* Clash of L3 - 2018 (ne pas modifier) **************************/ #ifndef COMMUNCOL3_H_INCLUDED #define COMMUNCOL3_H_INCLUDED #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define TAILLE_MAX 4196 #define MAX_CLAN 10 #define MAX_SITE_EXTRACTION 25 #define MAX_CAMP 45 #define MAX_CHARIOT 10 #define MAX_CHARIOT_PAR_CLAN 5 #define TAILLE_MAX_NOM_CLAN 20 #define TAILLE_MAX_NOM_SITE 20 #define TAILLE_MAX_MSG 512 #define TAILLE_MAX_ARMEE 15 #define MAX_FORGE_BLE 3 #define MAX_FORGE_BLO 2 #define TPS_FAB_BLO 5 #define TPS_FAB_BLE 2 #define PVIE_CLAN 100 #include extern const char MSG_HUTTE[]; /* code pour un message de type HUTTE */ extern const char MSG_SITE[]; /* code pour un message de type SITE EXTRACTION */ extern const char MSG_CLAN[]; extern const char MSG_NOMCLAN[]; extern const char MSG_STOP[]; extern const char MSG_LONGITUDE[]; extern const char MSG_LATITUDE[]; extern const char MSG_DUREE[]; extern const char MSG_QUANTITE[]; extern const char MSG_MATIERE[]; extern const char MSG_DELIMINTER[]; extern const char MSG_DELIMINTERARMEE[]; extern const char MSG_DELIMINTERSITE[]; extern const char MSG_QUEST[]; extern const char MSG_TEST[]; /* code pour tester la communication avec le serveur */ extern const char MSG_TOKEN_OK[]; //2019 extern const char MSG_TOKEN_NOK[]; //2019 extern const char MSG_NOMCLAN_OK[]; //2019 extern const char MSG_NOMSITE[]; //2019 extern const char MSG_CHARIOT[]; extern const char MSG_CAMP[]; extern const char MSG_CHARIOT_OK[]; extern const char MSG_CHARIOT_NOK[]; extern const char MSG_GTK_MONDE_OK[]; /* code de validation MONDE recu par client GTK */ extern const char MSG_GTK_BATAILLE_OK[]; /* code de validation BATAILLE recue par client GTK */ extern const char MSG_FICHIER_ARMEE[]; extern const char MSG_FICHIER_ARMEE_BALISTE[]; extern const char MSG_STATUT_ARMEE[]; extern const char MSG_STATUT_ARMEE_ENFAB[]; extern const char MSG_STATUT_ARMEE_PRET[]; extern int NCURSE ; extern const int DEGAT_BALISTE[2]; /* degat des balistes BLE et BLO */ extern const int PRECISION_BALISTE[2]; /* précision de tir des balistes BLE et BLO */ extern const int PVIE_BALISTE[2]; /* point de vie des balistes BLE et BLO */ extern const int MATERIAUX_BALISTE[2][6]; /* matériaux pour la construction des balistes BLE et BLO */ extern const int POSITION_EXTRACTION[2][MAX_SITE_EXTRACTION]; /* position des sites d'extraction */ extern const int POSITION_CAMP[2][MAX_CAMP]; /* position des camps */ /* type de demande envoyé entre client et serveur */ typedef enum {nom=0, statutarmee=1, fichierarmee=2, chariot=3, sites=4 , mondev=5, bataillev=6} type_demande; /* type de matiere premiere */ typedef enum {bois=0, salpetre=1, charbon=2, soufre=3, fer=4, chanvre=5} matieres_premieres; /* type de chariot et capacite */ typedef enum {lourd=12, leger=5} type_chariot; /* type de balise (BLO= Baliste LOurde, BLE=Baliste LEgere) */ typedef enum {BLO=1,BLE=0} type_baliste; /* type tp */ typedef enum {tp1,tp2,tp3} type_serveurCOL3; /* type de question pour un tp */ typedef enum {q1,q2,q3} type_questionCOL3; /* structure d'une armmée composé de baliste */ typedef struct { int forge[TAILLE_MAX_ARMEE]; /* num forge ou est produite la baliste*/ type_baliste baliste[TAILLE_MAX_ARMEE]; /* type de baliste */ int pvie[TAILLE_MAX_ARMEE]; /* point de vie de la baliste */ int nbbaliste; /* nb de baliste produite */ } armee; /* structure préparatoire d'une attaque (recu par chaque clan avant attaque) a recevoir par le serveur */ typedef struct { int dispoBaliste[2]; /* nb de baliste disponible BLO et BLE pour l'attaque */ type_baliste balisterestante[TAILLE_MAX_ARMEE]; /* type de chaque baliste restante pour l'attaque */ int pvieBaliste[TAILLE_MAX_ARMEE]; /* point de vie de chaque baliste restante pour l'attaque */ int nbcl; /* nb clan restant */ int pvieClan; /* point de vie du clan */ char listeClan[MAX_CLAN][TAILLE_MAX_NOM_CLAN] ; /* liste des nom de clan srestant */ } preAttaque; /* structure d'une attaque : nb baliste et id clan attaqué (-1 pour utiliser toutes les balistes en défense ) à envoyer au serveur */ typedef struct { int balisteAttaque[2]; /* nb de baliste attaquantes par type (BLO et BLE) */ int idClan; /* identifiant du clan attaqué */ } attaque; /* définition d'un site extraction */ typedef struct { char nomSite[TAILLE_MAX_NOM_SITE]; int idSite; int longitude; int latitude; int quantite; matieres_premieres matiere; int duree; } site_extraction; /* liste des sites d'extractions du monde CoL3 */ typedef site_extraction lessitesdumonde[MAX_SITE_EXTRACTION]; /* structure indiquant la capacité d'extraction d'un clan */ typedef struct { int idClan; char nomClan[TAILLE_MAX_NOM_CLAN]; lessitesdumonde sitesAccessibles; int nbChariotDisponible; } capacite_clan; /* définition d'un camp */ typedef struct { int idCamp; /* identifiant du camp */ int longitude; /* position sur la carte */ int latitude; /* position sur la carte */ capacite_clan capaciteEnCours; /* capacité d'extraction du clan qui a prit ce camp */ } camp; /* définition de la liste des camps du monde CoL3 */ typedef camp lescampsdumonde[MAX_CAMP]; /* structure d'une hutte de stockage */ typedef struct { char nomClanHutte[TAILLE_MAX_NOM_CLAN]; /* nom du clan */ int stock[6]; /* quantité par matiere */ time_t tps_debut; /* date premier remplissage */ time_t tps_fin; /* date fin remplissage */ } hutte; typedef enum {sarmee, stourAttaque, spreAttaque} type_structure; /* ------------------------------------------------ structure des VUES ------------------------------------------------*/ /* Cette structure décrit la vue d'un CLAN */ typedef struct { int idClan; int longitude; int latitude; int pVie; char nom[TAILLE_MAX_NOM_CLAN]; } clanVue; /* Cette structure décrit la vue du MONDE */ typedef struct { int portServ; char addrServ[20]; clanVue clans[MAX_CLAN]; int nbclan; } mondeVue; /* cette structure décrit la vue d'une BATAILLE-*/ typedef struct { int debutCombat; int finCombat; int numTour; int nbClanEnBataille; attaque lesAttaques[MAX_CLAN]; int pvieClan[MAX_CLAN]; char nomClan[MAX_CLAN][TAILLE_MAX_NOM_CLAN]; armee lesarmees[MAX_CLAN]; } batailleVue; /* ------------------------------------------------ fonctions de connexion et d'echange de message avec le serveur CoL3 ------------------------------------------------*/ /** cette fonction crée une socket et tente une connexion TCP à un serveur COL3. si la connexion TCP est validée, la fonction echange avec le serveur pour valider le tocken du client entrées : - adresse IP du serveur à connecter - port du serveur à connecter - token id client retour: - valeur de la socket créé (meme code que socket()) p.pernelle / d.wayntal - 2019 */ int connexionServeurCOL3(const char *adresse_serveur,int port, const char *token) ; /** cette fonction lit un message en TCP (msgrecu) sur la socket (sock) entrées : - sock : numéro de la socket - msgrecu : chaine recue p.pernelle / d.wayntal - 2019 */ void lireMessageCOL3(int sock, char * msgrecu); /** cette fonction envoi un message (msgresponse) par la socket (sock) entrées : - sock : numéro de la socket - msgresponse : chaine à envoyé p.pernelle / d.wayntal - 2019 */ void envoiMessageCOL3(int sock, const char * msgresponse); /* ------------------------------------------------ fonctions de connexion et d'echange de structure avec le serveur CoL3 ------------------------------------------------*/ int testServeur(const char * nomduclan, const char * adresseip, int port); void envoiStructureCOL3(int sock, void * mastructure,int taille); int lireArmeeCOL3(int sock, armee * monarmee); int lirePreAttaqueCOL3(int sock, preAttaque * mapreattaque); int lireAttaqueCOL3(int sock, attaque * monattaque); int lireHutteCOL3(int sock, hutte * mahutte); int lireSitesDuMondeCOL3(int sock, capacite_clan * messites); int lireBatailleVueCOL3(int sock, batailleVue * mabataille); int lireMondeVueCOL3(int sock, mondeVue * monmonde); /* ------------------------------------------------ fonctions d'afichage ------------------------------------------------*/ /** cette procedure affiche la hutte d'un clan p.pernelle / d.wayntal - 2019 */ void afficheHutte(hutte mahutte); /** cette procedure affiche l'armee d'un clan c'est à dire l'ensemble de ses balistes p.pernelle / d.wayntal - 2019 */ void afficheArmee(armee monarmee); /** cette procedure affiche la preparation d une attaque c'est à dire les balistes restantes et les clans restants p.pernelle / d.wayntal - 2019 */ void affichePreAttaque(preAttaque mapreattaque); /** cette procedure affiche la configuration d attaque choisit par un clan p.pernelle / d.wayntal - 2019 */ void afficheAttaque(attaque monattaque); /** cette procedure affiche la capacité d'extraction d'un clan clan p.pernelle / d.wayntal - 2019 */ void afficheSiteExtractionClan(capacite_clan capa) ; /* ------------------------------------------------ fonctions de gestion des parametres des TP ------------------------------------------------*/ /** fonction de conversion type_serveurCOL3 --> string p.pernelle / d.wayntal - 2019 */ char* typeServeurCOL3toString(type_serveurCOL3 tp); /** fonction de conversion string --> type_serveurCOL3 p.pernelle / d.wayntal - 2019 */ type_serveurCOL3 stringtotypeServeurCOL3(char tp[]); /** fonction de conversion type_serveurCOL3 --> string p.pernelle / d.wayntal - 2019 */ char* typeQuestionCOL3toString(type_questionCOL3 qn); /** fonction de conversion string --> type_serveurCOL3 p.pernelle / d.wayntal - 2019 */ type_questionCOL3 stringtotypeQuestionCOL3(char qn[]); /* ------------------------------------------------ fonctions de tests des messages echangés ------------------------------------------------*/ int estDemandeConforme(type_demande demande,const char * msg); int estReponseConforme(type_demande demande, const char * valeurReponse, const char * msg); /* ------------------------------------------------ fonctions de conversion message (chaine de texte) en structure ------------------------------------------------*/ /** cette fonction convertit un message en strucure de type hutte p.pernelle / d.wayntal - 2019 */ int messageToHutte(const char * msg, hutte * mahutte); /** cette fonction convertit un message en strucure de type site extraction p.pernelle / d.wayntal - 2019 */ int messageToSiteExtraction(const char * msg, site_extraction * site); /** cette fonction convertit une strucure de type hutte en un message p.pernelle / d.wayntal - 2019 */ void hutteToMessage(hutte * mahutte, char * msg); /** cette fonction convertit une strucure de type site extraction en un message p.pernelle / d.wayntal - 2019 */ void SiteExtractionToMessage(site_extraction * site, char * msg, const char * nomClan); /* ------------------------------------------------ fonctions d'accès aux fichiers ------------------------------------------------*/ void lectureFichierHutte (hutte * mahutte, char path[]); /* ------------------------------------------------ fonctions génériques ------------------------------------------------*/ /** source : www.code-source.com Retour tableau des chaines recupérer. Terminé par NULL. chaine : chaine à splitter delim : delimiteur qui sert à la decoupe vide : 0 : on n'accepte pas les chaines vides 1 : on accepte les chaines vides */ char** split(char* chaine,const char* delim,int vide); #endif // COMMUNCOL3_H_INCLUDED