1. 概述
TransmissionInterface
类定义了一个抽象接口,用于实现网络数据的异步传输,包括加密、解密及压缩功能。此设计旨在为不同的传输协议提供统一的操作接口。
2. 数据结构定义
该接口提供了多个方法,以支持数据的发送和接收,并实现必要的加密和压缩功能。
#pragma once
#include "Protocal.h"
#include <memory>
#include <string>
class TransmissionInterface
{
public:
enum EncrptyType
{
NO_ENC = 0,
RC4_ENC,
AES_ENC,
};
// 通过传输数据接口发送数据 pHeader 由调用者自己创建,方法中会复制
virtual void WriteDataAsync(Protocal::Header* pHeader,
const char* pData,
size_t dataSize,
EncrptyType encType = RC4_ENC,
bool bIgnoreHeader = false) = 0;
// 通过Header从传输对象中得到数据体 返回的string对象只能用不能改
virtual const std::string & GetReadDataBody(Protocal::Header *pHeader, EncrptyType encType = RC4_ENC) = 0;
// 工具方法,压缩解压缩 加解密方法,返回的string对象动态创建,必须使用 ReleaseString 去释放
virtual const std::string * CompressAndAesEncrypt(const char *pData, const size_t dataSize) = 0;
virtual const std::string * AesDecryptAndUncompress(const char *pData, const size_t dataSize) = 0;
virtual const std::string * CompressAndRc4Encrypt(const char *pData, const size_t dataSize) = 0;
virtual const std::string * Rc4DecryptAndUncompress(const char *pData, const size_t dataSize) = 0;
virtual void ReleaseString(const std::string *pString) = 0;
virtual std::string GetAddress() { return ""; }
virtual unsigned int GetPort() { return 0; }
};
3. 方法说明
-
WriteDataAsync:
- 通过传输接口异步发送数据。
pHeader
:调用者创建的协议头指针。pData
:要发送的数据。dataSize
:数据大小。encType
:加密类型,默认为RC4_ENC
。bIgnoreHeader
:是否忽略头部信息。
-
GetReadDataBody:
- 从传输对象中获取数据体,返回的字符串对象只读。
pHeader
:协议头指针。encType
:加密类型,默认为RC4_ENC
。
-
CompressAndAesEncrypt:
- 压缩并使用 AES 加密数据,返回动态创建的字符串对象。
-
AesDecryptAndUncompress:
- 使用 AES 解密并解压缩数据,返回动态创建的字符串对象。
-
CompressAndRc4Encrypt:
- 压缩并使用 RC4 加密数据,返回动态创建的字符串对象。
-
Rc4DecryptAndUncompress:
- 使用 RC4 解密并解压缩数据,返回动态创建的字符串对象。
-
ReleaseString:
- 释放动态创建的字符串对象。
-
GetAddress:
- 获取传输对象的地址,默认返回空字符串。
-
GetPort:
- 获取传输对象的端口,默认返回0。
4. 总结
TransmissionInterface
提供了一个灵活的框架,以支持不同协议下的数据传输、加密和解密。通过此接口,开发者可以方便地实现不同的传输层逻辑,同时保证代码的可扩展性和可维护性。