Example #1
0
/*Function of chatting with someone*/
void chat_with_one(struct send_thread_data *send_data){
    struct packet sendline,recvline;
    show_user_list(send_data);
    char name[MAXNAME];
    memset(&name,0,sizeof(name));
    char msg[MAXDATA];
    //printf("name is %s\n",send_data->send_name);
    //printf("choose one person to chat with:");
    wclear(local_win_down);
    wborder(local_win_down,'|',' ','-',' ','+',' ','+',' ');
    mvwprintw(local_win_down,1,1,"choose one person to chat with:");
    //wrefresh(local_win_down);
    mvwscanw(local_win_down,2,2,"%64s%*[^\n]",name);
    wrefresh(local_win_down);
    //sendline->service=SERVICE_ASKISONLINE;
    //sendline->status=STATUS_REQUEST;
    //sendline->send_name=send_data->send_name;
    //sendline->recv_name=name;
    packetInit(&sendline,SERVICE_ASKISONLINE,STATUS_REQUEST,send_data->send_name,name,NULL);
    send(send_data->sockfd,&sendline,sizeof(sendline),0);
    //printf("recv!!!!!!\n");
    //if(recv(send_data->sockfd,&recvline,sizeof(recvline),0)<0){
    //    perror("The server terminated prematurely");
    //    return;
    //}
    //printf("recv success!!!!\n");
    usleep(100000);
    if(!cantalk){
        //printf("user is not online\n");
        //assert(!cantalk);
        if(linetag==(2*row/3-1)){
            linetag=1;
            wclear(local_win_up);
            wborder(local_win_up,'|','|','-','-','+','+','+','+');
        }
        mvwprintw(local_win_up,linetag,1,"user is not online");
        wrefresh(local_win_up);
		return;
	}
    else if(cantalk){
        memset(&msg,0,sizeof(msg));
        while(1){
            //printf("%s : ",((struct send_thread_data *)send_data)->send_name);
			memset(&msg,0,sizeof(msg));
			wclear(local_win_down);
   		    wborder(local_win_down,'|',' ','-',' ','+',' ','+',' ');
    	    mvwprintw(local_win_down,1,1,"You are chatting with %s",name);
     	    //printf("You are chatting with %s\n",name);
     	    wrefresh(local_win_down);            
			mvwprintw(local_win_down,2,1,"%s:",
                      ((struct send_thread_data*)send_data)->send_name);
            //if(Get_Key()==12) break;
			wrefresh(local_win_down);
            if(getchar()=='')
				return;
			mvwscanw(local_win_down,2,
                     strlen(((struct send_thread_data*)send_data)->send_name)+2,"%[^\n]",msg);
            //if(!strcmp(msg,""))
            //    return;
			//char temp;
			//int len;
			//while(true){
			//	len=strlen(msg);
			//	temp=getchar();
			//	if(temp!='\n'&&temp!=EOF)
			//		msg[temp]=temp;
			//}
            wrefresh(local_win_down);
			if(!strcmp(msg ,""))
				continue;
            if(linetag==2*row/3-1){
                linetag=1;
                wclear(local_win_up);
                wborder(local_win_up,'|','|','-','-','+','+','+','+');
            }
            mvwprintw(local_win_up,linetag,1,"%s:%s",
                     ((struct send_thread_data*)send_data)->send_name,msg);
            linetag++;
            wrefresh(local_win_up);
            //wrefresh(local_win_down);
            //fgets(msg,MAXDATA,stdin);
            //msg[strlen(msg)-1]='\0';
            packetInit(&sendline,SERVICE_MESSAGE,STATUS_REQUEST,send_data->send_name,name,msg);
            send(send_data->sockfd,&sendline,sizeof(sendline),0);
			//if(Get_Key()==12){
				//assert(0);
            //    return;
            //}
			//if(getchar()=='')
			//	return;
        }
    }
}
Example #2
0
/*handle send*/
void *send_handle(void *threadarg){
    //char func='0';
    struct send_thread_data *send_data;
    char func[2];
    memset(&func,0,sizeof(func));
    send_data=(struct send_thread_data *)threadarg;
    //system("clear");
    while(1){
        //printf("Hello,%s\n",send_data->send_name);
        //printf("Function:\n");
        //printf("1.chat with one person;\n");
        //printf("2.chat with all the people online;\n");
        //printf("3.show all the people online;\n");
        //printf("4.logout;\n");
		memset(&func,0,sizeof(func));
		wclear(local_win_down);
        wclear(local_win_up);
        wborder(local_win_up,'|','|','-','-','+','+','+','+');
        wborder(local_win_down,'|',' ','-',' ','+',' ','+',' ');
        mvwprintw(local_win_right,1,1,"Hello,%s",send_data->send_name);
        mvwprintw(local_win_right,2,1,"Function");
        mvwprintw(local_win_right,3,1,"1.chat with one");
        mvwprintw(local_win_right,4,1,"2.chat with all");
        mvwprintw(local_win_right,5,1,"3.update namelist");
        mvwprintw(local_win_right,6,1,"4.logout");
        mvwprintw(local_win_right,7,1,"input  to return");
        mvwprintw(local_win_right,8,1,"=control+B");
		wrefresh(local_win_right);
        mvwprintw(local_win_down,1,1,"fuc:");
        mvwscanw(local_win_down,1,6,"%2s%*[^\n]",func);
        wrefresh(local_win_down);
        switch(func[0]){
            case '1': {//printf("chat name: %s\n",send_data->send_name);
                       //wclear(local_win_down); 
                       //mvwprintw(local_win_down,1,1,"chat name:%s\n",send_data->send_name);
                       //wrefresh(local_win_down);
                       chat_with_one(send_data);
                       break;
                      }
            case '2': {chat_with_all(send_data);break;}
            case '3': {show_user_list(send_data);break;}
            case '4': {
                        logout(send_data);
                        wclear(local_win_down);
                        wclear(local_win_left);
                        wclear(local_win_up);
                        wclear(local_win_right);
                        delwin(local_win_down);
                        delwin(local_win_up);
                        delwin(local_win_right);
                        delwin(local_win_left);
                        endwin();
                        exit(0);
                        break;}
            default : {
                    //printf("input error\n");
                wclear(local_win_down);
                wborder(local_win_down,'|',' ','-',' ','+',' ','+',' ');
                mvwprintw(local_win_down,2,1,"input error");   
                wrefresh(local_win_down); 
				getchar();
            }
        }
    }
}
Example #3
0
void main(){
	
	int listenSock, connSock;
    struct sockaddr_in serv_addr, client_addr;
    int clientAddrLenght;
    User user[100];
    char tmp[100];
    int max_user;
    char mesg[LEN];
    char mesg2[LEN];
    char buff[LEN]="11|";
    int t,n;
    int recvBytes,sentBytes;
    fd_set readfds,allset;
    int i, maxi,sockfd;
    int rv;
    struct pollfd client[30];

    serv_addr.sin_family = AF_INET;       
    serv_addr.sin_addr.s_addr = INADDR_ANY;  
    serv_addr.sin_port = htons(5556); 

    
    if((listenSock = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        printf("\nTao socket loi!!\n");
        return;
    }
    if(bind(listenSock, (struct sockaddr *) &serv_addr,sizeof(serv_addr))<0) {
        printf("\nBind loi!!\n");
        return;
        }
    if(listen(listenSock, 10) == -1) {
        printf("\nListen loi!!\n");
        return;
    }
    for ( i = 1; i < 30; i++){
        client[i].fd=-1;
    }
    client[0].fd = listenSock;
    client[0].events = POLLRDNORM;	
    max_user= take_user(user);
        
    while(1){
     	rv = poll(client, 30,3); //Number of client = 30, time out=3
    
     	if(client[0].revents & POLLRDNORM){
            clientAddrLenght=sizeof(client_addr);
            connSock = accept(listenSock, (struct sockaddr *) &client_addr, (socklen_t*)&clientAddrLenght);
            

            for(i=1;i < 30;i++){
                if(client[i].fd < 0){
                    client[i].fd = connSock;
                    break;
                }
            }//end for
            client[i].events = POLLRDNORM;
            if(--rv <= 0) //no more readable descriptor. Decrement before return
                continue;
        }//end if
        for(i=1;i<30;i++){
            if((sockfd = client[i].fd) <0)
                continue;
            if(client[i].revents & (POLLRDNORM | POLLERR)){
                strcpy(mesg,"");
                n=recv(sockfd, mesg, LEN, 0);

                printf("\nXau nhan tu Client: %s",mesg );
                
                mesg[n]='\0';
                if((n)==0){
                    close(sockfd);
                    client[i].fd = -1;
                    for ( i = 0; i < max_user; i++){
                    	if(user[i].sockfd==sockfd){
                    		user[i].status=0;
                    		break;
                    	}
                    }
                }else{
                    // printf("\nXau nhan tu Client: %s",mesg );
                    t=check_mark(mesg);
                   	if(t == 0)	max_user = sign_up(sockfd,mesg,user,max_user);
                   	if(t == 1)	{
                   		login(sockfd,mesg,user,max_user);
                   		
                   	}
                   	if(t == 2)	show_user_list(sockfd,user,max_user);
                   	if(t == 3)	play_request(sockfd,mesg,user,max_user);
                   	if(t == 4)	accept_request(sockfd,mesg,user,max_user);
                   	if(t == 5)	not_accept_request(sockfd,mesg,user,max_user);
                   	if(t == 6)	playing(sockfd,mesg,user,max_user);
                   	if(t == 7)	stop_play(sockfd,mesg,user,max_user);
                   	if(t == 8)	log_out(sockfd,user,max_user);
                }
                
            if(--rv <= 0)
                break;
            }
        }
    	
     	
    }//end while
}