当前位置:文档之家› 关于服务端和客户端SDK代码及编译步骤的说明

关于服务端和客户端SDK代码及编译步骤的说明

关于服务端和客户端SDK代码及编译步骤的说明1.服务端代码结构服务器端的代码由4个Project组成,分别是:CommonClass, ServiceDemo, ServiceParam, ServiceSDK。

1.1. CommonClassCommonClass是一个通用的类库,可以被服务端和客户端SDK上层的代码使用。

只是由于编译平台的不同,类库中的类有所删节。

GenericObject:对象池模板中的对象的基类,所有用对象池管理的对象都需要使用该类作为基类;ObjectHolder<T>:对象池模板中用到的对象管理模板,用于对对象进行管理,里面存储的对象都由GenericObject类派生而来;SinglitonPoolMgr<T>:单模式的对象池模板,使用ObjectHolder<T>实现的,单态的对象池模板;PolymorphicPoolMgr<T>:多模式的对象池模板,使用ObjectHolder<T>实现的,可以出现多个对象的对象池模板;CADOObj:继承自GenericObject的数据库连接对象;CDBCPool:使用PolymorphicPoolMgr<T>生成的数据库连接池,其中PolymorphicPoolMgr<T>模板使用的数据类型是CADOObj;CDBCPoolCollection:多个CDBCPool的集合,可以显现多个数据库的连接;CframeContainer:数据帧容器,实现了传输协议的功能,数据存储等;CframeContainer的对象由CframeContainerPool实现工厂模式;CframeContainerPool:CframeContainer对象池,采用工厂模式;CframeContainer 对象都在需要时向CframeContainerPool申请,不再使用时,回收到CframeContainerPool;CpriorityFrameQueue:带有优先级排队的帧容器队列,存储的对象是CframeContainer对象,可以根据CframeContainer对象的优先级,并按照先来后到的顺序进行排队;CrecordSetParser:封装了Recordset操作的一个类;CworkerThreadPool:实现线程池的一个类;1.2. ServiceSDK使用CommonClass类,实现的服务端功能模块。

CCACenterModule:验证授权中心模块,用于对用户请求的核心业务处理程序进行授权,该模块功能尚未完整;CcommunicaitonModule:实现通信功能的模块;CcoreBusinessModule:核心业务处理模块,可以根据核心业务号返回处理函数的指针,进行二次开发时,其他的业务功能逻辑可以在该模块上扩展出来实现;CschedulingModule:调度模块;CsessionModule:会话记录模块,该模块功能尚未完成;CsocketStatus:用来记录socket通信状态的一个类,在CcommunicaitonModule中使用;Cuser:用来记录用户在线状态的一个类,是一个用户在服务端的抽象;CuserModule:在线用户管理模块,用来处理在线用户的登录等,实际上相当于Cuser 的对象池,但是功能更为复杂些;1.3. ServiceDemo是服务端开发的一个示例程序。

该程序在Debug时是一般的程序,编译为Release程序时,是标准的windows后台服务程序。

该程序只是调用了InitServiceSDKLib()和ReleaseServiceSDKLib(),实际的程序功能在ServiceSDK中实现。

1.4. ServiceParam用于生成服务器配置文件的,基于对话框的应用程序。

1.5. Project之间依赖关系1、Commonclass是基础类库;2、ServiceSDK依赖于Commonclass;3、ServiceDemo依赖于ServiceSDK和Commonclass;4、ServiceParam依赖于ServiceSDK和Commonclass;1.6. 服务端的数据流程1、用户数据从CcommunicaitonModule进入,CcommunicaitonModule向CframeContainerPool获得CframeContainer对象进行数据的接收;2、CcommunicaitonModule将接受完数据的CframeContainer对象提交给CuserModule,CuserModule会根据用户UID以及CframeContainer对象的优先级,对CframeContainer对象进行排队;3、CuserModule会决策,当前应该处理的CframeContainer对象,并将该对象提交给CschedulingModule进行任务调度;4、CschedulingModule分析CframeContainer对象,对其请求的合法性进行验证,也就是授权,该授权的功能由CCACenterModule完成;5、经过授权的CframeContainer对象请求,由CschedulingModule发起执行。

其过程是,CschedulingModule向CcoreBusinessModule 提交核心业务号,并获得核心业务处理程序的入口地址,然后向CworkerThreadPool申请一个工作者线程,最后,使用工作者线程运行核心业务处理程序;6、之后,核心业务处理程序开始运行。

一般的流程如下:如果需要对数据库进行访问,核心业务处理程序会向CDBCPoolCollection请求一个数据连接对象,并使用该对象执行SQL语句。

如果是查表的语句的话,则再使用CrecordSetParser来协助生成XML格式的处理结果。

之后,处理程序会根据功能,向请求方发送方或者其他的用户发送数据。

7、在向用户发送数据时,业务处理程序同样向CframeContainerPool获得CframeContainer对象,并将需要发送的数据装入到CframeContainer对象中;8、之后业务处理程序将数据提交给CuserModule,CuserModule会根据用户UID以及CframeContainer对象的优先级,对CframeContainer对象进行排队;9、CuserModule会决策,并调整CframeContainer对象的发送顺序;10、最后,业务处理程序会通知CuserModule一次业务请求已经完成,这样CuserModule会自动触发下一个任务的处理。

2.客户端SDK代码结构客户端SDK主要包括以下几个Project:CommonclassSD,ClientSDKSD,ClientSDKSDDll,以及ClientSDKCSPocket和ClientDemoPocketPC。

2.1. CommonclassSD基础公共类库,用到的代码基本与服务端的Commonclass一致,只是做了删节。

SD的意思是for Smart Device。

该Project使用C++开发。

2.2. ClientSDKSD为Smart Device开发的客户端SDK。

该Project使用C++开发。

主要包含以下的模块:CclientCommunicationModule:客户端通信模块;CsynchronousActionRecord:同步操作记录集,用于协助完成同步操作、访问的功能;该模块还提供一些全局函数,用于进行API操作。

2.3. ClientSDKSDDll使用commonClassSD和ClientSDKSD开发的DLL库,主要提供对客户端SDK的API操作。

这些API操作主要分为2类:1、对底层模块的操作,包括启动后台通信模块,终止通信模块等;2、对CframeContainer对象的操作,包括获得CframeContainer对像,回收CframeContainer对象,读写CframeContainer对象中的数据等;2.4. ClientSDKCSPocket使用C#开发为PocketPC开发的ClientSDK。

主要包含以下内容:1、对ClientSDK的API函数进行封装,以便在C#的环境下可以调用;2、对ClientSDK中关于CframeContainer的操作作封装,以便在C#的环境下可以调用;3、还定义了一些工具类,如ClientSDKCSPocket.RecordControl和ClientSDKCSPocket.XmlParser,分别用于处理记录集和xml文件的打包、解析。

2.5. ClientDomoPocketPC为PocketPC开发的客户端示例程序。

2.6. Projet之间的依赖关系CommonclassSD,ClientSDSDK,ClientSDKSDDll均使用C++开发:1、CommonclassSD是基础共用类库;2、ClientSDSDK依赖于Commonclass;3、ClientSDKSDDll依赖于CommonclassSD和ClientSDSDK;ClientSDKCSPocket和ClientDemoPocketPC均使用C#开发:1、ClientSDKCSPocket依赖于CommonclassSD,ClientSDSDK,ClientSDKSDDll;2、ClientDemoPocketPC依赖于CommonclassSD,ClientSDSDK,ClientSDKSDDll和ClientSDKCSPocket;2.7. 客户端SDK模块之间数据流程1、用户使用API向CframeContainerPool获得CframeContainer对象进行数据填充;2、如果用户使用同步操作,则使用ClientSDKCSPocket.ClientSDK.SynSentFrame_Dll(System.IntPtr, refSystem.IntPtr, int)进行发送,否则使用ClientSDKCSPocket.ClientSDK.SentFrame_Dll(System.IntPtr)发送;3、数据提交到发送队列,发送队列使用CpriorityFrameQueue;4、如果是同步操作,发送后的CframeContainer对象备份到CsynchronousActionRecord中;5、服务端返回的数据,进入CclientCommunicationModule,CclientCommunicationModule使用CframeContainer对象进行接收,同样,该CframeContainer对象也是从CframeContainerPool申请得到的;6、接收完的数据,进行同步操作判断,如果是同步操作,则到CsynchronousActionRecord查找响应的请求分组,并置位“事件”,通知上层用户服务器已经响应该请求;如果是异步操作,这接收的CframeContainer对象被放到接收队列中,接收队列使用CpriorityFrameQueue;7、程序员可以使用API向接收队列获得CframeContainer对象并处理;8、对CframeContainer对象的处理代码由二次开发实现。

相关主题