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;
}
Example #2
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;
}