当前位置: 首页>>代码示例>>C++>>正文


C++ CUtlVector::InsertAfter方法代码示例

本文整理汇总了C++中CUtlVector::InsertAfter方法的典型用法代码示例。如果您正苦于以下问题:C++ CUtlVector::InsertAfter方法的具体用法?C++ CUtlVector::InsertAfter怎么用?C++ CUtlVector::InsertAfter使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CUtlVector的用法示例。


在下文中一共展示了CUtlVector::InsertAfter方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: AdjustSuperDebugArgs

void AdjustSuperDebugArgs( CUtlVector<char*> &args )
{
    // Get the directory this exe was run out of.
    char filename[512];
    if ( GetModuleFileName( GetModuleHandle( NULL ), filename, sizeof( filename ) ) == 0 )
        return;
    
    char *pLastSlash = filename;
    char *pCurPos = filename;
    while ( *pCurPos )
    {
        if ( *pCurPos == '/' || *pCurPos == '\\' )
            pLastSlash = pCurPos;
        ++pCurPos;
    }
    *pLastSlash = 0;
    
    // In superdebug mode, run it out of c:/hl2/bin.
    const char *pBase = args[0];
    const char *pBaseCur = pBase;
    while ( *pBaseCur )
    {
        if ( *pBaseCur == '/' || *pBaseCur == '\\' || *pBaseCur == ':' )
        {
            pBase = pBaseCur+1;
            pBaseCur = pBase;
        }
        ++pBaseCur;
    }
    
    int maxLen = 64 + strlen( pBase ) + 1;
    char *pNewFilename = new char[maxLen];
    _snprintf( pNewFilename, maxLen, "%s\\%s", filename, pBase );
    delete args[0];
    args[0] = pNewFilename;


    // Now insert -allowdebug.
    const char *pAllowDebug = "-allowdebug";
    char *pToInsert = new char[ strlen( pAllowDebug ) + 1 ];
    strcpy( pToInsert, pAllowDebug );
    args.InsertAfter( 0, pToInsert );

}
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:44,代码来源:vmpi_service.cpp

示例2: HandlePacket_LOOKING_FOR_WORKERS

void HandlePacket_LOOKING_FOR_WORKERS( bf_read &buf, const CIPAddr &ipFrom )
{
    // If we're downloading files for a job request, don't process any more "looking for workers" packets.
    if ( g_Waiting_hProcess )
        return;
    
    // This will be a nonzero-length string if patching.
    char versionString[512];
    buf.ReadString( versionString, sizeof( versionString ) );

    int iPort = buf.ReadShort();
    int iPriority = buf.ReadShort();

    // Make sure we don't run the same job more than once.
    if ( !CheckJobID( buf, g_CurJobID ) )
        return;

    CUtlVector<char*> newArgv;
    GetArgsFromBuffer( buf, newArgv, &g_Waiting_bShowAppWindow );

    bool bForcePatch = false;
    if ( buf.GetNumBytesLeft() >= 1 )
        bForcePatch = (buf.ReadByte() != 0);

    int iDownloaderPort = iPort;
    if  ( buf.GetNumBytesLeft() >= 2 )
        iDownloaderPort = buf.ReadShort();

    // Add these arguments after the executable filename to tell the program
    // that it's an MPI worker and who to connect to. 
    char strDownloaderIP[128], strMainIP[128];
    V_snprintf( strDownloaderIP, sizeof( strDownloaderIP ), "%d.%d.%d.%d:%d", ipFrom.ip[0], ipFrom.ip[1], ipFrom.ip[2], ipFrom.ip[3], iDownloaderPort );
    V_snprintf( strMainIP, sizeof( strMainIP ), "%d.%d.%d.%d:%d", ipFrom.ip[0], ipFrom.ip[1], ipFrom.ip[2], ipFrom.ip[3], iPort );

    // (-mpi is already on the command line of whoever ran the app).
    // AppendArg( commandLine, sizeof( commandLine ), "-mpi" );
    newArgv.InsertAfter( 0, CopyString( "-mpi_worker" ) );
    newArgv.InsertAfter( 1, CopyString( strDownloaderIP ) );


    // If the version string is set, then this is a patch.
    bool bPatching = false;
    if ( versionString[0] != 0 )
    {
        bPatching = true;
        
        // Check that we haven't applied this patch version yet. This case usually happens right after we've applied a patch
        // and we're restarting. The vmpi_transfer master is still pinging us telling us to patch, but we don't want to
        // reapply this patch.
        if ( atof( versionString ) <= atof( g_VersionString ) && !bForcePatch )
        {
            newArgv.PurgeAndDeleteElements();
            return;
        }
        
        // Ok, it's a new version. Get rid of whatever was running before.
        KillRunningProcess( "Starting a patch..", true );
    }
                                 
    // If there's already a job running, only interrupt it if this new one has a higher priority.
    if ( WaitForProcessToExit() )
    {
        if ( iPriority > g_CurJobPriority )
        {
            KillRunningProcess( "Interrupted by a higher priority process", true );
        }
        else
        {
            // This means we're already running a job with equal to or greater priority than
            // the one that has been requested. We're going to ignore this request.
            newArgv.PurgeAndDeleteElements();
            return;
        }
    }

    // Responses go here.
    g_CurRespondAddr = ipFrom;
    
    // Also look for -mpi_ShowAppWindow in the args to the service.
    if ( !g_Waiting_bShowAppWindow && FindArg( __argc, __argv, "-mpi_ShowAppWindow" ) )
        g_Waiting_bShowAppWindow = true;

    // Copy all the files from the master and put them in our cache dir to run with.
    char cacheDir[MAX_PATH];
    if ( StartDownloadingAppFiles( newArgv, cacheDir, sizeof( cacheDir ), g_Waiting_bShowAppWindow, &g_Waiting_hProcess, bPatching ) )
    {
        // After it's downloaded, we want it to switch to the main connection port.
        if ( newArgv.Count() >= 3 && V_stricmp( newArgv[2], strDownloaderIP ) == 0 )
        {
            delete newArgv[2];
            newArgv[2] = CopyString( strMainIP );
        }
        
        g_Waiting_StartTime = Plat_FloatTime();
        g_Waiting_Argv.PurgeAndDeleteElements();
        g_Waiting_Argv = newArgv;
        g_Waiting_Priority = iPriority;
        g_Waiting_bPatching = bPatching;
        newArgv.Purge();
    }
//.........这里部分代码省略.........
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:101,代码来源:vmpi_service.cpp

示例3: StartDownloadingAppFiles

// -------------------------------------------------------------------------------- //
// Purpose: Launches vmpi_transfer.exe to download the required
// files from the master so we can launch.
//
// If successful, it sets hProcess to the process handle of the downloader.
// When that process terminates, we look for [cache dir]\ReadyToGo.txt and if it's
// there, then we start the job.
// -------------------------------------------------------------------------------- //
bool StartDownloadingAppFiles( 
    CUtlVector<char*> &newArgv, 
    char *cacheDir, 
    int cacheDirLen, 
    bool bShowAppWindow, 
    HANDLE *hProcess, 
    bool bPatching )
{
    *hProcess = NULL;
    
    V_strncpy( cacheDir, g_FileCachePath, cacheDirLen );
    
    // For now, cache dir is always the same. It's [current directory]\cache.
    if ( _access( cacheDir, 0 ) != 0 )
    {
        if ( !CreateDirectory( cacheDir, NULL ) && GetLastError() != ERROR_ALREADY_EXISTS )
        {
            Warning( "Unable to create cache directory: %s.\n", cacheDir );
            return false;
        }
    }

    // Clear all the files in the directory.
    char searchStr[MAX_PATH];
    V_ComposeFileName( cacheDir, "*.*", searchStr, sizeof( searchStr ) );
    _finddata_t findData;
    intptr_t ret = _findfirst( searchStr, &findData );
    if ( ret != -1 )
    {
        do
        {
            if ( findData.name[0] == '.' )
                continue;
            
            char fullFilename[MAX_PATH];
            V_ComposeFileName( cacheDir, findData.name, fullFilename, sizeof( fullFilename ) );
            if ( _unlink( fullFilename ) != 0 )
            {
                Warning( "_unlink( %s ) failed.\n", fullFilename );
                return false;
            }
        } while ( _findnext( ret, &findData ) == 0 );
        
        _findclose( ret );
    }

    // Change the EXE name to an absolute path to exactly where it is in the cache directory.
    int maxExeNameLen = 1024;
    char *pExeName = new char[maxExeNameLen];
    if ( bPatching )
    {
        V_ComposeFileName( cacheDir, "vmpi_service_install.exe", pExeName, maxExeNameLen );
        
        // Add args for the installer.
        newArgv.InsertAfter( 0, CopyString( "-DontTouchUI" ) );

        // When patching, we can't start the UI and the installer can't because we're running in the local system account
        // and the UI is running on the account of whoever logged in. So what we do is send a message to the UI telling it
        // to run <cacheDir>\WaitAndRestart and restart itself in N seconds.
        newArgv.InsertAfter( 0, CopyString( "-Install_Quiet" ) );
    }
    else
    {
        V_ComposeFileName( cacheDir, newArgv[0], pExeName, maxExeNameLen );
    }
        
    delete newArgv[0];
    newArgv[0] = pExeName;

    char fullExeFilename[MAX_PATH];
    V_ComposeFileName( g_BaseAppPath, "vmpi_transfer.exe", fullExeFilename, sizeof( fullExeFilename ) );
    
    CUtlVector<char*> downloaderArgs;
    downloaderArgs.AddToTail( fullExeFilename );
#if defined( _DEBUG )
    downloaderArgs.AddToTail( "-allowdebug" );
#endif
    downloaderArgs.AddToTail( "-CachePath" );		// Tell it where to download the files to.
    downloaderArgs.AddToTail( cacheDir );
    
    // Pass all the -mpi_worker, -mpi_file, -mpi_filebase args into the downloader app.
    for ( int i=1; i < (int)newArgv.Count()-1; i++ )
    {
        if ( V_stricmp( newArgv[i], "-mpi_filebase" ) == 0 || V_stricmp( newArgv[i], "-mpi_file" ) == 0 )
        {
            downloaderArgs.AddToTail( newArgv[i] );
            downloaderArgs.AddToTail( newArgv[i+1] );
            newArgv.Remove( i );
            newArgv.Remove( i );
            --i;
        }
        else if ( V_stricmp( newArgv[i], "-mpi_worker" ) == 0 )
//.........这里部分代码省略.........
开发者ID:DeadZoneLuna,项目名称:SourceEngine2007,代码行数:101,代码来源:vmpi_service.cpp


注:本文中的CUtlVector::InsertAfter方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。