📄 server.cpp
字号:
//
// Server.cpp
//
#include "sserv.h"
#include "SmallServSession.h"
#include "SocketListener.h"
#include "http.h"
// CSmallServServer implementation
CSmallServServer* CSmallServServer::NewLC()
{
CSmallServServer* object = new (ELeave) CSmallServServer();
CleanupStack::PushL(object);
object->ConstructL();
return object;
}
CSmallServServer::CSmallServServer()
: CServer(CActive::EPriorityStandard, CServer::ESharableSessions)
{
}
CSmallServServer::~CSmallServServer()
{
iRequests.Close();
iListeners.Close();
delete iShutdown;
}
void CSmallServServer::ConstructL()
{
iShutdown = new (ELeave) CShutdown();
iShutdown->ConstructL();
iShutdown->Start();
}
// Create a new server session.
CSharableSession* CSmallServServer::NewSessionL(const TVersion& aVersion) const
{
// check we're the right version
TVersion v(KPGPServMajorVersionNumber, KPGPServMinorVersionNumber, KPGPServBuildVersionNumber);
if (!User::QueryVersionSupported(v, aVersion))
{
User::Leave(KErrNotSupported);
}
// make new session
return CSmallServSession::NewL(*this);
}
void CSmallServServer::IncrementSessions()
{
iSessionCount++;
iShutdown->Cancel();
}
void CSmallServServer::DecrementSessions()
{
iSessionCount--;
if (iSessionCount > 0)
{
return;
}
iShutdown->Start();
}
void CSmallServServer::AddListener(CSocketListener& aListener)
{
iListeners.InsertInAddressOrder(&aListener);
IncrementSessions();
}
void CSmallServServer::AddRequest(CHTTPProtocol& aListener)
{
iRequests.InsertInAddressOrder(&aListener);
IncrementSessions();
}
void CSmallServServer::CancelAllItems()
{
TInt i;
for (i = 0; i < iRequests.Count(); ++i)
{
CHTTPProtocol* request = iRequests[i];
request->Cancel();
delete request;
DecrementSessions();
}
iRequests.Reset();
for (i = 0; i < iListeners.Count(); ++i)
{
CSocketListener* listener = iListeners[i];
listener->Cancel();
delete listener;
DecrementSessions();
}
iListeners.Reset();
}
CSmallServServer::CShutdown::CShutdown()
: CTimer(CActive::EPriorityStandard)
{
CActiveScheduler::Add(this);
}
void CSmallServServer::CShutdown::ConstructL()
{
CTimer::ConstructL();
}
void CSmallServServer::CShutdown::Start()
{
Cancel();
After(KTwoSecondTimeout);
}
void CSmallServServer::CShutdown::RunL()
{
CActiveScheduler::Stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -