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

📄 udipacketproctol.pas

📁 楠楠写的DBiocp例子都是源码
💻 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 + -