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

📄 shppprotocol.h

📁 本源码为移动公司话费查询中间件TUXEDO使用的实例
💻 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 + -