📄 udipacketproctol.pas
字号:
unit uDIPacketProctol;
interface
uses
Windows;
const
//*********** 【消息定义】 *************/
//服务器消息级别
SM_LEVEL_REALTIME =100; //实时
SM_LEVEL_HIGH =101; //高
SM_LEVEL_IMPORTANCE =102; //重要
SM_LEVEL_NORMAL =103; //正常
SM_LEVEL_LOW =104; //低
SM_LEVEL_IGNORE =105; //可忽略
//服务器端消息
SM_REMOTE_LOGIN =200; //服务器登录
SM_REMOTE_CALL =201; //服务器远程调用方法
SM_REMOTE_HEARTBEAT =202; //服务器心跳消息
SM_REMOTE_DOWNLOAD =203; //服务器下载消息
SM_REMOTE_UPLOAD =204; //服务器上传消息
SM_REMOTE_TIME =205; //服务器时间
SM_REMOTE_SEVERLIST =206; //服务器列表
//客户端消息
CM_REMOTE_LOGIN =300; //服务器登录
CM_REMOTE_CALL =301; //客户端远程调用方法
CM_REMOTE_HEARTBEAT =302; //客户端心跳消息
CM_REMOTE_DOWNLOAD =303; //客户端下载消息
CM_REMOTE_UPLOAD =304; //客户端上传消息
CM_REMOTE_TIME =305; //客户端时间
//*********** 【数据包全局定义】 *************/
type
// 统一格式: 包头 + 包体 + 业务包 + 包尾
// 包头 + 包体 + 业务包 + 数据 + 包尾
//【统一格式:数据包帧头格式】
PTDIGlobalPakHead = ^TDIGlobalPakHead;
TDIGlobalPakHead = Packed Record
bPakHead: Byte; //帧头起始符 64
sVersion: array [0..6] of char; //版本号 1.0.0.1
dPacketLen: DWORD; //数据包长度
end;
//【统一格式:数据体帧头格式】
PTDIGlobalPakBody = ^TDIGlobalPakBody;
TDIGlobalPakBody = Packed Record
bPakLEVEL: Byte; //数据包等级
bPakDirection: Byte; //数据包流向 (S->C, C->S, S->S, C->C, S->B)
bPakCmd: DWord; //业务包标识
end;
//【统一格式:数据尾帧头格式】
PTDIGlobalPakEnd = ^TDIGlobalPakEnd;
TDIGlobalPakEnd = Packed Record
bCheck: Byte; //是否检查校验和 [0,1]
dCheckSum: Word; //校验和
bPakEnd: Byte; //帧结束符
end;
const
CD_RACKET_HEAD = 64; //帧头起始符
CD_RACKET_END = 16; //帧头结束符
DL_GLOBALPAK_BODY_LEN = SizeOf(TDIGlobalPakBody); //包头
DL_GLOBALPAK_HEAD_LEN = SizeOf(TDIGlobalPakHead); //包体
DL_GLOBALPAK_END_LEN = SizeOf(TDIGlobalPakEnd); //包尾
//*********** 【数据包体(业务定义)定义】 *************/
//--------------------------【登录包】:-----------------------------
type
// C->S
//【认证】: 否
//【格式】: 包头 + 包体 + 登录包(TDIPak_CSLogin) + 包尾
//【命令标志】: SM_REMOTE_LOGIN 200
//【数据结构】: 有
PTDIPak_CSLogin = ^TDIPak_CSLogin;
TDIPak_CSLogin = Packed Record
sUserID: array [0..15] of char; //用户名
sUserPwd: array [0..20] of char; //密码
end;
// S->C
//【格式】: 包头 + 包体 + 登录包(TDIPak_SCLogin) + 包尾
//【命令标志】: CM_REMOTE_LOGIN 300
//【数据结构】: 有
PTDIPak_SCLogin = ^TDIPak_SCLogin;
TDIPak_SCLogin = Packed Record
bLogin: Byte; //登录是否成功 [0,1]
sEncrypt: array [0..35] of char; //S端返回的密钥 GUID
end;
//--------------------------【时间包】:------------------------------
// C->S
//【认证】: 否
//【格式】: 包头 + 包体(时间标识) + 包尾
//【命令标志】 SM_REMOTE_TIME =205;
//【数据结构】: 无
// S->C
//【命令标志】: CM_REMOTE_TIME =305;
//【命令格式】: 包头 + 包体(时间标识) + 时间包(TDIPak_SCTime) + 包尾
//【数据结构】: YYYY-MM-DD HH:MM:SS 长度19
PTDIPak_SCTime = ^TDIPak_SCTime;
TDIPak_SCTime = Packed Record
sTime: array [0..18] of char; //时间
end;
//--------------------------【认证包】:------------------------------
//【认证】: 否
//【格式】: 包头 + 包体 + 认证包 + 业务包 + 数据 + 包尾
// S->C 无
// C->S
//【命令标志】: 无(中间包)
//【命令格式】: 用户名+密钥
//【数据结构】:
PTDIPak_CSValidate = ^TDIPak_CSValidate;
TDIPak_CSValidate = Packed Record
sUserID: array [0..15] of char; //用户名
sEncrypt: array [0..35] of char; //S端返回的密钥 GUID
end;
//--------------------------【心跳包】:-------------------------------
//【认证】: 否
//【格式】: 包头 + 包体(含心跳标志) + 包尾
// S->C 无
// C->S
//【命令标志】: SM_REMOTE_HEARTBEAT 202
//【命令格式】: 空
//【数据结构】: 无
//--------------------------【服务器列表包】:-------------------------------
//【认证】: 否
//【格式】: 包头 + 包体(服务器列表) + 认证包 + 包尾
// S->C 无
// C->S
//【格式】: 包头 + 包体 + 服务器列表包(TDIPak_CSSeverList) + 包尾
//【命令标志】: SM_REMOTE_SEVERLIST 206
//【命令格式】: 服务器名称@服务器名称....
// 服务器状态@服务器状态....
//【限制】: 服务器名称<=15个汉字
// 服务器状态<=2个汉字 [忙,一般,空闲]
//【数据结构】:
PTDIPak_CSSeverList = ^TDIPak_CSSeverList;
TDIPak_CSSeverList = Packed Record
sSeverIPList: array [0..30*10] of char; //S端返回服务器名称列表
sSeverStateList: array [0..4*10] of char; //S端返回服务器状态列表
end;
const
DL_PAK_CSLOGIN_LEN = SizeOf(TDIPak_CSLogin); //C登录
DL_PAK_SCLOGIN_LEN = SizeOf(TDIPak_SCLogin); //S登录返回
DL_PAK_SCTIME_LEN = SizeOf(TDIPak_SCTime); //S时间返回
DL_PAK_SCVALIDATE_LEN = SizeOf(TDIPak_CSValidate); //S身份验证返回
DL_PAK_SCSERVERLIST_LEN = SizeOf(TDIPak_CSSeverList); //S服务器列表返回
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -