static int messageTask(void* i_param) { struct NyLPC_TUartFrameFormatHeader payload_header; NyLPC_TcSnicNetif_t* inst=&_inst; //スレッドステータス有効 while((inst->_flags&FLAGS_THREAD_ACTIVE_REQ)!=0){ inst->_flags|=FLAGS_THREAD_ACTIVE_STA; if((inst->_flags&FLAGS_MSGPROC_GO_REQ)==0){ inst->_flags&=~FLAGS_MSGPROC_GO_STA; NyLPC_cThread_sleep(10); }else{ inst->_flags|=FLAGS_MSGPROC_GO_STA; if(!waitforRawByte(inst->_dev,SNIC_DATA_SOM)){ continue; } if(!recvHeader(inst->_dev,&payload_header)){ continue; } switch(NyLPC_TUartFrameFormat_getCmd(&payload_header)){ case SNIC_UART_CMD_ID_GEN: if(!NyLPC_cSnicGeneral_rxHandler(inst->_dev)){ continue; } break; case SNIC_UART_CMD_ID_SNIC: if(!NyLPC_cSnicApi_rxHandler(&inst->_snic_api,inst->_dev)){ continue; } break; case SNIC_UART_CMD_ID_WIFI: if(!NyLPC_cSnicWifi_rxHandler(inst->_dev)){ continue; } break; } if(!waitforRawByte(inst->_dev,SNIC_DATA_ESC)){ continue; } } } //スレッドステータス無効 inst->_flags&=~FLAGS_THREAD_ACTIVE_STA; return 0; }
/* Main coté Client */ int main(){ SOCKET sock; header_t header = {-1,-1,-1}; // Servira de header de réception et d'envoi, il faudra juste changer la taille char* message = NULL; char* startMsg; // Permet de connaître la première adresse en mémoire du msg pour pouvoir la libérer par la suite //char* responseForServ = NULL; // La réponse que l'on envoie au serveur int initCo = 1; // Quand initCo == 1 il faut juste envoyer un header au serveur pour qu'il donne un id au client char* responseForServ = NULL; linkedlist_t listResp = NULL; // La liste des réponses de commande command_t command = {NULL, NULL}; while(1){ sock = connectCli("127.0.0.1"); // On veut initialiser la connexion if(initCo == 1){ if(sendHeader(sock, header) == -1){ perror("Erreur dans l'envoi de l'entete au serveur"); exit(EXIT_FAILURE); } printf("Vous etes connecte au serveur.\n"); initCo = 0; // La connexion est initialisé, le serveur va envoyer les données sleep(1); } else if(responseForServ != NULL){ header.size = strlen(responseForServ)+1; if(sendHeader(sock, header) == -1){ perror("Erreur dans l'envoi de l'entete au serveur"); exit(EXIT_FAILURE); } sendMessage(sock, responseForServ); free(responseForServ); } else{ // Aucune réponse à envoyer au serveur header.size = -1; if(sendHeader(sock, header) == -1){ perror("Erreur dans l'envoi de l'entete au serveur"); exit(EXIT_FAILURE); } } // Dans les ca où il n'y a pas de réponse à envoyer, on attend des données du serveur if(recvHeader(sock, &header) == -1){ perror("Erreur dans la réception de l'entete"); exit(EXIT_FAILURE); } if(header.size != -1){ message = NULL; message = recvMessage(sock, header); // Reception du message if(message == NULL){ perror("Erreur dans la reception du message."); exit(EXIT_FAILURE); } startMsg = message; do{ // Récupère et interprète toutes les commandes command = getCommand(&message); listResp = performCommandCli(&command, listResp); command.args = cleanL(command.args, 0); // Vide la liste d'arguments s'il en reste }while(command.name != NULL); fflush(stdout); responseForServ = formatResponse(&listResp); free(startMsg); if(responseForServ == NULL){ sleep(1); // Quand on a pas de réponse, on attend 1 secondes } } else{ // Quand le serveur n'a pas envoyé de messsage if(shutdown(sock, SHUT_RDWR) == -1){ perror("Erreur pendant la fermeture du socket."); exit(EXIT_FAILURE); } close(sock); //sleep(2); // On attend un petit moment } } return EXIT_SUCCESS; }