收藏 分销(赏)

接口文档(范例).doc

上传人:xrp****65 文档编号:8752382 上传时间:2025-03-01 格式:DOC 页数:45 大小:1.90MB
下载 相关 举报
接口文档(范例).doc_第1页
第1页 / 共45页
接口文档(范例).doc_第2页
第2页 / 共45页
点击查看更多>>
资源描述
接口详细设计说明书 接口详细设计文档 作者:唐为(为哥) 审核:赵锟 日期:2005-5-27 接口详细设计文档 1 1 编写目的 3 2 名词解释 3 3 组件分布图 4 4 程序结构 5 4.1 接入处理线程类图 5 4.2 接收线程类图 6 4.3 启动控制图 6 5 程序设计说明 7 5.1 对原系统的改动 7 5.2 ThreadInSvcProcessor 接入处理器 8 5.2.1 类图 8 5.2.2 时序图 9 5.2.3 流程图 9 5.2.4 ThreadInSvcProcessor类说明 11 5.3 PatternNewSyncAsyncInnerDir 同异步向内处理模式 16 5.3.1 类图 16 5.3.2 描述 17 5.3.3 流程图 17 5.3.4 类说明 19 5.4 ThreadReplySvcProcessor 异步应答返回处理器 24 5.4.1 类图 24 5.4.2 类说明 24 5.5 ClientInfo 客户端连接数据 33 5.5.1 类图 33 5.5.2 类描述 33 5.6 ClientInfoTable 客户端连接数据表 34 5.6.1 类图 34 5.6.2 类描述 34 5.7 ClientInfoTableMonitor 客户端连接数据表监控程序 38 5.7.1 类图 38 5.7.2 类说明 38 5.8 FrontMain 主控程序 40 5.8.1 类间关系 40 5.8.2 流程图 41 5.8.3 类说明 42 5.9 问题 44 1 编写目的 预期读者: 对接口行为和目的有一定了解的人 背景说明 n 软件系统名称:接口前端接入服务器 n 描述 <接口> 接收不同商家的接入,接收数据转发给主机服务器,并同步/异步将返回数据发给接入商家的行为 2 名词解释 n ChannelBase 渠道,通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式 目前有TCP短连接接入, 从ACE Message_Queue中读取(IPC MessageQueue-> ACE_Message_Queue) n Trade* trade 商家对象,代表的其实是针对该商家处理方法的集合将接入数据的商家称为服务商家而将请求面向的商家称为主机商家,主机商家负责同步/异步返回交易的应答数据给接口平台 n 而接口(数据交换)平台是在两者之间的交换平台 n 渠道工厂:把接入数据的渠道工厂统一定为服务渠道工厂,发送数据的渠道工厂统一定为主机通道工厂 服务商家 接口平台 主机商家 查不到,丢弃 返回应答线程组 ATM接入服务器 ATM连接队列 TCP渠道 IPC消息队列渠道 commserver IPC消息队列 注 各种服务渠道和主机通道抽象类都是相同的基类ChannelBase,只是作用不同 渠道工厂 生成各种渠道 IPC消息队列 commserver 银联 接入服务渠道抽象 代表各种接入服务渠道 接出服务渠道抽象 TCP渠道 IPC消息队列渠道 发送请求线程组 后台服务器 连接监视器 IPC消息队列 通知清除超时间 连接记录表 接收线程 接收IPC消息 总控 接入主机通道抽象 IPC消息队列渠道 3 组件分布图 ATM 4 程序结构 4.1 接入处理线程类图 PatternNewSyncAsyncInnerDir 是ProcessPattern的一个子类,实现发送主机服务器并判断同/异步返回 同步直接返回给接入商家 异步只做相应记录 ProcessPattern 是后续处理的全部流程 抽象类 子类实现对应不同流程 ThreadInSvcProcessor是接入处理线程的主流程 收数,接包无误后将处理控制权交给ProcessPattern 4.2 接收线程类图 4.3 启动控制图 5 程序设计说明 5.1 对原系统的改动 n 改变原有商家Trade类,不存放渠道对象在商家类中,商家类只执行商家处理,不负责渠道的管理 n 改动原有的系统中所有模式的处理,模式处理必须对渠道的释放负责 n 修改MidHstChannel,添加后台服务需要的2个FML字段,这两个字段是: FML域名 描述 S_INTERF_NO 接口标识号,整数。系统中接收异步响应程序的唯一编号。用于标识请求的来源,异步应答根据这个号码分发给具体的接口程序。 S_TX_CTRL_ATTR 交易控制属性,字符串。接口都填0,表示这是正常的交易请求。 5.2 ThreadInSvcProcessor 接入处理器 5.2.1 类图 5.2.2 时序图 预先说明: n ChannelBase 渠道通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式。目前有 TCP短连接接入。从ACE Message_Queue中读取(IPC MessageQueue-> ACE_Message_Queue) n Trade* trade 商家:代表的其实是针对该商家处理方法的集合 5.2.3 流程图 服务商家 商家渠道工厂 GetChannel 商家通过渠道收取数据 商家的输入处理 渠道没取到 退出? 超时? 安全出错? 请求:执行安全出错模式PatternErrorSyncInner 处理模式 请求/应答 Yes No 执行识别出的模式处理 Yes 同异步模式PatternNewSyncASyncInnerDir PatternASyncInnerDir 应答 丢弃 5.2.4 ThreadInSvcProcessor类说明 5.2.4.1 功能 收取用不同渠道接入的外部商家的请求识别,解包执行处理的模式具体的流程在模式中控制,并不做控制 模式可能有3种: 1. 无返回:发送后台,不接收应答对应模式PatternASyncInnerDir,需要修改原来的相关程序,在本文档中并不涉及 2. 有返回,根据返回的应答判断是同步返回还是异步返回如果接收的应答表明是同步返回,按正常模式返回如果接收的应答表明是异步返回,按异步模式处理对应模式PatternNewSyncASyncInnerDirThreadInSvcProcessor后续的ProcessPattern 应该是PatternNewSyncASyncInnerDir.ThreadInSvcProcessor只负责接入后调用模式,并处理异常情况 3. 安全异常情况的模式下,调用模式PatternErrorSyncInner来处理,必须限制: 主要的改动是渠道的释放由模式来管理涉及模式有 PatternASyncInnerDir , PatternNewSyncASyncInnerDir , PatternErrorSyncInner (可能不全面) 5.2.4.2 程序描述 ThreadInSvcProcessor ThreadInSvcProcessor(Trade* ptrade , SvcChannelFactory* pfactory, bool*_bexit) 功能: 构造函数 性能: 输人项: Trade* trade 接入数据处理的商家类 SvcChannelFactory* pfactory 接入数据渠道工厂 bool* exit 退出标志 输出项: 注释: 5.2.4.3 程序描述SvcRun void SvcRun() 功能: 主控流程 输人项: 无 输出项: 无 流程 :服务商家在开始已经生成,生存周期里一直存在一个DataBus对象(数据总线),每线程一个DataBus对象。在生存周期里一直存在 DataBus对象初始化 循环处理 { SINT32 ret = a_process_loop (Trade* ptrade , SvcChannelFactory* pfactory,DataBus* pDataBus ); if(bool* exit == true ) { 释放渠道 跳出循环 } 为下一次使用清空DataBus对象 } 收尾处理,释放recv_trade 5.2.4.4 程序描述a_process_loop SINT32 a_process_loop (Trade* ptrade , SvcChannelFactory* pfactory,DataBus* pDataBus ) 功能:一次交易的处理 输人项: Trade* pTrade , 接收数据的服务商家服务渠道 SvcChannelFactory* pFactory,服务商家接收数据的主机通道 SvcChannelFactory * pFactory 服务商家渠道的生成工厂。 DataBus* pDataBus预先创建的数据总线,不需要每次重建 输出项: S_OK 成功完成 其他 出错信息 流程: 依次执行 GetChannel 生成接入渠道ChannelBase* (根据商家生成一个ChannelBase的子类) 除非出错,整个流程不释放该ChannelBase , 委托给Patten负责释放 TradeRecvData 服务商家接收数据 TradeInProcess服务商家进入处理(最主要一项功能就是接口识别) If( TradeInProcess 成功 && 安全函数出错 ) //安全函数一般是mac校验失败 { 根据p_databus-> pack_type 对请求和应答作2种不同的处理 if( pack_type 是请求 ) { 执行 RequestSecureFailedProcess 函数调用 }else //应答报文 { 结果是应答 直接丢弃,返回成功 不管结果如何都跳到异常处理,但是返回值可能因SecureFailedProcess的执行结果而不同 } }else { 否则生成Patern对象 生成对方商家hst_trade 生成模式对象Pattern,将服务商家和对方商家传入 执行ExecPattern 执行具体的模式处理,将渠道委托给Patten负责释放 } 异常处理: 记录出错信息和时间 当异常发生在ExecPattern之外,释放渠道 结束处理: (无论异常与否都执行): 释放对方商家 hst_trade 释放模式对象Pattern 注释: 为了便于单元测试,从SvcRun中分离出该方法 也可以在SvcRun中实现上述的全部逻辑 5.2.4.5 程序描述GetChannel SINT32 GetChannel(SvcChannelFactory* factory, ChannelBase** ACE_Time_Value* time_val ) 功能:调用svc_factory生成服务渠道 性能: 输人项: SvcChannelFactory* svc_factory 渠道工厂 ACE_Time_Value* time_val 超时时间这个超时目前是一个固定值,和接收数据和发送数据的超时无直接联系 ChannelBase* !=NULL 未取得 =NULL 取得 输出项: 返回值 注释:出错信息在该方法中输出流程中只判断是否取得,没有取得则应该跳到开头进入下一次循环 测试:对所有的可能生成的ChannelBase都进行一次测试 5.2.4.6 程序描述TradeRecvData SINT32 TradeRecvData(Trade* p_recv_trade , ChannelBase* p_chnbase , DataBus* p_databus , ACE_Time_Value* time_out ) 功能: 商家通过渠道接收数据放入p_databus中 输人项: ChannelBase* p_chnbase 收取的渠道 Trade* p_recv_trade 接收的商家 DataBus* p_databus 存放数据的DataBus ACE_Time_Value* time_out 超时时间 输出项: 0 成功 -1 读取失败或者超时 注释:主流程不记录详细出错信息 5.2.4.7 程序描述TradeInProcess SINT32 TradeInProcess(Trade* p_trade , DataBus* p_databus ) 功能: 执行商家的入口处理(识别,解包。。。) p_databus 的_data_buff 和 _len 字段分别表示数据指针和长度 输入处理后将数据填入 p_databus 的 _var_pool 和 _var_reco_pool(识别数据)中 输人项: Trade* p_ trade 接收服务商家 DataBus* p_databus 存放数据的DataBus 输出项: 0 成功 -1 读取失败或者超时 注释: 没有超时限制,要控制短时间内完成 5.2.4.8 程序描述RequestSecureFailedProcess SINT32 RequestSecureFailedProcess(DataBus* p_databus , Trade* p_trade , ChannelBase* in_svc_channel) 功能: 对输入是请求报文的安全类函数失败后的处理(输入是应答报文的就直接丢弃) 输人项: DataBus* p_databus数据 Trade* p_trade 输入服务商家 ChannelBase* in_svc_channel 输入服务的渠道 输出项: S_OK 应答保报文,不加理会 INTIDENERROR( SECUFAILED ) 请求报文,执行安全异常处理模式成功 其他。 请求报文,执行安全异常处理模式中出错 注释:无论SecureFailedProcess 的执行结果如何都不继续执行后面的操作 5.2.4.9 程序描述ExecPattern SINT32 ExecPattern(ProcessPattern * pattern , DataBus* p_databus , ChannelBase* p_channel) 功能: 执行处理模式,全部处理交给pattern 输人项: ProcessPattern* pattern 处理模式 DataBus* p_databus 存放数据的数据总线 ChannelBase* channel 输入服务渠道,交给Pattern管理释放 输出项: S_OK 成功 其他 失败 注释: ChannelBase* 输入渠道,如果Pattern没有生成等错误,还是主控来释放p_channel 执行pattern->Process 后就不管了可能设置一个标志位来表示是否执行了Pattern,执行过最后就不用释放channel了 (是否可以这样? SINT32 ExecPattern(ProcessPattern * pattern , DataBus* p_databus , ChannelBase** p_channel) 主程序都删除p_channel,但是ExecPattern有可能返回的p_channel 是NULL。此时的主控是什么都不做。如果非null就删除) 5.3 PatternNewSyncAsyncInnerDir 同异步向内处理模式 5.3.1 类图 5.3.2 描述 预先了解: 交换平台接入的是服务商家,发送的是主机商家(主机)PatternNewSyncAsyncInnerDir 继承 ProcessPattern 类 5.3.3 流程图 见下页 执行主机商家的输出处理 主机商家 服务商家 接口平台 CallHost 接口平台 主机商家 是否同步返回 Yes 服务商家的输出处理(OutProcess),生成输出数据 是否服务商家读写渠道相同 是否服务商家读写渠道相同 创建ClientInfo,记录当前的信息。 失败则转出错处理(不大可能) ClientInfo->channel=输入渠道 channel=NULL 后续不释放channel ClientInfo.channel=NULL 释放channel channel=NULL 释放channel channel = NULL 创建新的write_channel write_channel = channel channel=NULL 通过write_channel返回数据释放write_channel Yes No Yes 释放!=NULL的channel 处理完成 返回S_OK 记录到ClientInfoTable No tpcall 出错,记录错误 释放!=NULL的渠道 返回错误码 出错释放使用的通道 服务商家的读入渠道channel 通过后台返回的fml变量S_TX_STATUS来判断 5.3.4 类说明 5.3.4.1 构造函数PatternNewSyncAsyncInnerDir PatternNewSyncAsyncInnerDir(Trade * svc_trade ,Trade *host_trade ); svc_trade 和 host_trade 分别代表服务商家和主机商家 5.3.4.2 方法Process SINT32 Process(DataBus * p_databus , ChannelBase* p_channel , ACE_Time_Value * time_val) ; DataBus * p_databus 数据总线,包含了解包解开的数据 (FML格式) ChannelBase* p_inchannel 服务商家接入的渠道 ACE_Time_Value * time_val 超时时间 这样我们就拥有了处理需要的全部信息。而其他缺少的是在执行中生成的信息了 服务商家 svc_trade 接口平台 主机商家 host_trade 接入渠道 是否生成返回渠道由is_same_rw_channel来判断如果读写渠道相同则使用原来的接入渠道原路返回,不用生成 服务商家 主机商家 接口平台 该主机通道和上图的返回渠道可能是不同的路线 比如是TUX和IPC Queue2种 5.3.4.3 程序描述TradeOutProcess SINT32 TradeOutProcess( Trade* p_trade , DataBus* p_databus ) 功能: 执行商家输出处理 将数据处理(打包,加密。。。)处理到发送前的状态 输人项: Trade* p_trade 商家 DataBus* p_databus 数据总线 输出项: S_OK 成功 其他 失败 注释: 5.3.4.4 程序描述 CallHost SINT32 CallHost( Trade* p_hst_trade , DataBus* p_databus ) 输人项: Trade* p_ hst_trade 主机商家 DataBus* p_databus 数据总线 输出项: S_OK 成功 其他 失败 注释:实际上是封装了一次发送接收的处理在这个模式里并不考虑单发无返回的情况,全部是发送后等待返回的情况 功能:执行和主机商家的一次交互。执行的流程如下: 创建主机商家发送的主机通道, 发送数据 if(读写不是同一条通道) { 释放发送主机通道 设置发送主机通道为NULL 创建主机商家接收的主机通道接收数据 } 释放接收的主机商家通道, 在此过程中所有生成的通讯渠道都要负责清除 失败情况分析: ChannelBase* send_channel=NULL; ChannelBase* recv_channel =NULL 创建主机商家发送的主机通道 失败 问题: 当tuxedo出错的时候的处理如何进行 回答: 在目前的情况下,主机服务渠道实际上是tpcall后台, 渠道实现中控制了该渠道的发送接收必然返回同步成功,如果通讯失败,由该主机生成返回码,复制请求数据到返回数据中 {返回码的生成是 设置交易状态为同步返回S_TX_STATUS = 1 , 设置响应码S_RSP_CD 为“2023” 设置响应码描述信息S_RSP_DESC 为“调用后台服务错误” } 交易或者通讯(tpcall)的失败由返回标志位和返回码来确定 可能发生情况:  1. 同步失败 可细分为通讯失败和后台处理返回失败(问题中的情况) 2. 同步成功 同步执行完毕 3. 异步已发送 异步处理,已经成功发送 S_TX_STATUS = 0 5.3.4.5 程序描述TradeInProcess SINT32 TradeInProcess(Trade* p_trade , DataBus* p_databus ) 功能: 执行主机商家的输入处理 执行主机商家的对应操作,将p_databus中的原始数据识别出接口信息,转换成FML数据存放在p_databus的_var_pool和_var_reco_pool中 输人项: Trade* p_ hst_trade 主机商家 DataBus* p_databus 数据总线 输出项: S_OK 成功 其他 失败 注释: 5.3.4.6 程序描述is_sync_return bool is_sync_return(DataBus* p_databus ) 功能: 查看p_databus,判断这次返回是否是同步返回 输人项: DataBus* p_databus 数据总线 输出项: true 同步返回 false 异步返回 注释: 服务商家 接口平台 主机商家 接入渠道 是否生成返回渠道 由is_same_rw_channel来判断 如果读写用相同的渠道返回 则使用原来的接入渠道,不用生成 5.3.4.7 程序描述is_same_rw_svcchannel bool is_same_rw_svcchannel ( Trade* p_trade ) 功能: 查看该商家是否在同一链路上返回请求 根据商家查看该商家的服务渠道定义 查询 如果没有定义了商家写的渠道,则表明读写渠道是一样的 如果定义了商家写的渠道,则表明读写渠道是不同的 输人项: Trade* p_trade 服务商家 输出项: true 是 false 不是 注释: 通过查看商家的读写渠道是否相同,可以在处理前明白是否可以提前释放读的渠道 返回给商家的时候明白是否要生成新的写的渠道 5.3.4.8 程序描述createClientInfo ClientInfo* createClientInfo( DataBus* p_databus , ChannelBase* p_channel ) 功能: 创建一项异步返回的客户端连接记录 无论p_channel是否=NULL,都填入新建的ClientInfo 中 输人项: DataBus* p_databus ChannelBase* p_channel 返回的渠道 只有读写原路返回的才!=NULL 如果写要重新创建的填NULL 可以的话用ACE_ASSERT判断一下 输出项: ClientInfo* 客户连接记录 !=NULL 成功 =NULL 不大可能 注释: 5.3.4.9 程序描述addToClientInfoTable void addToClientInfoTable( string key , ClientInfo* info ) 功能: 创建一项异步返回的客户端连接记录 输人项: string key 键值 目前是由ClientInfoTable的generateKey(p_databus : DataBus*)生成 ClientInfo* info 记录 输出项: ClientInfo* 客户连接记录 注释: 5.4 ThreadReplySvcProcessor 异步应答返回处理器 5.4.1 类图 5.4.2 类说明 5.4.2.1 程序描述ThreadReplySvcProcessor ThreadReplySvcProcessor (Trade* ptrade , SvcChannelFactory* pfactory, bool*_bexit) 功能: 构造函数 性能: 输人项: Trade* trade 接收返回数据处理的商家类服务商家,对于ATM接口就是ATM服务商家 SvcChannelFactory* pfactory 接收返回数据渠道工厂 bool* exit 退出标志 输出项: 注释: 主机商家 服务商家 接口平台 异步返回 这里的服务商家就是存放在ClientInfo记录中的商家代码(trade_code)对应的服务商家,要根据trade_code来动态生成和释放 5.4.2.2 程序描述SvcRun void SvcRun() 主流程 功能: 接收主机商家异步交易返回的数据并向服务商家发送的 输人项: 无 输出项: 无 流程: 生成接收主机商家 DataBus初始化 循环处理 { SINT32 ret = a_process_loop (ptrade , SvcChannelFactory* pfactory,DataBus* pDataBus ); 清空DataBus,以便下次重复使用 if( 退出标志被设置 并且 渠道返回获得渠道收数为超时 ) { 跳出循环 } } 收尾处理,释放recv_trade 注释: 单次处理的方法在a_loop_process中实现 5.4.2.3 程序描述a_process_loop SINT32 a_process_loop (Trade* ptrade , SvcChannelFactory* pfactory,DataBus* pDataBus ) 功能: 一次交易的处理 输人项: Trade* pTrade 将应答数据返回对应的商家(对于ATM接口就是ATMC对应的那个) SvcChannelFactory* pFactory主机商家接收数据的主机通道 异步应答渠道的生成工厂 DataBus* pDataBus 预先创建的数据总线,不需要每次重建 输出项: S_OK 成功完成 其他 出错信息 流程 设置主机商家接收通道和服务商家返回渠道,返回的服务商家为NULL ChannelBase* recvChannel = NULL; ChannelBase* returnChannel = NULL; Trade* svcChannel = NULL; 先执行 GetRecvChannel 取得接收数据的渠道( ChannelBase* ),取不到则直接跳到最后的出错处理 然后执行TradeRecvDataRecvReplyData收数据放入DataBus的_databuff , 长度放入_len 收完数据可以释放recvChannel, recvChannel=NULL 然后执行UnpackRecvData 解开数据 执行UnpackRecvData将数据解开为FML Buffer 然后调用 ClientInfoTable 的 generateKey方法生成键值 然后调用fetchClientInfoRecord取得记录 ClientInfoRecord* 然后RecoverDataBusInfo调用恢复返回前的DataBus信息 然后根据ClientInfoRecord* record 的 trade_code中 调用GetTrade取得要返回信息的服务商家 Trade* 然后调用TradeOutProcess生成对服务商家发送的数据 然后判断是否要生成返回渠道 ChannelBase* return_channel = clientinfo.channel; clientinfo.channel = NULL; // 释放和clientInfo的联系 if( return_channel = NULL ) { 创建return_channel = CreateOutputChannel… 创建失败,转入出错处理 } 调用TradeSendData 向服务商家发送数据,失败转入出错处理 释放return_channel return_channel=NULL 释放svc_trade svc_trade=NULL 出错处理: 记录错误 如果收发渠道 !=NULL 释放收发渠道 结束处理: 如果 svc_trade!=NULL 释放svc_trade 注释: 为了便于单元测试,从SvcRun中分离出该方法 也可以在SvcRun中实现上述的全部逻辑 可以单元测试 正常处理 以及 取渠道超时,输入处理失败,生成服务商家写渠道失败等情况 问题: 是否真的有助于单元测试? 5.4.2.4 程序描述 GetRecvChannel ChannelBase* GetRecvChannel(Trade* p_recv_trade ) 功能: 根据商家取得接收的渠道 输人项: Trade* p_recv_trade 接收的商家 输出项: ChannelBase* !=NULL 取到 =NULL 没有取到 注释: 5.4.2.5 程序描述TradeRecvData (建议改为RecvReplyData) SINT32 TradeRecvDataRecvReplyData( ChannelBase* p_chnbase , Trade* p_trade , DataBus* p_databus , ACE_Time_Value* p_timeout ) 功能: 从商家收取数据 输人项: ChannelBase* p_chnbase 渠道(定义了数据收取方式) Trade* p_trade 商家(商家收取数据的格式可能不同) (不可能存在不同的情况) DataBus* p_datrabus 数据总线,收取数据存放地 ACE_Time_Value* p_timeout 超时时间 输出项: S_OK 成功 其它 失败 注释: 5.4.2.6 程序描述UnpackRecvData SINT32 UnpackRecvData (DataBus* p_databus ) 功能: 解开p_databus中的数据(_data_buff,_len),放入_var_pool 输人项: DataBus* p_databus 输出项: S_OK 成功 其它 失败 注释: 5.4.2.7 程序描述fetchClientInfoRecord ClientInfo* fetchClientInfoRecord(string key) 功能: 从ClientInfoTable中查找客户端连接信息 输人项: string key 键值 输出项: !=NULL 找到 ==NULL 没找到 注释: key是由ClientInfoTable 的generateKey(p_databus : DataBus*)方法生成的 5.4.2.8 程序描述RecoverDataBusInfo SINT32 RecoverDataBusInfo(ClientInfo* p_clientinfo_record , DataBus* p_databus ) 功能: 从ClientInfo*信息中恢复出原来的DataBus信息 输人项: string key 键值 输出项: !=NULL 找到 ==NULL 没找到 注释: 问题: 原来的InProcess以后DataBus的数据怎么办? 这里很容易出错,要单元测试 5.4.2.9 程序描述getTrade Trade* getTrade( string trade_code ) 功能: 生成商家 输人项: string trade_code 输出项: !=NULL 找到 ==NULL 没找到 注释: 5.4.2.10 程序描述 TradeOutProcess SINT32 TradeOutProcess( Trade* p_trade, DataBus* p_databus ) 功能: 执行商家的对外数据处理 输人项: Trade* p_trade DataBus* p_databus 输出项: S_OK 成功 其他 失败 注释: 5.4.2.11 程序描述CreateOutputChannel ChannelBase* CreateOutputChannel( Trade* out_trade ) 功能: 创建输出的渠道 输人项: Trade* p_trade 输出项: ChannelBase !=NULL 成功 =NULL 失败 注释: 在读写渠道不同的情况下被调用生成写的渠道 5.4.2.12 程序描述TradeSendData SINT32 TradeSendData(p_trade : Trade*, p_databus : DataBus*) 功能: 调用商家方法发送数据总线中的数据 输人项: Trade* p_trade DataBus* p_databus 输出项: S_OK 成功 其他 失败 注释: 5.5 ClientInfo 客户端连接数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服