如何开发STAF的外部服务

最近在看STAF的付服务开发知识,开到如何来自定义为STAF的外部服务,把自己的东西定义为STAF的服务的好处就是你可以利用STAF自己的特点,例如它的日志服务和它良好的可扩张性,(想象有100台电脑可以执行你的服务,你不用找100个人来干这件事)。

下面就参考官方文档上说的如何开发STAF的外部服务。

1. STAF服务必须以DevirceServiceFata来定义一个结构体。

struct DeviceServiceData
{
	unsigned int  fDebugMode;              // Debug Mode flag
	STAFString    fShortName;              // Short service name
	STAFString    fName;                   // Registered service name    
	STAFHandlePtr fHandlePtr;              // Device service's STAF handle
	STAFString    fLocalMachineName;       // Local machine name
	STAFCommandParserPtr fAddParser;       // DEVICE ADD command parser
	STAFCommandParserPtr fDeleteParser;    // DEVICE DELETE command parser
	STAFCommandParserPtr fQueryParser;     // DEVICE QUERY command parser
	STAFCommandParserPtr fListParser;      // DEVICE LIST command parser
	STAFCommandParserPtr fHelpParser;      // DEVICE HELP command parser
	STAFCommandParserPtr fVersionParser;   // DEVICE VERSION command parser
	STAFCommandParserPtr fParmsParser;     // DEVIC PARMS command parser

	// Map Class Definitions for marshalled results
	STAFMapClassDefinitionPtr fListDeviceMapClass;
	STAFMapClassDefinitionPtr fQueryDeviceMapClass;

	STAFMutexSemPtr      fPrinterMapSem;   // Semaphore to control 
	//   access to the PrinterMap
	STAFMutexSemPtr      fModemMapSem;     // Semaphore to control 
	//   access to the ModemMap
	DeviceMap            fPrinterMap;      // Map of all printers
	DeviceMap            fModemMap;        // Map of all modems
};

服务结构体里面每一个STAFCommandParserPtr是为了处理发给它的请求而定义的指针。

2.所有的C++的STAF服务都必须实现下面的接口


STAFServiceGetLevelBounds  调用这个函数来说明服务支持的数据结构等级
STAFServiceConstruct             这个函数用来构造一个服务
STAFServiceInit                       用来初始化服务
STAFServiceAcceptRequest   这个函数用来让服务句柄处理一个请求
STAFServiceTerm                   这个函数用来结束一个服务
STAFServiceDestruct               这个函数用来析构一个服务

2.1 实现构造函数
STAFRC_t STAFServiceConstruct(STAFServiceHandle_t *pServiceHandle,
                              void *pServiceInfo, unsigned int infoLevel,
                              STAFString_t *pErrorBuffer)
 
STAFServiceInfoLevel30 数据结构是一个STAF内置的服务的详细信息的结构体
numOptions  unsigned int  说明在STAF.cfg里面配置服务时可以选择的选项的个数

2.2 实现初始化函数
 STAFRC_t STAFServiceInit(STAFServiceHandle_t serviceHandle,
                             void *pInitInfo, unsigned int initLevel,
                             STAFString_t *pErrorBuffer)
首先处理服务的参数
注册服务的错误代码
创造一个可以存储暂时数据的位置
创造请求的命令解析
一个C++的服务必须为它的每一个请求创造一个命令解释器
给命令解释器添加选项
确定在命令解释器上的选项的约束
确定命令解释器上的选项的依赖关系
给结果定义Map类
解决在本地机器上定义的变量
创建帮助信息
2.3 接收请求
STAFRC_t STAFServiceAcceptRequest(STAFServiceHandle_t serviceHandle,
                                      void *pRequestInfo, unsigned int reqLevel,
                                      STAFString_t *pResultBuffer)

2.4 结束服务

STAFRC_t STAFServiceTerm(STAFServiceHandle_t serviceHandle,
                             void *pTermInfo, unsigned int termLevel,
                             STAFString_t *pErrorBuffer)

2.5 对服务的析构

STAFRC_t STAFServiceDestruct(STAFServiceHandle_t *serviceHandle,
                                 void *pDestructInfo, unsigned int destructLevel,
                                 STAFString_t *pErrorBuffer)

STAF的官方文档上给出了一个STAF开发的例子,例子点击打开链接




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值