本文整理汇总了C++中EXC_TRY函数的典型用法代码示例。如果您正苦于以下问题:C++ EXC_TRY函数的具体用法?C++ EXC_TRY怎么用?C++ EXC_TRY使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了EXC_TRY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ADDTOCALLSTACK
bool CSector::r_LoadVal( CScript &s )
{
ADDTOCALLSTACK("CSector::r_LoadVal");
EXC_TRY("LoadVal");
switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, CountOf( sm_szLoadKeys )-1 ))
{
case SC_COLDCHANCE:
SetWeatherChance( false, s.HasArgs() ? s.GetArgVal() : -1 );
return true;
case SC_FLAGS:
m_dwFlags = s.GetArgVal();
return true;
case SC_LIGHT:
if ( g_Cfg.m_bAllowLightOverride )
SetLight( (s.HasArgs()) ? s.GetArgVal() : -1 );
else
g_Log.EventWarn("AllowLightOverride flag is disabled in sphere.ini, so sector's LIGHT property wasn't set\n");
return true;
case SC_RAINCHANCE:
SetWeatherChance( true, s.HasArgs() ? s.GetArgVal() : -1 );
return true;
case SC_SEASON:
SetSeason(s.HasArgs() ? static_cast<SEASON_TYPE>(s.GetArgVal()) : SEASON_Summer);
return (true);
case SC_WEATHER:
SetWeather(s.HasArgs() ? static_cast<WEATHER_TYPE>(s.GetArgVal()) : WEATHER_DRY);
return true;
}
EXC_CATCH;
EXC_DEBUG_START;
EXC_ADD_SCRIPT;
EXC_DEBUG_END;
return false;
}
示例2: ADDTOCALLSTACK
bool CWebPageDef::r_LoadVal( CScript & s ) // Load an item Script
{
ADDTOCALLSTACK("CWebPageDef::r_LoadVal");
EXC_TRY("LoadVal");
switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ))
{
case WC_PLEVEL:
m_privlevel = static_cast<PLEVEL_TYPE>(s.GetArgVal());
break;
case WC_WEBPAGEFILE:
m_sDstFilePath = s.GetArgStr();
break;
case WC_WEBPAGELOG:
m_iUpdateLog = s.GetArgVal();
break;
case WC_WEBPAGESRC:
return SetSourceFile( s.GetArgStr(), NULL );
case WC_WEBPAGEUPDATE: // (seconds)
m_iUpdatePeriod = s.GetArgVal() * TICK_PER_SEC;
if ( m_iUpdatePeriod && m_type == WEBPAGE_TEXT )
{
m_type = WEBPAGE_TEMPLATE;
}
break;
default:
return( CScriptObj::r_LoadVal( s ));
}
return true;
EXC_CATCH;
EXC_DEBUG_START;
EXC_ADD_SCRIPT;
EXC_DEBUG_END;
return false;
}
示例3: ADDTOCALLSTACK
bool CSector::r_LoadVal( CScript &s )
{
ADDTOCALLSTACK("CSector::r_LoadVal");
EXC_TRY("LoadVal");
switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ))
{
case SC_COLDCHANCE:
SetWeatherChance( false, s.HasArgs() ? s.GetArgVal() : -1 );
return( true );
case SC_FLAGS:
m_dwFlags = s.GetArgVal();
return true;
case SC_LIGHT:
if ( g_Cfg.m_bAllowLightOverride )
m_Env.m_Light = static_cast<unsigned char>(s.GetArgVal() | LIGHT_OVERRIDE);
return true;
case SC_RAINCHANCE:
SetWeatherChance( true, s.HasArgs() ? s.GetArgVal() : -1 );
return( true );
case SC_SEASON:
SetSeason(s.HasArgs() ? static_cast<SEASON_TYPE>(s.GetArgVal()) : SEASON_Summer);
return (true);
case SC_WEATHER:
SetWeather(s.HasArgs() ? static_cast<WEATHER_TYPE>(s.GetArgVal()) : WEATHER_DRY);
return( true );
}
EXC_CATCH;
EXC_DEBUG_START;
EXC_ADD_SCRIPT;
EXC_DEBUG_END;
return false;
}
示例4: EXC_TRY
bool CScriptTriggerArgs::r_Verb( CScript & s, CTextConsole * pSrc )
{
int index;
LPCTSTR pszKey = s.GetKey();
LPCTSTR pszArgs = s.GetArgStr();
LOCKDATA;
EXC_TRY(("r_Verb('%s %s',%x)", pszKey, pszArgs, pSrc));
if ( !strnicmp( "LOCAL.", pszKey, 6 ) )
{
bool fQuoted = false;
m_VarsLocal.SetStr( s.GetKey()+6, fQuoted, s.GetArgStr( &fQuoted ), false );
return( true );
}
index = FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF(sm_szLoadKeys)-1 );
switch (index)
{
case AGC_N:
case AGC_N1:
m_iN1 = s.GetArgVal();
return true;
case AGC_N2:
m_iN2 = s.GetArgVal();
return true;
case AGC_N3:
m_iN3 = s.GetArgVal();
return true;
case AGC_S:
Init( s.GetArgStr() );
return true;
}
EXC_CATCH("CScriptTriggerArgs");
return false;
}
示例5: ADDTOCALLSTACK
bool CItemSpawn::r_WriteVal(LPCTSTR pszKey, CGString & sVal, CTextConsole *pSrc)
{
ADDTOCALLSTACK("CitemSpawn:r_WriteVal");
EXC_TRY("WriteVal");
if (!strnicmp(pszKey, "amount", 6))
{
sVal.FormatVal(GetAmount());
return true;
}
else if ( !strnicmp(pszKey, "at.", 3) )
{
pszKey += 3;
int objIndex = Exp_GetVal(pszKey);
if ( m_obj[objIndex].ItemFind() )
return m_obj[objIndex].ItemFind()->r_WriteVal(pszKey, sVal, pSrc);
else if ( m_obj[objIndex].CharFind() )
return m_obj[objIndex].CharFind()->r_WriteVal(pszKey, sVal, pSrc);
return true;
}
else if ( !strnicmp(pszKey, "count", 5) )
{
sVal.FormatVal(GetCount());
return true;
}
EXC_CATCH;
return CItem::r_WriteVal(pszKey, sVal, pSrc);
}
示例6: EXC_TRY
bool CItemMessage::r_Verb( CScript & s, CTextConsole * pSrc )
{
LOCKDATA;
EXC_TRY(("r_Verb('%s %s',%x)", s.GetKey(), s.GetArgStr(), pSrc));
ASSERT(pSrc);
if ( s.IsKey( sm_szVerbKeys[0] ))
{
// 1 based pages.
int iPage = ( s.GetArgStr()[0] && toupper( s.GetArgStr()[0] ) != 'A' ) ? s.GetArgVal() : 0;
if ( ! iPage )
{
m_sBodyLines.RemoveAll();
return( true );
}
else if ( iPage <= m_sBodyLines.GetCount())
{
m_sBodyLines.RemoveAt( iPage-1 );
return( true );
}
}
if ( s.IsKeyHead( "PAGE", 4 ))
{
SetPageText( atoi( s.GetKey() + 4 )-1, s.GetArgStr());
return( true );
}
return CItemVendable::r_Verb(s, pSrc);
EXC_CATCH("CItemMessage");
return false;
}
示例7: ADDTOCALLSTACK
void CPathFinder::FillMap()
{
ADDTOCALLSTACK("CPathFinder::FillMap");
CRegionBase *pArea;
CPointMap pt, ptChar;
EXC_TRY("FillMap");
pt = ptChar = m_pChar->GetTopPoint();
for ( int x = 0 ; x != PATH_SIZE; ++x )
{
for ( int y = 0; y != PATH_SIZE; ++y )
{
if (x == m_Target.m_x && y == m_Target.m_y)
{
// always assume that our target position is walkable
m_Points[x][y].m_Walkable = PATH_WALKABLE;
}
else
{
pt.m_x = static_cast<signed short>(x) + m_RealX;
pt.m_y = static_cast<signed short>(y) + m_RealY;
pArea = m_pChar->CanMoveWalkTo(pt, true, true, DIR_QTY, true);
m_Points[x][y].m_Walkable = pArea ? PATH_WALKABLE : PATH_UNWALKABLE;
}
m_Points[x][y].Set(static_cast<WORD>(x), static_cast<WORD>(y), pt.m_z, pt.m_map);
}
}
EXC_CATCH;
}
示例8: ADDTOCALLSTACK
bool CRegionWorld::r_Verb( CScript & s, CTextConsole * pSrc ) // Execute command from script
{
ADDTOCALLSTACK("CRegionWorld::r_Verb");
EXC_TRY("Verb");
/*LPCTSTR pszKey = s.GetKey();
if ( !strnicmp(pszKey, "CLEARTAGS", 9) )
{
pszKey = s.GetArgStr();
SKIP_SEPARATORS(pszKey);
m_TagDefs.ClearKeys(pszKey);
return true;
}
int index = FindTableSorted(pszKey, sm_szVerbKeys, COUNTOF(sm_szVerbKeys) - 1);
if ( index < 0 )*/
return CRegionBase::r_Verb(s, pSrc);
/*switch( static_cast<RWV_TYPE>(index) )
{
case RWV_TAGLIST:
m_TagDefs.DumpKeys(pSrc, "TAG.");
return true;
default:
return false;
}
return true;*/
EXC_CATCH;
EXC_DEBUG_START;
g_Log.EventDebug("command '%s' args '%s' [%p]\n", s.GetKey(), s.GetArgRaw(), static_cast<void *>(pSrc));
EXC_DEBUG_END;
return false;
}
示例9: ADDTOCALLSTACK
bool CRegionResourceDef::r_LoadVal( CScript & s )
{
ADDTOCALLSTACK("CRegionResourceDef::r_LoadVal");
EXC_TRY("LoadVal");
// RES_REGIONRESOURCE
switch ( FindTableSorted( s.GetKey(), sm_szLoadKeys, COUNTOF( sm_szLoadKeys )-1 ))
{
case RMC_AMOUNT: // AMOUNT
m_Amount.Load( s.GetArgRaw() );
break;
case RMC_DEFNAME: // "DEFNAME",
return SetResourceName( s.GetArgStr());
case RMC_REAP: // "REAP",
m_ReapItem = static_cast<ITEMID_TYPE>(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, s.GetArgStr()));
break;
case RMC_REAPAMOUNT:
m_ReapAmount.Load( s.GetArgRaw() );
break;
case RMC_REGEN: // TICK_PER_SEC once found how long to regen this type.
m_iRegenerateTime.Load( s.GetArgRaw() );
break;
case RMC_SKILL:
m_Skill.Load( s.GetArgRaw() );
break;
default:
return( CResourceDef::r_LoadVal( s ));
}
return true;
EXC_CATCH;
EXC_DEBUG_START;
EXC_ADD_SCRIPT;
EXC_DEBUG_END;
return false;
}
示例10: ADDTOCALLSTACK
void CCharPlayer::r_WriteChar( CChar * pChar, CScript & s )
{
ADDTOCALLSTACK("CCharPlayer::r_WriteChar");
UNREFERENCED_PARAMETER(pChar);
EXC_TRY("r_WriteChar");
s.WriteKey("ACCOUNT", GetAccount()->GetName());
if ( m_wDeaths )
s.WriteKeyVal( "DEATHS", m_wDeaths );
if ( m_wMurders )
s.WriteKeyVal( "KILLS", m_wMurders );
if ( GetSkillClass()->GetResourceID().GetResIndex() )
s.WriteKey( "SKILLCLASS", GetSkillClass()->GetResourceName());
if ( m_pflag )
s.WriteKeyVal( "PFLAG", m_pflag );
if ( m_speedMode )
s.WriteKeyVal("SPEEDMODE", m_speedMode);
if (( GetAccount()->GetResDisp() >= RDS_KR ) && m_bKrToolbarEnabled )
s.WriteKeyVal("KRTOOLBARSTATUS", m_bKrToolbarEnabled);
EXC_SET("saving dynamic speech");
if ( m_Speech.GetCount() > 0 )
{
CGString sVal;
m_Speech.WriteResourceRefList( sVal );
s.WriteKey("DSPEECH", sVal);
}
EXC_SET("saving profile");
if ( ! m_sProfile.IsEmpty())
{
TCHAR szLine[SCRIPT_MAX_LINE_LEN-16];
Str_MakeUnFiltered( szLine, m_sProfile, sizeof(szLine));
s.WriteKey( "PROFILE", szLine );
}
EXC_SET("saving stats locks");
for ( int x = 0; x < STAT_BASE_QTY; x++) // Don't write all lock states!
{
if ( ! m_StatLock[x] )
continue;
TCHAR szTemp[128];
sprintf( szTemp, "StatLock[%d]", x ); // smaller storage space.
s.WriteKeyVal( szTemp, m_StatLock[x] );
}
EXC_SET("saving skill locks");
for ( size_t j = 0; j < g_Cfg.m_iMaxSkill; j++ ) // Don't write all lock states!
{
ASSERT(j < COUNTOF(m_SkillLock));
if ( ! m_SkillLock[j] )
continue;
TCHAR szTemp[128];
sprintf( szTemp, "SkillLock[%" FMTSIZE_T "]", j ); // smaller storage space.
s.WriteKeyVal( szTemp, m_SkillLock[j] );
}
EXC_CATCH;
}
示例11: ADDTOCALLSTACK
bool CContainer::r_WriteValContainer(LPCTSTR pszKey, CGString & sVal, CTextConsole *pSrc)
{
ADDTOCALLSTACK("CContainer::r_WriteValContainer");
EXC_TRY("WriteVal");
static LPCTSTR const sm_szParams[] =
{
"count",
"fcount",
"rescount",
"restest"
};
int i = FindTableHeadSorted(pszKey, sm_szParams, COUNTOF(sm_szParams));
if ( i < 0 )
return false;
LPCTSTR pKey = pszKey + strlen(sm_szParams[i]);
SKIP_SEPARATORS(pKey);
switch ( i )
{
case 0: // count
{
int iTotal = 0;
for ( CItem* pItem = GetContentHead(); pItem != NULL; pItem = pItem->GetNext() )
iTotal++;
sVal.FormatVal(iTotal);
} break;
case 1: // fcount
sVal.FormatVal(ContentCountAll());
break;
case 2: // rescount
sVal.FormatVal(*pKey ? ContentCount(g_Cfg.ResourceGetID(RES_ITEMDEF, pKey)) : GetCount());
break;
case 3: // restest
{
CResourceQtyArray Resources;
sVal.FormatVal(Resources.Load(pKey) ? ResourceConsume(&Resources, 1, true) : 0);
} break;
default:
return false;
}
return true;
EXC_CATCH;
EXC_DEBUG_START;
EXC_ADD_KEYRET(pSrc);
EXC_DEBUG_END;
return false;
}
示例12: ADDTOCALLSTACK
bool CClient::addRelay( const CServerDef * pServ )
{
ADDTOCALLSTACK("CClient::addRelay");
EXC_TRY("addRelay");
// Tell the client to play on this server.
if ( !pServ )
return false;
CSocketAddressIP ipAddr = pServ->m_ip;
if ( ipAddr.IsLocalAddr()) // local server address not yet filled in.
{
ipAddr = m_net->m_socket.GetSockName();
DEBUG_MSG(( "%x:Login_Relay to %s\n", GetSocketID(), ipAddr.GetAddrStr() ));
}
if ( GetPeer().IsLocalAddr() || GetPeer().IsSameIP( ipAddr )) // weird problem with client relaying back to self.
{
DEBUG_MSG(( "%x:Login_Relay loopback to server %s\n", GetSocketID(), ipAddr.GetAddrStr() ));
ipAddr.SetAddrIP( SOCKET_LOCAL_ADDRESS );
}
EXC_SET("customer id");
dword dwAddr = ipAddr.GetAddrIP();
dword dwCustomerId = 0x7f000001;
if ( g_Cfg.m_fUseAuthID )
{
CSString sCustomerID(pServ->GetName());
sCustomerID.Add(GetAccount()->GetName());
dwCustomerId = z_crc32(0L, Z_NULL, 0);
dwCustomerId = z_crc32(dwCustomerId, reinterpret_cast<const z_Bytef *>(sCustomerID.GetPtr()), (z_uInt)sCustomerID.GetLength());
GetAccount()->m_TagDefs.SetNum("customerid", dwCustomerId);
}
DEBUG_MSG(( "%x:Login_Relay to server %s with AuthId %u\n", GetSocketID(), ipAddr.GetAddrStr(), dwCustomerId ));
EXC_SET("server relay packet");
new PacketServerRelay(this, dwAddr, pServ->m_ip.GetPort(), dwCustomerId);
m_Targ_Mode = CLIMODE_SETUP_RELAY;
return true;
EXC_CATCH;
EXC_DEBUG_START;
g_Log.EventDebug("account '%s'\n", GetAccount() ? GetAccount()->GetName() : "");
EXC_DEBUG_END;
return false;
}
示例13: ADDTOCALLSTACK
bool CScript::FindNextSection()
{
ADDTOCALLSTACK("CScript::FindNextSection");
EXC_TRY("FindNextSection");
// RETURN: false = EOF.
if ( m_fSectionHead ) // we have read a section already., (not at the start)
{
// Start from the previous line. It was the line that ended the last read.
m_pszKey = GetKeyBuffer();
ASSERT(m_pszKey);
m_fSectionHead = false;
if ( m_pszKey[0] == '[' )
goto foundit;
}
for (;;)
{
if ( !ReadTextLine(true) )
{
m_lSectionData = GetPosition();
return( false );
}
if ( m_pszKey[0] == '[' )
break;
}
foundit:
// Parse up the section name.
m_pszKey++;
size_t len = strlen( m_pszKey );
for ( size_t i = 0; i < len; i++ )
{
if ( m_pszKey[i] == ']' )
{
m_pszKey[i] = '\0';
break;
}
}
m_lSectionData = GetPosition();
if ( IsSectionType( "EOF" ))
return( false );
Str_Parse( m_pszKey, &m_pszArg );
return true;
EXC_CATCH;
return false;
}
示例14: Sphere_MainMonitorLoop
static void Sphere_MainMonitorLoop()
{
const char *m_sClassName = "Sphere";
// Just make sure the main loop is alive every so often.
// This should be the parent thread. try to restart it if it is not.
while ( ! g_Serv.m_iExitFlag )
{
EXC_TRY("MainMonitorLoop");
if ( g_Cfg.m_iFreezeRestartTime <= 0 )
{
DEBUG_ERR(("Freeze Restart Time cannot be cleared at run time\n"));
g_Cfg.m_iFreezeRestartTime = 10;
}
EXC_SET("Sleep");
// only sleep 1 second at a time, to avoid getting stuck here when closing
// down with large m_iFreezeRestartTime values set
for (int i = 0; i < g_Cfg.m_iFreezeRestartTime; ++i)
{
if ( g_Serv.m_iExitFlag )
break;
#ifdef _WIN32
NTWindow_OnTick(1000);
#else
Sleep(1000);
#endif
}
EXC_SET("Checks");
// Don't look for freezing when doing certain things.
if ( g_Serv.IsLoading() || ! g_Cfg.m_fSecure || g_Serv.IsValidBusy() )
continue;
EXC_SET("Check Stuck");
#ifndef _DEBUG
if (g_Main.checkStuck() == true)
g_Log.Event(LOGL_CRIT, "'%s' thread hang, restarting...\n", g_Main.getName());
#endif
EXC_CATCH;
EXC_DEBUG_START;
EXC_DEBUG_END;
}
}
示例15: Sphere_OnTick
int Sphere_OnTick()
{
// Give the world (CMainTask) a single tick. RETURN: 0 = everything is fine.
const char *m_sClassName = "Sphere";
EXC_TRY("Tick");
#ifdef _WIN32
EXC_SET("service");
g_Service.OnTick();
#endif
EXC_SET("ships_tick");
g_Serv.ShipTimers_Tick();
EXC_SET("world");
g_World.OnTick();
// process incoming data
EXC_SET("network-in");
#ifndef _MTNETWORK
g_NetworkIn.tick();
#else
g_NetworkManager.processAllInput();
#endif
EXC_SET("server");
g_Serv.OnTick();
// push outgoing data
#ifndef _MTNETWORK
if (g_NetworkOut.isActive() == false)
{
EXC_SET("network-out");
g_NetworkOut.tick();
}
#else
EXC_SET("network-tick");
g_NetworkManager.tick();
EXC_SET("network-out");
g_NetworkManager.processAllOutput();
#endif
EXC_CATCH;
EXC_DEBUG_START;
EXC_DEBUG_END;
return g_Serv.m_iExitFlag;
}