void *run(void *arg){ pthread_detach(pthread_self()); vector<string>tok; Account currentUser; int n; char mesg[MAXLINE], sendline[MAXLINE], recvline[MAXLINE]; ClientSock clientSock=*(ClientSock*)arg; int connfd=clientSock.connfd; struct sockaddr_in cliaddr=clientSock.addr; free(arg); while((n=receive(connfd, recvline)) >0) { recvline[n]=0; /* null terminate */ printf("from client IP %s port %d\n", getIP(cliaddr), getPort(cliaddr)); printf("connfd = %d\n", connfd); tok.clear(); tok=parse(recvline); if(userAccount.find(User(getIP(cliaddr), getPort(cliaddr), cliaddr))==userAccount.end()){ if(tok[0][0]=='R'){ writeRecv(connfd, recvline, strlen(recvline));// send to client //register currentUser=Account(tok[1], tok[2]); currentUser.state=Normal; userAccount[User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd)]=currentUser; accountUser[currentUser]=User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd); if(insertUser(currentUser)){ puts("register sucess"); write(connfd, SUCCESS, strlen(SUCCESS)); // update filelist recvFilelist(connfd, currentUser.ID); } else{ puts("register fail"); write(connfd, FAIL, strlen(FAIL)); } } else if(tok[0][0]=='L'){ writeRecv(connfd, recvline, strlen(recvline));// send to client if(login(Account(tok[1], tok[2]))){ currentUser=Account(tok[1], tok[2]); currentUser.state=Normal; userAccount[User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd)]=currentUser; accountUser[currentUser]=User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd); puts("login sucess"); write(connfd, SUCCESS, strlen(SUCCESS)); // update filelist recvFilelist(connfd, currentUser.ID); } else{ puts("login fail"); write(connfd, FAIL, strlen(FAIL)); } } } else{ // login already currentUser=userAccount[User(getIP(cliaddr), getPort(cliaddr), cliaddr)]; accountUser[currentUser]=User(getIP(cliaddr), getPort(cliaddr), cliaddr); if(currentUser.state==Normal){ if(tok[0]=="Del"){// delete account writeRecv(connfd, recvline, strlen(recvline));// send to client puts("Delete account"); deleteUser(currentUser);// delete in db userAccount.erase(User(getIP(cliaddr), getPort(cliaddr), cliaddr)); accountUser.erase(currentUser); write(connfd, SUCCESS, strlen(SUCCESS)); } else if(tok[0]=="L"){// logout writeRecv(connfd, recvline, strlen(recvline));// send to client puts("Logout"); userAccount.erase(User(getIP(cliaddr), getPort(cliaddr), cliaddr)); accountUser.erase(currentUser); deleteFile(currentUser.ID); write(connfd, SUCCESS, strlen(SUCCESS)); } //------------------------------------------------ // show filelist/ show user else if(tok[0]=="SU"){// show user writeRecv(connfd, recvline, strlen(recvline));// send to client writeRecv(connfd, SUCCESS, strlen(SUCCESS)); sendUser(connfd); } else if(tok[0]=="SF"){// show filelist writeRecv(connfd, recvline, strlen(recvline));// send to client writeRecv(connfd, SUCCESS, strlen(SUCCESS)); showFilelist(); sendResult(connfd, 2, result); } //------------------------------------------------ // upload download else if(tok[0]=="D"){// download writeRecv(connfd, recvline, strlen(recvline));// send to client int numFile=existNumFile(tok[1]); printf("number of file = %d\n", numFile); // total authors if(numFile){ vector<string>author=getFileAuthor(); writeRecv(connfd, SUCCESS, strlen(SUCCESS)); string str=toString((int)author.size()); // how many author write(connfd, str.c_str(), str.length()); // to user A recvWrite(connfd, recvline);// tell B connect to "port" // to user A User userA=accountUser[currentUser]; for(int i=0;i<author.size();i++){ cout<<author[i]<<endl; User userB=accountUser[Account(author[i])]; // user B str=string(DOWNLOAD)+" "+userA.IP+" "+recvline+" "+tok[1]+" "+toString(i)+" "+toString((int)author.size()); write(userB.connfd, str.c_str(), str.length());// tell B :(A's) IP port path idx total } // update filelist puts("update filelist"); addFile(currentUser.ID, tok[1]); } else{ write(connfd, FAIL, strlen(FAIL)); } } else if(tok[0]=="U"){// upload writeRecv(connfd, recvline, strlen(recvline));// send to client if(accountUser.find(Account(tok[1]))!=accountUser.end()){ // to user A write(connfd, SUCCESS, strlen(SUCCESS)); User userA=accountUser[currentUser]; User userB=accountUser[Account(tok[1])]; string str; // to user A recvWrite(connfd, recvline);// tell B connect to "port" // user B str=string(UPLOAD)+" "+userA.IP+" "+recvline+" "+tok[2]; write(userB.connfd, str.c_str(), str.length());// tell B :(A's) IP port // update B's filelist addFile(tok[1], tok[2]); } else{ write(connfd, FAIL, strlen(FAIL)); } } //------------------------------------------------ else if(tok[0]=="T"){// A tell B writeRecv(connfd, recvline, strlen(recvline));// send to client if(accountUser.find(Account(tok[1]))!=accountUser.end()){ currentUser.state=Tell; userAccount[User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd)]=currentUser; // to user A write(connfd, SUCCESS, strlen(SUCCESS)); User userA=accountUser[currentUser]; User userB=accountUser[Account(tok[1])]; Account accountB=userAccount[userB]; accountB.state=Tell; userAccount[userB]=accountB; string str; // to user A recvWrite(connfd, recvline);// tell B connect to "port" // user B printf("user B connfd = %d\n", userB.connfd); str=string(TALK)+" "+userA.IP+" "+recvline; // write(userB.connfd, TALK, strlen(TALK)); write(userB.connfd, str.c_str(), str.length());// tell B :(A's) IP port // string str=userB.IP+" "+toString(userB.port); // writeWithSleep(connfd, str.c_str(), str.length()); } else{ write(connfd, FAIL, strlen(FAIL)); } } } else if(currentUser.state==Tell){ if(tok[0]=="EXIT"){ printf("%s EXIT~\n", currentUser.ID.c_str()); currentUser.state=Normal; userAccount[User(getIP(cliaddr), getPort(cliaddr), cliaddr, connfd)]=currentUser; } else{ printf("%s tell~\n", currentUser.ID.c_str()); } } } puts(recvline); // write(connfd, recvline, strlen(recvline)); } close(connfd); return NULL; }
void CVFD::setMode(const MODES m, const char * const title) { if(!has_lcd) return; if(mode == MODE_AUDIO) ShowIcon(VFD_ICON_MP3, false); #if 0 else if(mode == MODE_STANDBY) { ShowIcon(VFD_ICON_COL1, false); ShowIcon(VFD_ICON_COL2, false); } #endif if(strlen(title)) ShowText((char *) title); mode = m; setlcdparameter(); switch (m) { case MODE_TVRADIO: switch (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME]) { case 0: showPercentOver(percentOver, false); break; case 1: showVolume(volume, false); break; #if 0 case 2: showVolume(volume, false); showPercentOver(percentOver, false); break; #endif } showServicename(servicename); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; case MODE_AUDIO: { ShowIcon(VFD_ICON_MP3, true); showAudioPlayMode(AUDIO_MODE_STOP); showVolume(volume, false); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; } case MODE_SCART: showVolume(volume, false); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; case MODE_MENU_UTF8: showclock = false; //fonts.menutitle->RenderString(0,28, 140, title, CLCDDisplay::PIXEL_ON, 0, true); // UTF-8 break; case MODE_SHUTDOWN: showclock = false; break; case MODE_STANDBY: #if 0 ShowIcon(VFD_ICON_COL1, true); ShowIcon(VFD_ICON_COL2, true); #endif showclock = true; showTime(true); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ /* "showTime()" clears the whole lcd in MODE_STANDBY */ break; #ifdef VFD_UPDATE case MODE_FILEBROWSER: showclock = true; display.draw_fill_rect(-1, -1, 120, 64, CLCDDisplay::PIXEL_OFF); // clear lcd showFilelist(); break; case MODE_PROGRESSBAR: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar(); break; case MODE_PROGRESSBAR2: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar2(); break; case MODE_INFOBOX: showclock = false; showInfoBox(); break; #endif // VFD_UPDATE } wake_up(); }
void CLCD::setMode(const MODES m, const char * const title) { mode = m; menutitle = title; setlcdparameter(); switch (m) { case MODE_TVRADIO: case MODE_MOVIE: switch (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME]) { case STATUSLINE_PLAYTIME: display.load_screen(&(background[BACKGROUND_LCD2])); showPercentOver(percentOver, false, mode); break; case STATUSLINE_VOLUME: display.load_screen(&(background[BACKGROUND_LCD])); showVolume(volume, false); break; case STATUSLINE_BOTH: display.load_screen(&(background[BACKGROUND_LCD3])); showVolume(volume, false); showPercentOver(percentOver, false, mode); break; case STATUSLINE_BOTH_AUDIO: display.load_screen(&(background[BACKGROUND_LCD4])); showVolume(volume, false); showPercentOver(percentOver, false, mode); break; default: break; } if (mode == MODE_TVRADIO) showServicename(servicename); else { setMoviePlaymode(movie_playmode); setMovieInfo(movie_big, movie_small); setMovieAudio(movie_is_ac3); } showclock = true; showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; case MODE_AUDIO: { display.load_screen(&(background[BACKGROUND_LCD])); display.draw_fill_rect(0, 14, LCD_COLS, 48, CLCDDisplay::PIXEL_OFF); showAudioPlayMode(PLAYMODE_STOP); showVolume(volume, false); showclock = true; showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; } case MODE_SCART: display.load_screen(&(background[BACKGROUND_LCD])); showVolume(volume, false); showclock = true; showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; case MODE_MENU_UTF8: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); fonts.menutitle->RenderString(0, 28, LCD_COLS + 20, title, CLCDDisplay::PIXEL_ON, 0, true); // UTF-8 displayUpdate(); break; case MODE_SHUTDOWN: showclock = false; display.load_screen(&(background[BACKGROUND_POWER])); displayUpdate(); break; case MODE_STANDBY: showclock = true; showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ /* "showTime()" clears the whole lcd in MODE_STANDBY */ break; #ifdef LCD_UPDATE case MODE_FILEBROWSER: showclock = true; display.draw_fill_rect(-1, -1, LCD_COLS, 64, CLCDDisplay::PIXEL_OFF); // clear lcd showFilelist(); break; case MODE_PROGRESSBAR: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar(); break; case MODE_PROGRESSBAR2: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar2(); break; case MODE_INFOBOX: showclock = false; showInfoBox(); break; #endif // LCD_UPDATE } wake_up(); }
void CVFD::setMode(const MODES m, const char * const title) { if(fd < 0) return; // Clear colon in display if it is still there #ifdef BOXMODEL_APOLLO if (support_numbers && has_led_segment) ioctl(fd, IOC_FP_SET_COLON, 0x00); #endif if(mode == MODE_AUDIO) ShowIcon(FP_ICON_MP3, false); #if 0 else if(mode == MODE_STANDBY) { ShowIcon(FP_ICON_COL1, false); ShowIcon(FP_ICON_COL2, false); } #endif if(strlen(title)) ShowText(title); mode = m; setlcdparameter(); switch (m) { case MODE_TVRADIO: switch (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME]) { case 0: showPercentOver(percentOver, false); break; case 1: showVolume(volume, false); break; #if 0 case 2: showVolume(volume, false); showPercentOver(percentOver, false); break; #endif } showServicename(servicename); showclock = true; if(g_settings.lcd_info_line) switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10; break; case MODE_AUDIO: { ShowIcon(FP_ICON_MP3, true); showAudioPlayMode(AUDIO_MODE_STOP); showVolume(volume, false); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; } case MODE_SCART: showVolume(volume, false); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; case MODE_MENU_UTF8: showclock = false; //fonts.menutitle->RenderString(0,28, 140, title, CLCDDisplay::PIXEL_ON); break; case MODE_SHUTDOWN: showclock = false; Clear(); break; case MODE_STANDBY: #if 0 ShowIcon(FP_ICON_COL1, true); ShowIcon(FP_ICON_COL2, true); #endif ClearIcons(); ShowIcon(FP_ICON_USB, false); ShowIcon(FP_ICON_HDD, false); showclock = true; showTime(true); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ /* "showTime()" clears the whole lcd in MODE_STANDBY */ break; #ifdef VFD_UPDATE case MODE_FILEBROWSER: showclock = true; display.draw_fill_rect(-1, -1, 120, 64, CLCDDisplay::PIXEL_OFF); // clear lcd showFilelist(); break; case MODE_PROGRESSBAR: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar(); break; case MODE_PROGRESSBAR2: showclock = false; display.load_screen(&(background[BACKGROUND_SETUP])); showProgressBar2(); break; case MODE_INFOBOX: showclock = false; showInfoBox(); break; #endif // VFD_UPDATE } wake_up(); #if !HAVE_DUCKBOX_HARDWARE setled(); #endif }