📄 packagebase.h
字号:
#ifndef INCLUDED_PACKAGEBASE
#define INCLUDED_PACKAGEBASE
#if defined(HAS_PRAGMA_ONCE)
#pragma PRAGMA_ONCE_DECLARE
#endif
#include "patterns/stream/stream.h"
namespace acl
{
// example package concept using by ACL
// class PackageType
// {
// public:
// 从字节流得到Package的数据
// bool fromStream(protocol::BaseStream &stream, int startPos = 0);
// 将Package编码成字节流的形式
// bool toStream(protocol::BaseStream &stream);
// 记录这个包的的连接ID
// void setConnectId(unsigned int clientId)
// 取回这个包的连接ID
// unsigned int getConnectId()
// }
//
template<typename PackageType>
class PackageBase
{
public:
PackageBase(size_t queueSize)
: m_packageQueue(queueSize)
, m_packageWithSize(false)
{
};
~PackageBase()
{
assert(m_packageQueue.GetCount() == 0);
PackageType *pkg = NULL;
while(m_packageQueue.TryGet(pkg) == 0)
{
delete pkg;
}
}
// get a package from queue
PackageType *getPackage()
{
PackageType *pkg = NULL;
m_packageQueue.Get(pkg);
return pkg;
}
// put the package into queue head directly
void putPackageAtHead(PackageType *pkg)
{
m_packageQueue.PutHead(pkg);
}
// put the package into queue tail directly
void putPackageAtTail(PackageType *pkg)
{
m_packageQueue.Put(pkg);
}
bool packageWithSize()
{
return m_packageWithSize;
}
void packageWithSize(bool withSize)
{
m_packageWithSize = withSize;
}
private:
CTQueue<PackageType *> m_packageQueue;
bool m_packageWithSize; // 包长度是否包含长度字段本身
};
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -