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; }
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); }