#include #include #include /*------------------------------------------------------------------------------------------*/ /* Fonction principale du programme */ /*------------------------------------------------------------------------------------------*/ void main ( void ) { MSGT_Port * My_Port; MSGT_Message * Msg; int End_Process; /* Ouverture de la librairie LIBMSG */ if (MSG_Library_Open (NULL, NULL, MSGD_OPEN) != MSGS_OK) { return; } /* Ouverture / création du port de messages privé */ if (MSG_Port_Open (, &My_Port, ) != MSGS_OK) /* = nom du port privé (sans espace) = MSGD_OPEN ou MSGD_CREATE */ { MSG_Library_Close (MSGD_CLOSE); return; } /* Boucle principale du programme */ End_Process = FALSE; while (End_Proces == FALSE) { /* Ecoute du port de messages privé */ int rc = MSG_Message_Receive (My_Port, , &Msg, ); /* = MSGD_WAIT ou MSGD_NO_WAIT = MSGD_NO_TYPE ou type prédéfini ou type utilisateur */ switch (rc) { case MSGS_OK: /* Message reçu */ Message_Process (Msg); break; case MSGS_NO_MSG: /* Aucun message présent (en mode MSGD_NO_WAIT seulement) */ ... break; case MSGS_BAD_TYPE: /* Aucun message du type demandé (en mode MSGD_NO_WAIT seulement) */ ... break; case MSGS_SIGNAL: /* Ecoute interrompue par l'interception d'un signal */ ... break; default: break; } /* Traitement propre au programme */ ... } /* Fin de la boucle principale */ /* Fermeture du port de messages privé */ if (MSG_Port_Close (My_Port, ) != MSGS_OK) /* = MSGD_CLOSE ou MSGD_DESTROY */ { MSG_Library_Close (MSGD_CLOSE); return; } /* Fermeture de la librairie LIBMSG */ MSG_Library_Close (MSGD_CLOSE); } /*------------------------------------------------------------------------------------------*/ /* Fonction de traitement d'un message reçu sur le port privé */ /*------------------------------------------------------------------------------------------*/ void Message_Process ( MSGT_Message * Msg ) { /* Quel est le type du message ? */ switch ( (int)(Msg->Type) ) { case : ... case : /* Traitement selon le message */ ... /* Réponse au message */ if (Msg->Size > strlen ("Message bien reçu")) { /* Réponse au message reçu */ strcpy ((char *)(Msg->Data), "Message bien reçu"); /* Retour à l'envoyeur */ if (MSG_Message_Reply (Msg) == MSGS_OK) return; } break; default: break; } /* Si on n'a pas répondu au message, on le supprime */ MSG_Message_Free (Msg); }