void* cl_display(void* args) {
	printf("Pret a afficher...\n");
	Params* p = (Params*)args;
	int sockfd = p->sock;
	screen_init(p->p_screen,p->p_game);
	int continuer = 1;
	p->p_screen->curpos = 0;
    SDL_EnableUNICODE(1);
    while (continuer)
    {
    	SDL_Event event;
    	SDL_PollEvent(&event);
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
                break;
            case SDL_KEYDOWN:
            	 p->p_screen->curpos = gereTouche(&(event.key), p->p_screen->chaine, p->p_screen->curpos);
                 break;
        }
        if(p->p_screen->curpos==-1){
			struct Command c = split_command(p->p_screen->chaine);
			int num_cmd = command_num(c.name);
			pthread_mutex_lock(&mutex_stock);
			if(num_cmd==17 && command_treatment(p->p_game,&c)==2){
				continuer = 0;
				break;
			}
			if(num_cmd==16 || num_cmd==18 || num_cmd==22)
				command_treatment(p->p_game,&c);
			if(num_cmd != 14 || num_cmd==-1 || (num_cmd==14 && command_treatment(p->p_game,&c)==0)){
				p->p_game->last_command = &c;
				send(sockfd,p->p_screen->chaine,strlen(p->p_screen->chaine),0);
			}
			pthread_mutex_unlock(&mutex_stock);
        }
        if(p->p_screen->curpos==-1 || p->p_screen->curpos==-2){
			p->p_screen->curpos = 0;
			int j = 0;
			while(j < 100){
				p->p_screen->chaine[j++] = '\0';
			}
        }
        pthread_mutex_lock(&mutex_stock);
        screen_init(p->p_screen,p->p_game);
        pthread_mutex_unlock(&mutex_stock);
    }
    SDL_EnableUNICODE(0);
    pthread_cancel(pth_recv);
	free(p->p_screen);
	free(p->p_game);
	SDL_Quit();
	pthread_cancel(pth_display);
	exit(0);
	return NULL;
}
void* cl_recv(void* args){
	printf("Pret a recevoir...\n");
	char* ch = (char*)malloc(100);
	char* buff = (char*)malloc(1024);
	int i,r;
	Params* p = (Params*)args;
	int sockfd = p->sock;
	while(1){
		r = recv(sockfd,ch,100,0);
		if(r < 0){return NULL;}
		i = 0;
		while(i<r && ch[i] != '\0'){
			if(ch[i] != '\n'){
				sprintf(buff,"%s%c",buff,ch[i]);
			}
			else{
				struct Command c = split_command(buff);
				puts("\nReception : ");
				pthread_mutex_lock(&mutex_stock);
				command_treatment(p->p_game,&c);
				pthread_mutex_unlock(&mutex_stock);
				int j = 0;
				while(j < 1024){
					buff[j++] = '\0';
				}
				game_print(p->p_game);
			}
			i++;
		}
	}
    pthread_cancel(pth_display);
    pthread_cancel(pth_recv);
	return NULL;
}
Beispiel #3
0
int		i_command_you(char *line, t_lst **hash_t, char **av, char ***envp)
{
	char	**cmds;
	char	**single;

	cmds = ft_strsplit(line, ';');
	while (*cmds)
	{
		single = ft_spaces_split(*(cmds++));
		if (!single[0])
			return (1);
		if (!command_treatment(single, hash_t, av, envp))
			return (0);
	}
	return (1);
}