📄 warsocketengine.cpp
字号:
#include "StdAfx.h"#include "WarSocketEngine.h" // class implemented#ifndef WAR_LOG_H# include "WarLog.h"#endif#ifndef WAR_SOCKET_IO_H# include "WarSocketIo.h"#endif#ifndef WAR_ASSERT_H_INCLUDED# define WAR_ASSERT_H_INCLUDED# include <assert.h>#endif#ifndef WAR_AUTO_LOCK_H# include "WarAutoLock.h"#endif#define AUTO_LOCK WarAutoLock MyLock(mLock);/////////////////////////////// PUBLIC ///////////////////////////////////////WarSocketEngine *WarSocketEngine::mpShared; //============================= LIFECYCLE ====================================WarSocketEngine::WarSocketEngine(): mCurrSeqNumber(0),mNumSocketsInUse(0){ WarLog info_log(WARLOG_INFO, "WarSocketEngine::WarSocketEngine()"); if (mpShared == NULL) { info_log << "Initializing shared socket subsystem"; mpShared = this; } #if HAVE_WINSOCK WSADATA wsaData; if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { WarLog err_log(WARLOG_ERROR, "WarSocketEngine::WarSocketEngine()"); WarError sys_err; sys_err.Capture(); err_log << "Failed to initialize Winsock!" << sys_err << war_endl; WarThrow(sys_err, NULL); } if (IsShared()) info_log << ' ' << wsaData.szDescription << ' ' << wsaData.szSystemStatus;#endif // HAVE_WINSOCK if (IsShared()) info_log << war_endl;}// WarSocketEngineWarSocketEngine::~WarSocketEngine(){ WarLog debug_log(WARLOG_DEBUG, "WarSocketEngine::~WarSocketEngine()"); if (mpShared == this) { debug_log << "Shutting down shared socket subsystem" << war_endl; mpShared = NULL; }#if HAVE_WINSOCK ::WSACleanup();#endif}// ~WarSocketEngine//============================= OPERATORS ====================================//============================= OPERATIONS ===================================size_t WarSocketEngine::GetNumberOfCurrentSockets() throw(WarException){ WarSocketEngine& rglobal_engine = GetSharedEngine(); WarAutoLock my_lock(rglobal_engine.mLock); return rglobal_engine.mNumSocketsInUse;}void WarSocketEngine::RegisterSocket(WarSocketIo *pSocket) throw(WarException){ WarSocketEngine& rglobal_engine = GetSharedEngine(); WarAutoLock my_lock(rglobal_engine.mLock); rglobal_engine.mNumSocketsInUse++; pSocket->mSeqNumber = ++rglobal_engine.mCurrSeqNumber;}void WarSocketEngine::UnregisterSocket(WarSocketIo *pSocket) throw(WarException){ WarSocketEngine& rglobal_engine = GetSharedEngine(); WarAutoLock my_lock(rglobal_engine.mLock); assert(rglobal_engine.mNumSocketsInUse > 0); rglobal_engine.mNumSocketsInUse--;}//============================= ACCESS ===================================//============================= INQUIRY ===================================/////////////////////////////// PROTECTED ////////////////////////////////////////////////////////////////// PRIVATE ///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -