int main(int argc, char ** argv) { /* OpenArchive roa; SetCallback rsc; ProcessFile rpf; CloseArchive rca;*/ std::vector<std::string> monitor_dirs; std::string extract_dir; std::vector<std::string> files_to_unpack; std::vector<std::string> dest_dirs; std::vector<std::string> passwords; bool recurseMonitor; if (parseOpts(argc, argv, files_to_unpack, dest_dirs, passwords, monitor_dirs, recurseMonitor, extract_dir)) { fprintf(stderr, "Usage: stream_unrar [%s <rar file> %s <dest_dir> [%s <password>]] [%s <monitor_dir> %s <extract_dir> [%s]]\n", add_flag.c_str(), dir_flag.c_str(), pass_flag.c_str(), monitor_flag.c_str(), extract_flag.c_str(), recurse_flag.c_str()); fprintf(stderr, "Multiple archives or monitor directories can be specified.\n"); fprintf(stderr, "Archives are processed first, then monitoring begins\n"); fprintf(stderr, "Monitoring is stopped when a file %s is created in one of the directories\n", abort_monitor.c_str()); return -1; } assert(files_to_unpack.size() == dest_dirs.size()); assert(files_to_unpack.size() == passwords.size()); for(std::vector<std::string>::iterator file = files_to_unpack.begin(), dir = dest_dirs.begin(), pass = passwords.begin(); // we're guaranteed that all 3 iterators are the same size by parseOpts file != files_to_unpack.end(); ++file, ++dir, ++pass) { extract(*file, *dir, *pass); } if (monitor_dirs.size() == 0) return 0; setPriority(low); fprintf(stdout, "Beginning to monitor watch directories\n"); bool stopMonitoring = false; bool valid_monitor_dir = true; while (!stopMonitoring && valid_monitor_dir) { valid_monitor_dir = false; for (std::vector<std::string>::iterator dir = monitor_dirs.begin(); dir != monitor_dirs.end(); ++ dir) { if (!dirExists(*dir)) continue; valid_monitor_dir = true; if (process(*dir, recurseMonitor, extract_dir)) return 0; } thread_sleep(1); } return -1; }
//PangooFS MigrateThreshold METADIR DATADIR FuseMount LogFile int main(int argc, char *argv[]) { if (argc < 2) { usage(); } Properties prop; parseOpts(argc, argv, prop); Test(prop); return 0; }
int wmain(int argc, wchar_t *argv[]) { Options opts = {0}; FILE *fp; int i; atexit(debug); if (argc < 2) { printUsage(argv); return 1; } else if ((i = parseOpts(argc, argv, &opts)) >= 0) { printf("Invalid parameter specified in '%S'.\n", argv[i]); printUsage(argv); return 2; } else if (opts.font_name == NULL || opts.text_file == NULL) { printf("No font name or input text file specified.\n"); printUsage(argv); return 3; } else if (wcslen(opts.font_name) >= 32) { printf("The font name is too long (max 31 characters).\n"); return 4; } printf("Specified options:\n"); printf(" Font: '%S' [%s%s]\n", opts.font_name, opts.bold ? "Bold" : "Regular", opts.italic ? " Italic" : ""); printf(" Input file: '%S'%s\n", opts.text_file, opts.isRange ? " (range)" : ""); if (_wfopen_s(&fp, opts.text_file, L"r,ccs=UTF-8")) { perror("Could not open input file"); printUsage(argv); return 5; } getGlyphIds(fp, &opts); fclose(fp); }
int main(int argc, char** argv) { static_cast<void>(testReadingInput); // suppress unused warning // read benchmark try { auto opts = parseOpts(argc, argv); auto problem = readRoutingInstFromPath(opts.inputBenchmark); RoutingSolver rst(problem); rst.useNetDecomposition = opts.useNetDecomposition; rst.useNetOrdering = opts.useNetOrdering; rst.timeLimit = std::chrono::minutes(13); rst.emitSVG = opts.emitSVG; rst.costFunction = opts.costFunction; if (opts.useNetOrdering) rst.reorderNets(problem.nets); else printf("Not using ordering\n"); // run actual routing rst.solveRouting(); if(opts.useNetOrdering || opts.useNetDecomposition) rst.rrr(); // write the result writeToPath(opts.outputFile, problem); return 0; } catch (std::exception& ex) { printf("Error: %s\n", ex.what()); return 1; } }
int main( int argc , char **argv ) { parseOpts( argc, argv ); // Nuke +1 1012: Loop counter int counter1 = 0; int counter2 = 0; int counter3 = 0; int counter4 = 0; signal(SIGUSR1, sigusr1); log_rotate_interval = 3600 * 24 * 7; Lock_Init(); // Arminius 7.17 memory lock UNlockM_Init(); if(readConfig( "acserv.cf" )<0){ log( "ÎÞ·¨ÔÚµ±Ç°Ä¿Â¼Àï¶ÁÈ¡ acserv.cf .\n" ); exit(1); } #ifdef _SASQL sasql_init(); #endif log( "¶ÁÈ¡Êý¾ÝĿ¼\n" ); dbRead( dbdir ); #ifdef _FAMILY log("¶ÁÈ¡ ¼Ò×åׯ԰\n"); readFMSMemo(fmsmemodir); log("¶ÁÈ¡ ¼Ò×åÁôÑÔ\n"); readFMPoint(fmpointdir); log("¶ÁÈ¡ ¼Ò×åĿ¼\n"); readFamily(familydir); #endif log( "×¼±¸ µµ°¸Ä¿Â¼\n" ); prepareDirectories( chardir ); log( "×¼±¸ ÈÕ־Ŀ¼\n" ); prepareDirectories( logdir ); log( "×¼±¸ ÓʼþĿ¼\n" ); prepareDirectories( maildir ); #ifdef _SLEEP_CHAR prepareDirectories( sleepchardir ); log( "×¼±¸ ˯Ãßµµ°¸Ä¿Â¼\n" ); #endif /* Ð×ÒýÔÈ»¯Ô¶ª¡õ»ïë Ðijð¸ê */ if( readMail(maildir) < 0 ){ log( "²»Äܳõʼ»¯Óʼþ\n" ); exit(1); } /* TCPSTRUCT ëâÙÓå¼À */ { int tcpr; if( ( tcpr = tcpstruct_init( NULL , port , 0 , CHARDATASIZE * 16 * MAXCONNECTION , 1 /* DEBUG */ ) ) < 0 ){ log( "²»ÄÜ¿ªÆôTCP: %d\n", tcpr ); return 1; } } saacproto_InitServer( netWrite , CHARDATASIZE ); { struct sigaction s,os; bzero( &s, sizeof(s)); s.sa_handler = sighandle; s.sa_flags = SA_NOMASK; sigaction( SIGTERM, &s, &os ); bzero( &s, sizeof(s)); s.sa_handler = sighandle; s.sa_flags = SA_NOMASK; sigaction( SIGINT, &s, &os ); bzero( &s, sizeof( s )); s.sa_handler = SIG_IGN; s.sa_flags = SA_NOMASK; sigaction( SIGPIPE, &s, &os ); } #ifdef _AC_SEND_FM_PK // WON ADD ׯ԰¶ÔÕ½ÁÐ±í´¢´æÔÚAC load_fm_pk_list(); #endif #ifdef _ACFMPK_LIST FMPK_LoadList(); #endif #ifdef _ALLDOMAN LOAD_herolist(); // Syu ADD ÅÅÐаñNPC #endif #ifdef _ANGEL_SUMMON initMissionTable(); #endif #ifdef _VIP log( "\n·þÎñ¶Ë°æ±¾: <%s »áÔ±°æ>\n" , SERVER_VERSION ); #else log( "\n·þÎñ¶Ë°æ±¾: <%s ÆÕͨ°æ>\n" , SERVER_VERSION ); #endif log( "\n·þÎñ¶Ë±àÒëÍê³Éʱ¼ä:%s %s by 17CSA¹¤×÷ÊÒ\n" , __DATE__ , __TIME__ ); log( "\n¿ªÊ¼¹¤×÷...\n" ); signal(SIGUSR1,sigusr1); // Arminius 7.20 memory lock int itime=0; while(1){ itime++; if(itime>cpuuse){ itime=0; usleep(1); } int newti,i; static time_t main_loop_time; sys_time = time(NULL); if( main_loop_time != sys_time){ main_loop_time = time(NULL); counter1++; counter2++; counter3++; counter4++; //andy add 2002/06/20 UNlockM_UnlockPlayer(); #ifdef _ANGEL_SUMMON checkMissionTimelimit(); #endif // Nuke *1 1012 if( counter1 > Total_Charlist ){ counter1=0; char *c = ctime( &main_loop_time ); if( c ){ struct timeval st,et; log( "\nTIME:%s\n",c ); gettimeofday( &st,NULL); dbFlush(dbdir); gettimeofday( &et,NULL); log( "Flushed db(%fsec)\n", time_diff(et,st) ); log( "µµ°¸±íÁÐ×ÜÊý:%d NG:%d\n", total_ok_charlist, total_ng_charlist ); } } // Nuke **1 1012 //if( ( counter % 600 ) == 0 ){ if( counter2 > Expired_mail ){ counter2=0; struct timeval st,et; gettimeofday( &st,NULL); expireMail(); gettimeofday( &et,NULL); log( "¹ýÆÚÓʼþ(%fsec)\n", time_diff(et,st) ); } #ifdef _FAMILY //if ((counter % 300) == 0) // 300( -> 60) if( counter4 > Write_Family ) // 300( -> 60) { counter4=0; struct timeval st, et; gettimeofday(&st, NULL); writeFamily(familydir); writeFMPoint(fmpointdir); writeFMSMemo(fmsmemodir); gettimeofday(&et, NULL); log("¼Ç¼¼Ò×å(%fsec)\n", time_diff(et, st)); } #endif } newti = tcpstruct_accept1(); if( newti >= 0 ){ log( "ͬÒâ: %d\n" , newti ); gs[newti].use = 1; } for(i=0;i<MAXCONNECTION;i++){ // char buf[CHARDATASIZE * 16; char buf[CHARDATASIZE]; int l; l = tcpstruct_readline_chop( i , buf , sizeof( buf )- 1); { if( !gs[i].use )continue; if( l > 0 ){ char debugfun[256]; buf[l]=0; if( saacproto_ServerDispatchMessage( i , buf, debugfun)<0){ // Nuke start //tcpstruct_close(i);// avoid the shutdown the gmsv ttom log( "GMSV(%s) ÏûÏ¢:%s\n", gs[i].name, debugfun); FILE *fp; if( (fp=fopen( "badgmsv.txt", "a+")) != NULL ){ fprintf( fp, "GMSV(%s) ÏûÏ¢:%s\n", gs[i].name, debugfun); fclose( fp); } } } else if( l == TCPSTRUCT_ETOOLONG ){ log( "ºÜ³¤:%d ·þÎñÆ÷Ãû::%s\n", i , gs[i].name ); FILE *fp; if( (fp=fopen( "badgmsv.txt", "a+")) != NULL ){ fprintf( fp, "ºÜ³¤:%d ·þÎñÆ÷Ãû::%s\n", i , gs[i].name); fclose( fp); } logout_game_server( i ); } else if( l < 0 ){ log( "¹Ø±Õ:%d ·þÎñÆ÷Ãû:%s\n", i , gs[i].name ); FILE *fp; if( (fp=fopen( "badgmsv.txt", "a+")) != NULL ){ fprintf( fp, "¹Ø±Õ:%d ·þÎñÆ÷Ãû:%s\n", i , gs[i].name); fclose( fp); } logout_game_server(i); } else if( l == 0 ){ ; } } } { static struct timeval tv_loop_store ; struct timeval now; double dif; gettimeofday( &now , NULL ); dif = time_diff( now, tv_loop_store ); if( dif > 0.5 ){ // CoolFish 0.1 -> 0.5 2001/5/19 //log( "Sl:%f" , dif ); } tv_loop_store = now; } /* ·¥¡õÊСõ¼°ÕýÄÌةʧËüÐþëƩÍÍÔÂ£Û ÕýÄÌةʧËüÐþØÆÐ×ÈÕ·òºëë·ÖØÆ»¯·¥¡õÊСõëڽØÆ»¯ØÆÒýµ¤£Û Æ¥±Ø¡õØ©ÈÓ¡õÌï¡õ±å ±Î¶Á±å·´É§ôÅÔÊÔ */ } return 0; }
int main(int argc, char **argv) { return fprintf(stderr, parseOpts(argc, argv) == 0? "" : "["KRED"ERR"RESET"] Errors occured. Please check them and run again.\n"); }
int main(int argc, char **argv) { int iStatus, iGetCount, retVal; // error checking char cGetData, *cBufPtr, *cBufPtr2; char sDataPath_old[ 256 ], sDataPath_now[ 256 ], tty[ C_ARRAYSIZE ]; FILE *fWriteData = NULL; time_t timeNow; long nanosec; struct tm *stTm; struct termio stTermio; struct timespec stNow; memset( sDataPath_old, '\0', sizeof( sDataPath_old ) ); memset( tty, '\0', sizeof tty ); signal( SIGINT, sd_hook ); cBufPtr2 = tty; parseOpts(argc,argv,cBufPtr2); if ( 0 == strcmp(tty,"") ) { /* no tty specified */ strncpy(tty,SERIAL_DEVICE,sizeof tty ) ; printf("[Notice] Serial device not specified, using default: %s\n",tty); } /* open serial port */ sprintf( sBuffer, "Opening serial device: %s\n", tty ); printf(sBuffer); iSerialFD = open( SERIAL_DEVICE, O_RDWR ); if ( iSerialFD < 0 ) { sprintf( sBuffer, "[Error] open of %s failed... ", tty ); perror( sBuffer ); exit( 0 ); } printf("Opening serial device: success\n"); iStatus = ioctl( iSerialFD, TCGETA, &stTermio ); if ( iStatus < 0 ) { perror( "[Error] ioctl (TCGETA) failed..."); sd_hook(); } stTermio.c_cflag |= B9600; stTermio.c_lflag &= ~ECHO; stTermio.c_lflag &= ~ICANON; stTermio.c_cc[ VMIN ] = 1; stTermio.c_cc[ VTIME ] = 0; iStatus = ioctl( iSerialFD, TCSETA, &stTermio ); if ( iStatus < 0 ) { perror( "[Error] ioctl (TCSETA) failed..." ); sd_hook(); } printf("Setting port I/O parameters: success\n"); /************************************************************/ /* SR620 パラメータ設定 (設定値の反映確認は省略) */ /* */ /* リセット */ strcpy( sBuffer, "*RST;*CLS\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* timebase = internal */ strcpy( sBuffer, "CLCK0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* mode = time */ strcpy( sBuffer, "MODE0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* trigger mode = +time (not +/- time) */ strcpy( sBuffer, "ARMM1\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* display = mean */ strcpy( sBuffer, "DISP0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the measurement source... [ 0:A , 1:B ] */ strcpy( sBuffer, "SRCE0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the number of samples... */ strcpy( sBuffer, "SIZE1\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the trigger slope... [ 0:positive , 1:negative ] */ strcpy( sBuffer, "TSLP1,0;TSLP2,0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the trigger level... */ strcpy( sBuffer, "LEVL1,1.2;LEVL2,1.2\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the trigger ac/dc coupling... [ 0:DC , 1:AC ] */ strcpy( sBuffer, "TCPL1,0;TCPL2,0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* Set the trigger impedance... [ 0:50ohm , 1:1meg ] */ strcpy( sBuffer, "TERM1,0;TERM2,0\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* local/remote = remote */ strcpy( sBuffer, "LOCL1\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* auto measure */ strcpy( sBuffer, "AUTM1\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); /* */ /* SR620 パラメータ設定 (設定値の反映確認は省略) */ /************************************************************/ while ( 1 ) { strcpy( sBuffer, "*WAI;XAVG?\n" ); write( iSerialFD, sBuffer, strlen( sBuffer ) ); cBufPtr = sBuffer; while ( 1 ) { // read results iGetCount = read( iSerialFD, &cGetData, 1 ); if ( iGetCount < 0 ) { perror( "[Error] read failed..." ); sd_hook(); } *cBufPtr = cGetData; cBufPtr++; if (cBufPtr>=sBuffer+sizeof(sBuffer)) { fprintf(stderr,"Answer exeeds bounds.\n\n"); return 0; } if ( ( cGetData == '\n' ) || ( cGetData == '\0' ) ) { /* get new timestamp */ retVal = clock_gettime( CLOCK_REALTIME, &stNow ); if ( retVal != 0 ) { perror("[Error] clock_gettime() failed..." ); } tcflush( iSerialFD, TCIFLUSH ); *cBufPtr = '\0'; /* pull 'time_t' type (aka UNIXtime) from 'timespec' type variable 'stNow' */ retVal = clock_gettime( CLOCK_REALTIME, &stNow ); timeNow = stNow.tv_sec ; /* second part of struct 'timespec' contains nanosecond part */ nanosec = stNow.tv_nsec ; stTm = gmtime( &timeNow ); /* Pick log file */ sprintf( sDataPath_now, "%s%d%02d%02d.dat" , DATA_DIR, ( stTm->tm_year + 1900 ), ( stTm->tm_mon + 1 ), stTm->tm_mday ); if ( strcmp( sDataPath_now, sDataPath_old ) != 0 ) { if ( fWriteData != NULL ) { fclose( fWriteData ); } fWriteData = fopen( sDataPath_now, "aw" ); strcpy( sDataPath_old, sDataPath_now ); } /* write data to log */ strftime(sISO8601, sizeof(sISO8601),"%Y-%m-%dT%H:%M:%S", stTm); fprintf( fWriteData, "%s %12.12lf %ju %09li\n" , sISO8601 , atof( sBuffer ) , (uintmax_t)timeNow , nanosec ); fflush( fWriteData ); break; } } } }
int main( int argc , char **argv ) { parseOpts( argc, argv ); // Nuke +1 1012: Loop counter int counter1 = 0; int counter2 = 0; int counter3 = 0; int counter4 = 0; signal(SIGUSR1, sigusr1); log_rotate_interval = 3600 * 24 * 7; Lock_Init(); // Arminius 7.17 memory lock UNlockM_Init(); if(readConfig( "acserv.cf" )<0){ log( "���ڵ�ǰĿ¼���ȡ acserv.cf .\n" ); exit(1); } #ifdef _SASQL sasql_init(); #endif log( "��ȡ����Ŀ¼\n" ); dbRead( dbdir ); #ifdef _FAMILY log("��ȡ ����ׯ\n"); readFMSMemo(fmsmemodir); log("��ȡ ��������\n"); readFMPoint(fmpointdir); log("��ȡ ����Ŀ¼\n"); readFamily(familydir); #endif log( "�� ����Ŀ¼\n" ); prepareDirectories( chardir ); log( "�� ��־Ŀ¼\n" ); prepareDirectories( logdir ); log( "�� �ʼ�Ŀ¼\n" ); prepareDirectories( maildir ); #ifdef _SLEEP_CHAR prepareDirectories( sleepchardir ); log( "�� ˯�ߵ���Ŀ¼\n" ); #endif /* �����Ȼ��¶�����ë �ij�� */ if( readMail(maildir) < 0 ){ log( "���ܳ�ʼ���ʼ�\n" ); exit(1); } /* TCPSTRUCT ë����� */ { int tcpr; if( ( tcpr = tcpstruct_init( NULL , port , 0 , CHARDATASIZE * 16 * MAXCONNECTION , 1 /* DEBUG */ ) ) < 0 ){ log( "���ܿ���TCP: %d\n", tcpr ); return 1; } } saacproto_InitServer( netWrite , CHARDATASIZE ); { struct sigaction s,os; bzero( &s, sizeof(s)); s.sa_handler = sighandle; s.sa_flags = SA_NOMASK; sigaction( SIGTERM, &s, &os ); bzero( &s, sizeof(s)); s.sa_handler = sighandle; s.sa_flags = SA_NOMASK; sigaction( SIGINT, &s, &os ); bzero( &s, sizeof( s )); s.sa_handler = SIG_IGN; s.sa_flags = SA_NOMASK; sigaction( SIGPIPE, &s, &os ); } #ifdef _AC_SEND_FM_PK // WON ADD ׯ��ս�б�����AC load_fm_pk_list(); #endif #ifdef _ACFMPK_LIST FMPK_LoadList(); #endif #ifdef _ALLDOMAN LOAD_herolist(); // Syu ADD ���а�NPC #endif #ifdef _VIP log( "\n����˰汾: <%s ��Ա��>\n" , SERVER_VERSION ); #else log( "\n����˰汾: <%s ��ͨ��>\n" , SERVER_VERSION ); #endif log( "\n����˱������ʱ��:%s %s by ��zoro������\n" , __DATE__ , __TIME__ ); log( "\n��ʼ����...\n" ); signal(SIGUSR1,sigusr1); // Arminius 7.20 memory lock int itime=0; while(1){ itime++; if(itime>cpuuse){ itime=0; usleep(1); } int newti,i; static time_t main_loop_time; sys_time = time(NULL); if( main_loop_time != sys_time){ main_loop_time = time(NULL); counter1++; counter2++; counter3++; counter4++; //andy add 2002/06/20 UNlockM_UnlockPlayer(); #ifdef _ANGEL_SUMMON checkMissionTimelimit(); #endif // Nuke *1 1012 if( counter1 > Total_Charlist ){ counter1=0; char *c = ctime( &main_loop_time ); if( c ){ struct timeval st,et; log( "\nTIME:%s\n",c ); gettimeofday( &st,NULL); dbFlush(dbdir); gettimeofday( &et,NULL); log( "Flushed db(%fsec)\n", time_diff(et,st) ); log( "������������:%d NG:%d\n", total_ok_charlist, total_ng_charlist ); } } // Nuke **1 1012 //if( ( counter % 600 ) == 0 ){ if( counter2 > Expired_mail ){ counter2=0; struct timeval st,et; gettimeofday( &st,NULL); expireMail(); gettimeofday( &et,NULL); log( "�����ʼ�(%fsec)\n", time_diff(et,st) ); } #ifdef _FAMILY //if ((counter % 300) == 0) // 300( -> 60) if( counter4 > Write_Family ) // 300( -> 60) { counter4=0; struct timeval st, et; gettimeofday(&st, NULL); writeFamily(familydir); writeFMPoint(fmpointdir); writeFMSMemo(fmsmemodir); gettimeofday(&et, NULL); log("��¼����(%fsec)\n", time_diff(et, st)); } #endif } newti = tcpstruct_accept1(); if( newti >= 0 ){ log( "ͬ��: %d\n" , newti ); gs[newti].use = 1; } for(i=0;i<MAXCONNECTION;i++){ // char buf[CHARDATASIZE * 16; char buf[CHARDATASIZE]; int l; l = tcpstruct_readline_chop( i , buf , sizeof( buf )- 1); { if( !gs[i].use )continue; if( l > 0 ){ char debugfun[256]; buf[l]=0; if( saacproto_ServerDispatchMessage( i , buf, debugfun)<0){ // Nuke start tcpstruct_close(i);// avoid the shutdown the gmsv ttom log( "GMSV(%s) ��Ϣ:%s\n", gs[i].name, debugfun); } } else if( l == TCPSTRUCT_ETOOLONG ){ log( "�ܳ�:%d ��������::%s\n", i , gs[i].name ); logout_game_server( i ); } else if( l < 0 ){ log( "�ر�:%d ��������:%s\n", i , gs[i].name ); logout_game_server(i); } else if( l == 0 ){ ; } } } { static struct timeval tv_loop_store ; struct timeval now; double dif; gettimeofday( &now , NULL ); dif = time_diff( now, tv_loop_store ); if( dif > 0.5 ){ // CoolFish 0.1 -> 0.5 2001/5/19 //log( "Sl:%f" , dif ); } tv_loop_store = now; } /* �����С�������ةʧ����ëƩ���£� ����ةʧ���������շ��ë���ƻ������С�ëڽ�ƻ��������� ƥ�ء�ة�ӡ������ �ζ��巴ɧ������ */ } return 0; }
int main(int argc, char** argv) { initOpts(&Opts::opts); parseOpts(argc, argv, &Opts::opts); // Begin by setting up our usage environment: TaskScheduler* scheduler = BasicTaskScheduler::createNew(); env = BasicUsageEnvironment::createNew(*scheduler); // Create 'groupsocks' for RTP and RTCP: struct in_addr destinationAddress; destinationAddress.s_addr = chooseRandomIPv4SSMAddress(*env); // Note: This is a multicast address. If you wish instead to stream // using unicast, then you should use the "testOnDemandRTSPServer" // test program - not this test program - as a model. const unsigned short rtpPortNum = 18888; const unsigned short rtcpPortNum = rtpPortNum+1; const unsigned char ttl = 255; char socks[1000] = { 0 }; sprintf(socks, "GroupSocket: %d.%d.%d.%d:%d", (destinationAddress.s_addr >> 24) & 0xff, (destinationAddress.s_addr >> 16) & 0xff, (destinationAddress.s_addr >> 8) & 0xff, destinationAddress.s_addr & 0xff, rtpPortNum); *env << socks << "\n"; const Port rtpPort(rtpPortNum); const Port rtcpPort(rtcpPortNum); Groupsock rtpGroupsock(*env, destinationAddress, rtpPort, ttl); rtpGroupsock.multicastSendOnly(); // we're a SSM source Groupsock rtcpGroupsock(*env, destinationAddress, rtcpPort, ttl); rtcpGroupsock.multicastSendOnly(); // we're a SSM source // Create a 'H264 Video RTP' sink from the RTP 'groupsock': OutPacketBuffer::maxSize = 200000; videoSink = H264VideoRTPSink::createNew(*env, &rtpGroupsock, 96); // Create (and start) a 'RTCP instance' for this RTP sink: const unsigned estimatedSessionBandwidth = 500; // in kbps; for RTCP b/w share const unsigned maxCNAMElen = 100; unsigned char CNAME[maxCNAMElen+1]; gethostname((char*)CNAME, maxCNAMElen); CNAME[maxCNAMElen] = '\0'; // just in case RTCPInstance* rtcp = RTCPInstance::createNew(*env, &rtcpGroupsock, estimatedSessionBandwidth, CNAME, videoSink, NULL /* we're a server */, True /* we're a SSM source */); // Note: This starts RTCP running automatically RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554); if (rtspServer == NULL) { *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n"; exit(1); } ServerMediaSession* sms = ServerMediaSession::createNew(*env, "source", inputFileName, "Session streamed by \"testH264VideoStreamer\"", True /*SSM*/); sms->addSubsession(PassiveServerMediaSubsession::createNew(*videoSink, rtcp)); rtspServer->addServerMediaSession(sms); char* url = rtspServer->rtspURL(sms); *env << "Play this stream using the URL \"" << url << "\"\n"; delete[] url; // Start the streaming: *env << "Beginning streaming...\n"; play(); env->taskScheduler().doEventLoop(); // does not return return 0; // only to prevent compiler warning }