📄 shppprotocol.h
字号:
/*******************************************
* file name: SHPProtocol.h
* date: 2002.7.24
* 用途: 定义自助话打印协议SHPP
* 作者: 林游海
*******************************************/
#if !defined(_SHPPPROTOCOL_H_LINYOUHAI)
#define _SHPPPROTOCOL_H_LINYOUHAI
#include "KNString.h"
#define PACKETBUFFER 5120 //10240
enum
{
shppLookCommMethod = 0, //0000 查看命令ID说明
shppGetInfoMethod = 1, //0001 获取本机信息,获取标题\t
shppLoginMethod = 2, //0002 密码登入
shppPrintMethods = 3, //0003 打印月份1重打,0为正常
shppListMethod = 4, //0004 列出所有营业厅管理员的代号、ID和PASS
shppChangeMethod = 5, //0005 修改密码(营业厅管理员只能改自己的密码)
shppRecordMethod = 6, //0006 打印某个时间段的打印记录
shppAddPrintMethod = 7, //0007 增加一个打印机(sever admi)
shppDeletePrintMethod = 8, //0008 删除一个打印机
shppAddPosMethod = 9, //0009 增加一个营业厅
shppDeletePosMethod = 10, //0010 删除一个营业厅
shppFindPosMethod = 11, //0011 查找营业厅的ID
shppPrintFeeMethod = 12, //0012 1为欠费可打0为不能打印
shppPrintDegreeMethod = 13, //0013 限制打印次数
shppPrintEnd = 14, //0014 打印结束
shppLiveOpdata = 15, //0015 在线更新客户程序
shppFileOpdataEnd = 16, //0016 文件更新完成
shppLiveOpdataEnd = 17, //0017 在线更新完成
shppServerlife = 9999,//9999 打印结束
shppNumMethods = 18, //0016
shppIllegalMethod = 18
};
typedef UInt32 KN_SHPPMethod;
enum
{
shppOK = 0, //0000 请求处理成功
shppRegisterErr, //0001 没有注册非法的IP地址
shppPopedomErr, //0002 你没有这个权限
shppPasswordErr, //0003 密码错误
shppRequestErr, //0004 非法请求
shppParameterErr, //0005 参数出错
shppPrintErr, //0006 不能打印这月份的清单
shppNotListErr, //0007 本月没有清单
shppHaveFeeErr, //0008 你有欠费
shppVersion, //0009 版本号出错
shppLost, //0010 操作失败
shppDefaultIsPrint, //0011 默认密码是否充许打印:1为充许
shppLimitDay, //0012 今天的话单已打印!
shppSystemErr, //0013 系统忙,请稍后!
shppPrintMonthErr, //0014 密码错误你没有这个权限
shppH2ServerErr, //0015 你没有超级管理员的权限
shppPopedomErr3, //0016 营业厅管理员没有这个权限
shppPopedomErr4, //0017 用户打印你没有这个权限
shppPopedomErr5, //0018 电话号码与上次不一样你没有这个权限
shppPrintLimit , //0019 不能自定义查询你没有这个权限
shppPhoneErr, //0020 电话号码与上次不一样你没有这个权限
shppOpdataErr, //0021 在线更新错误
shppServerErr, //0022 服务器发生错误,请重新打印!
shppTryAgain, //0022
shpp9000, //0023 此号码办理了详单屏蔽业务,不能打印
shpp9001, //0024 连接营业数据库失败
shpp9002, //0024 此号码是超低端用户,不能打印
shppPasserr2,//0025 服务器获取随机密码失败,请您再试一次
shpp2pass,//
shppnoadrlist,//没有相应的中间件地址
shppnouser,
shppNotDefine //0023 功能未实现
};
typedef UInt32 KN_SHPPError;
enum
{
knVersion = 0,
knVersionOffset = 2,
knLength = 2,
knLengthOffset = 5,
knType = 7,
knTypeOffset = 4,
knTel = 11,
knTelOffset = 20,
knKeep = 31,
knKeepOffset = 8,
knSeq = 39,
knSeqOffset = 4,
knM = 43,
knMOffset = 1,
knResult = 44,
knResultOffset = 4,
knPacketSize = 48,
knPacketMinSize = 50,
};
class CSHPPProtocol
{
public:
//METHODS
// Method enumerated type definition in SFSS_SHPPProtocol.h
//获取服务类型
static UInt16 GetServerType(const LPSCHAR lpRequestHead);
//获取包体的长度
static UInt32 GetPacketLen(const LPSCHAR lpRequestHead);
//获取包体的标志位
static UInt32 GetPacketM(const LPSCHAR lpRequestHead);
static LPSCHAR GetPacketBuffer(const LPSCHAR lpRequestHead)
{return lpRequestHead + knPacketSize;}
static UInt16 GetTel(const LPSCHAR lpRequestHead,char *pTel);
// VERSIONS
enum SHPPVersion
{
k10Version = 0,
kIllegalVersion = 1
};
//版本号
static SHPPVersion GetVersion(CStrPtrLen &versionStr);
static CStrPtrLen& GetVersionString(SHPPVersion version)
{ return s_splVersionString[version]; }
static CStrPtrLen& GetErrorString(UInt16 nError)
{ return s_splErrorString[nError];}
//写包头协议
//写版本号---------2-----
// static void PutVersion(const LPSCHAR lpRequestHead);
//写包体的长度-----8-----
// static void PutPacketLen(const LPSCHAR lpRequestHead,UInt16 nPacketLen);
//写服务类型-------4-----
// static void PutServerType(const LPSCHAR lpRequestHead,UInt16 nServerType);
//写保留字---------8-----
// static void PutKeep(const LPSCHAR lpRequestHead);
//写包序-----------4-----
// static void PutSeq(const LPSCHAR lpRequestHead,UInt16 nSeq);
//写M标志位--------1-----
// static void PutM(const LPSCHAR lpRequestHead,UInt16 nPacketLen);
//写result结果状态-4-----
// static void PutResult(const LPSCHAR lpRequestHead,UInt16 nPacketLen);
//写入包体,格式定好后调用此函数
// static void PutPacket(const LPSCHAR lpRequestHead);
static char* s_pchEOL; // 指向"\r\n"
static UInt32 s_unEOLLen; // "\r\n"的长度 = 2
private:
//应答包的缓存
// char m_chPacket[PACKETBUFFER];
//包体的长度
// UInt32 m_nPacketPos;
static CStrPtrLen s_splVersionString[];
static CStrPtrLen s_splErrorString[];
};
/*
包头:
版本|<----长度8---->|<类型4>|<--保留位8---->|<包序4>|1|<结果4>|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=1| length |Type | keep |seq |M| result|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
V = 10 版本号1.0;
length 包体的长度;
Type 服务类型ID;
keep 目前为8个0;
seq 包的序号,在应答包M = 0时有效;
M 1时为最后一个包,无后续包;M = 0时为非最后一个包,有后续包;
result 结果代码;
*/
#endif //_SHPPPROTOCOL_H_LINYOUHAI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -