sltcpsessionevent.h

来自「Socketlib: 一个轻量级的C++ 封装Socket C API 网络编程」· C头文件 代码 · 共 75 行

H
75
字号
//**********************************************************************
//
// Copyright (C) 2005-2007 Zhang bao yuan(bolidezhang@gmail.com).
// All rights reserved.
//
// This copy of Socketlib is licensed to you under the terms described 
// in the LICENSE.txt file included in this distribution.
//
//**********************************************************************

#pragma once
#include "socketevent.h"
#include "sync/threadmutex.h"
#include "slext/smallobjectpool.h"

namespace SL
{

template <class TSession>
class CSLTcpSessionEvent : public CSocketEvent
{
public:
	CSLTcpSessionEvent(void)
	{
		m_sessionPool.init(1024,4,1);
	};

	virtual ~CSLTcpSessionEvent(void)
	{
		m_sessionPool.clear();
	};

	virtual bool OnAccept(CSocketSource *pSource, SOCKET hClientSocket)
	{
		return true;
	};

	virtual bool OnInitSocket(PPER_HANDLE_DATA pSocketData)
	{
		TSession *p = m_sessionPool.pop();
		if (p == NULL)
			return false;

		p->Init(pSocketData->pSocketSource,pSocketData->hSocket, 1024, 4);
		pSocketData->pAttachInfo = p;
		return true;
	};

	virtual bool OnDisconnect(CSocketSource *pSource, SOCKET hClientSocket, void *pAttachInfo)
	{
		if (pAttachInfo == NULL)
			return false;

		TSession *p = (TSession*)pAttachInfo;
		p->Uninit(); //清理
		m_sessionPool.push(p);
		return true;
	};

	virtual int OnRecv(CSocketSource *pSource, SOCKET hClientSocket, void *pAttachInfo, const char *szData, int nLen)
	{
		if (pAttachInfo == NULL)
			return 0;

		TSession *p = (TSession*)pAttachInfo;
		return p->OnRecv(szData, nLen);
	};

protected:
	SLEXT::CSmallObjectPool<TSession,SYNC::CThreadMutex> m_sessionPool;

};

};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?