No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

monitor.h 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // Created by lucien on 05/04/17.
  3. //
  4. #ifndef TCPSERVER_H
  5. #define TCPSERVER_H
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10. #include <unistd.h>
  11. #include <signal.h>
  12. #include <stdlib.h>
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include "image.h"
  16. #include "definitions.h"
  17. #define HEADER_STM_IMAGE "IMG" // Envoi d'une image
  18. #define HEADER_STM_BAT "BAT" // Envoi de l'état de la batterie
  19. #define HEADER_STM_POS "POS" // Envoi de la position
  20. #define HEADER_STM_NO_ACK "NAK" // Acquittement d'un échec
  21. #define HEADER_STM_ACK "ACK" // Acquittement d'un succès
  22. #define HEADER_STM_MES "MSG" // Message textuel
  23. #define HEADER_STM_LOST_DMB "LCD" // Perte de la communication avec le robot
  24. #define HEADER_MTS_MSG "MSG" // Message directe pour Console Dumber
  25. #define HEADER_MTS_DMB_ORDER "DMB" // Message d'ordre pour le robot
  26. #define HEADER_MTS_COM_DMB "COM" // Message de gestion de la communication avec le robot
  27. #define HEADER_MTS_CAMERA "CAM" // Message de gestion de la camera
  28. #define HEADER_MTS_STOP "STO" // Message d'arrêt du system
  29. #define INVALID_SOCKET -1
  30. #define SOCKET_ERROR -1
  31. #define DEFAULT_PORT 8080
  32. #define DEFAULT_PARITY 0
  33. #define DETECT_ARENA (1)
  34. #define CHECK_ARENA (2)
  35. #define NO_ARENA (3)
  36. #define DEFAULT_NODEJS_PATH "/usr/bin/nodejs"
  37. #define DEFAULT_INTERFACE_FILE "./interface.js"
  38. #define closesocket(param) close(param)
  39. typedef int SOCKET;
  40. typedef struct sockaddr_in SOCKADDR_IN;
  41. typedef struct sockaddr SOCKADDR;
  42. typedef struct {
  43. char header[4];
  44. char data[100];
  45. } MessageFromMon;
  46. /**
  47. * \brief Lance nodejs .
  48. * \param path chemin de l'executable nodejs (défaut /usr/bin/nodejs)
  49. * \param file chemin du fichier de l'interface (défaut ./interface.js)
  50. * \return retourne 0 si le process a été lancé et -1 sinon.
  51. */
  52. int run_nodejs(const char *path = (const char*)DEFAULT_NODEJS_PATH, char *file = (const char*)DEFAULT_INTERFACE_FILE);
  53. /**
  54. * \brief Tue le process exécutant nodejs.
  55. * \return retourne 0 en cas de succès et -1 sinon.
  56. */
  57. int kill_nodejs();
  58. /**
  59. * \brief Mise en place du serveur (port 8080 par défaut).
  60. * \param port numéro du port utilisé par le serveur (8080 par défaut).
  61. * \return retourne 0 si le serveur est mis en place et -1 en cas de problème.
  62. */
  63. int open_server(int port = DEFAULT_PORT); //public
  64. /**
  65. * \brief Ferme le serveur.
  66. * \return retourne 0 si le serveur est fermé et -1 en cas de problème.
  67. */
  68. int close_server(void); // public
  69. /**
  70. * \brief Envoi d'un message vers l'interface graphique
  71. * \param typeMessage Type du message envoyé. Les valeurs possibles sont
  72. * IMG pour une image, MES pour un message à afficher dans la console, POS pour
  73. * la position du robot, BAT pour une valeur de la batterie et ACK pour valider
  74. * un message de l'interface.
  75. * \param data données associées au message. Le type de la donnée doit
  76. * correspondre au message : Image pour IMG, char * MES, Position pour POS,
  77. * char * pour BAT et rien pour ACK. Attention, il n'y a aucune vérification
  78. * a posterio.
  79. * \return retourne 0 si l'envoie a bien été réalisé et -1 en cas de problème.
  80. */
  81. int send_message_to_monitor(const char* typeMessage, const void * data = NULL);
  82. /**
  83. * \brief Réception d'un message. La fonction est bloquante et retourne par
  84. * référence le type de message reçu (DMB pour un ordre au robot, ARN pour la
  85. * détection des arènes et POS pour un calcul de position) ainsi que les données
  86. * associées.
  87. * \param typeMessage Type du message reçu : DMB pour un ordre au robot,
  88. * ARN pour la demande de détection de l'arène, POS pour un calcul de position
  89. * et MSG pour un message de l'interface
  90. * \param data données associées au message reçu.
  91. * \return retourne 0 la taille du message reçu ou une valeur négative si la
  92. * connexion est perdue.
  93. */
  94. int receive_message_from_monitor(char *typeMessage, char *data);
  95. #endif // TCPSERVER_H