#ifndef _SERVER_HH_ #define _SERVER_HH_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "clientinfo.hh" #include "referencepoint.hh" #include "accesspoint.hh" #include "point.hh" #include "measurement.hh" #include "area.hh" using namespace std; using std::string; #define DEFAULT_LOGFILE "log/radar_exp.csv" // Fichier de sortie #define DEFAULT_REF_POINT_FILE "csv/agreg/toutes.csv" // Fichier des points de référence #define DEFAULT_AP_FILE "cfg/minipc.cfg" // Fichier de configuration des AP #define DEFAULT_TRACKING_FILE "csv/agreg/divagation.csv" // Fichier de prérégrination #define DEFAULT_TOPOLOGY_FILE "cfg/topo.csv" #define DEFAULT_DISTANCE_FILE "cfg/distances.csv" #define DEFAULT_IP "127.0.0.1" #define DEFAULT_LISTEN_PORT 7777 #define LIGHT_SPEED 300000000 #define MINMAX_STEP 0.5 #define MINMAX_X_START -1 #define MINMAX_Y_START -1 #define MINMAX_X_STOP 15 #define MINMAX_Y_STOP 45 #define BUFFER_LENGTH 5000 //#define DEFAULT_Z 3 // Décommenter pour utiliser des fichiers d'entrée avec des coordonnées dans un seul plan (X, Y). //#define FRED_CSV_FORMAT // Décommenter pour utiliser les fichiers CSV au « format Fred » (plusieurs lignes par mesure, avec un AP par ligne). class Server { protected: vector client_list ; // Liste des clients connus vector reference_point_list ; // Liste des points de référence (calibration) vector access_point_list ; // Liste des AP connus multimap area_list ; // Liste des zones homogènes (pièces) Point *waypoint_indexes ; // Liste des points de parcours float **waypoint_matrix ; // Matrice des distances entre les points de parcours struct sockaddr_in server_addr; int sockListen; int sockSend; public: Server(const string &ip_addr = DEFAULT_IP, const int &listen_port = DEFAULT_LISTEN_PORT); ~Server(); void send_to_client(const int &cl); int receive_data(); bool pointExists(const float &x, const float &y, const float &z)const; bool pointExists(const Point &p)const; bool pointExists(const vector &point_list, const float &x, const float &y, const float &z) const ; bool pointExists(const vector &point_list, const Point &p) const ; unsigned int pointIndex(const float &x, const float &y, const float &z)const; unsigned int pointIndex(const Point &p)const; unsigned int pointIndex(const vector &point_list, const float &x, const float &y, const float &z) const ; unsigned int pointIndex(const vector &point_list, const Point &p) const ; bool apExists(const string &ap_addr)const; unsigned int apIndex(const string &ap_addr)const; vector getkClosestInSs(const vector &m, const unsigned int &k)const ; vector getkClosestInSs(const vector &m, const unsigned int &k, const Point *point_ignored)const ; Point getkWeightedInSs(const vector &m, const unsigned int &k)const ; Point getkWeightedInSs(const vector &m, const unsigned int &k, const Point *point_ignored)const ; Point kPointsAverage(const vector &vp)const; Point fbcm(const vector &m, const int &client_idx)const; Point interlink(const vector &m, const int &client_idx)const; void makeReferencePointListFromFile(const string &filename); void makePointListFromFile(vector &dest_point_list, const string &filename) ; void makePointListFromFile(vector &dest_point_list, const string &filename, const bool uniq_point) ; void makeApListFromFile(const string &filename); void makeTopologyFromFile(const string &filename) ; void makeWaypointDistancesFromFile(const string &filename) ; void printReferencePointList(); void printPointList(vector &point_list) ; void printAccessPointList(); void computeFriisFromRefList(); unsigned int getNbReferencePoints()const { return reference_point_list.size(); }; void fastViterbiLike(const unsigned short &N, const unsigned short &K, const unsigned int &id_client) ; /* For experimentation purpose only ! */ void radar_exp(); }; #endif // _SERVER_HH_