⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 一个Symbian平台上的serverclient模型的简单示例
💻 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 + -