接口详细设计文档.docx
- 文档编号:27290832
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:51
- 大小:516.82KB
接口详细设计文档.docx
《接口详细设计文档.docx》由会员分享,可在线阅读,更多相关《接口详细设计文档.docx(51页珍藏版)》请在冰豆网上搜索。
接口详细设计文档
接口详细设计文档
作者:
唐为(为哥)
审核:
锟
日期:
2005-5-27
接口详细设计文档1编写目的...2名词解释...
3组件分布图
4程序结构...
4..
4..
.5..
6..
4.1
接入处理线程类图
.6.
4.2
接收线程类图
.7..
4.3
启动控制图
.7..
5程序设计说明
5.4.1类图
5.4.2
类说明
3..4..
.3..4.
5.5.1类图
5.5.2
类描述
5.6.1
3..4..
类图
5.6.2
.3..4.
类描述
5.7
ClientInfoTableMonitor客户端连接数据表监控程序
3..8...
5.7.1
3..8..
类图
5.7.2类说明3..8
5.8FrontMain主控程序4..0
5.8.1类间关系4..0
5.8.2流程图4..1
5.8.3类说明4..2
4..5
5.9问题
1编写目的
预期读者:
对接口行为和目的有一定了解的人
背景说明
软件系统名称:
接口前端接入服务器描述<接口>接收不同商家的接入,接收数据转发给主机服务器,并同步/异步将
返回数据发给接入商家的行为
2名词解释
ChannelBase渠道,通信基类,提供数据收发和释放的方法接口用子类实现来
封装了不同通信方式目前有TCP短连接接入,从ACEMessage_Queue中读取
(IPCMessageQueue->ACE_Message_Queue)
Trade*trade商家对象,代表的其实是针对该商家处理方法的集合将接入数据的商
家称为服务商家而将请求面向的商家称为主机商家,主机商家负责同步/异步返回
交易的应答数据给接口平台
发送数据的渠道工厂统
而接口(数据交换)平台是在两者之间的交换平台渠道工厂:
把接入数据的渠道工厂统一定为服务渠道工厂,
一定为主机通道工厂
3组件分布图
银联
ATM
commserver
commserver
ATM接入服务器
IPC消息队
IPC消息队列
ATM连接队列
注
各种服务渠道
和主机通道抽
象类都是相同
ChannelBase,
只是作用不同
IPC消息队
TCP渠
道
IPC消息队
IPC消息队
查不到,丢弃
后台服
务器
连接记
表
列渠道
IPC消息队列
接收线程
IPC消
*TraaeChJiPrccss(J•Cl曲ug甘Pu詡】*CflirlWIQ*TraadrPrcieess.!
i
♦creartedlE^tlnfti()*»如OC惴F PattemASvnckin'sirDinr iffrcrnDL1lJ< WanaiA钵眶忙ilbt利jocesWy *Oet罰航)dh^igrriCMlQWflnelODH| 4程序结构 4.1接入处理线程类图 ThreadlnSvcProcess or是接入处理线程的主流程 收数,接包无误后将 处理控制权交给 ProcessPattern 是后续处理的全部流程 抽象类 PatternNewSyncAsyncInnerDir是ProcessPattern的一个子类,实现发送主机服务器并判断同/异步 返回 同步直接返回给接入商家异步只做相应记录 4.2接收线程类图 Cliertb悔^teorijiirw^tnnauijinw 令tw^ctjd;■闻4体丼■Kt令0(£id)c.ri $^ChamdFactD[ydramEmcK创7f_1fldf_: odp.sk: *«irtua»SSetChamEii堵"®klhalz»O *mua»'S^Omn「TFaclo^i;- 4.3启动控制图 5程序设计说明 5.1对原系统的改动 改变原有商家Trade类,不存放渠道对象在商家类中,商家类只执行商家处理,不负责渠道的管理改动原有的系统中所有模式的处理,模式处理必须对渠道的释放负责 修改MidHstChannel,添加后台服务需要的2个FML字段,这两个字段是 FML域名 描述 S_INTERF_NO 接口标识号,整数。 系统中接收异步响应程序的唯一编号。 用于标识请求的来源,异步应答根据这个分发给具体的接口程序。 S_TX_CTRL_ATTR 交易控制属性,子付串。 接口都填0,表示 这是正常的交易请求。 5.2ThreadlnSvcProcessor接入处理器 5.2.1类图 ThreadInSvcProcessor *SvcRun(): void *aj>rocess_loop(pSvcTrade: Trace",pSvcChnFactory: SvcChannelFacto^'.pDataBus: DataBus*): SNT32*GeOannei|fac107: SvcChannelFactory\tinne_v3l: ACE_Time_Vaue*.parameter-string): ChannelBase**TradeRecvData(p_trade: Trade*,p_chnbase: ChameJBase",p_dalabus: DataBus*,pjmeval: ACE_Time_Value'): int*TradchPrDce55(p_trade;Trade*.p_databus: DataBus*): int *ExecPatternpattern: Process=attem\p_databus: DataBus1,p_channel: ChannelBase*): int*^equestSecure: FailedPnocess(p_tradeTrade;pjatabus: DMaBuF卜: int*Thre3dlnSvcpnx&$wr(pTrade: Trade1pFactory: SvcChannelFactofy\pBExit: bool*) 522时序图 丁皿应小山空只「0CUSSCj「 ~rI 1: GetChannolfSvc匚h吕nriol匚^ctory*,ACE^irri^Value3,string) 二I2: IradeRocvDataf'lrade17.ChannolBas©1,DataBus1,ACE_IirTno_Valuieff) uI3: TradelnProcessfTrade*.DataBus^ |如杲是诣求安全出错J Zl4.RequestSecureFailedProcess(Trade',DataBus*) 5: 曰馆J皿ttGm; \PmtternMew弓yixA细nc? I门ne「Dir 6ExecPattern(ProceG5P3treiT*,□ataSus*,ChannelBa^o*) .-■ 7: Proc©ss(DataBusK,ChannGlBas©1",ACE_Tinno_ValUG,T) 后续外理全足调用J 卩已扫「口对象完成T I.«・ 」• 预先说明: ChannelBase渠道通信基类,提供数据收发和释放的方法接口用子类实现来封装了 不同通信方式。 目前有TCP短连接接入。 从ACEMessage_Queue中读取(IPC MessageQueue->ACE_Message_Queue) Trade*trade商家: 代表的其实是针对该商家处理方法的集合 5.2.3流程图 服务商家 商家渠道工厂 同异步模式 PatternASynclnn erDir PatternNewSyncASy ncInnerDir 5.241功能 收取用不同渠道接入的外部商家的请求识别,解包执行处理的模式具体的流程在模 式中控制,并不做控制 模式可能有3种: 1.无返回: 发送后台,不接收应答对应模式PatternASynclnnerDir,需要修改原来的相关程 序,在本文档中并不涉及 2.有返回,根据返回的应答判断是同步返回还是异步返回如果接收的应答表明是同步返 回,按正常模式返回如果接收的应答表明是异步返回,按异步模式处理对应模式 PatternNewSyncASyncInnerDirThreadInSvcProcessor后续的ProcessPattern应该是 PatternNewSyncASynclnnerDir.ThreadInSvcProcessor只负责接入后调用模式,并处理异常情况 3.安全异常情况的模式下,调用模式PatternErrorSynclnner来处理,必须限制: 主要的 改动是渠道的释放由模式来管理涉及模式有PatternASyncInnerDir, PatternNewSyncASynclnnerDir,PatternErrorSynclnner(可能不全面) 5.2.4.2程序描述ThreadlnSvcProcessor ThreadlnSvcProcessor(Trade*ptrade,SvcChannelFactory*pfactory,bool*_bexit) 性能: SvcChannelFactory*pfactorybool*exit 输出项: 注释: voidSvcRun() 功能: 主控流程 输人项: 无 输出项: 无 流程 : 服务商家在开始已经生成,生存周期里一直存在一个DataBus对象(数据总线),每线程 个DataBus对象。 —— DataBus对象初始化 循环处理 { SINT32ret=a_process_loop(Trade*ptrade,SvcChannelFactory*pfactory,DataBus*pDataBus);if(bool*exit==true) { 释放渠道 跳岀循环 } 为下一次使用清空DataBus对象 } 收尾处理,释放recv_trade 5.244程序描述a_process_loop SINT32a_process_loop(Trade*ptrade,SvcChannelFactory*pfactory,DataBus*pDataBus) 功能: 一次交易的处理 输人项: Trade*pTrade,接收数据的服务商家服务渠道 SvcChannelFactory*pFactory,服务商家接收数据的主机通道— SvcChannelFactory*pFactory服务商家渠道的生成工厂。 DataBus*pDataBus预先创建的数据总线,不需要每次重建 输出项: S_OK成功完成 其他 出错信息 流程: 依次执行 GetChannel生成接入渠道ChannelBase*(根据商家生成一个ChannelBase的子类) 除非出错,整个流程不释放该ChannelBase,委托给Patten负责释放 TradeRecvData服务商家接收数据 TradelnProcess服务商家进入处理(最主要一项功能就是接口识别) lf(TradelnProcess成功&&安全函数出错)//安全函数一般是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中实现上述的全部逻辑 SINT32GetChannel(SvcChannelFactory*factory,ChannelBase**ACE_Time_Value*time_val) 功能调用svc_factory生成服务渠道性能: ACE_Time_Value* time_val超时时间这个超时目前是一个固疋值,和接收数据 输人项: SvcChannelFactory* svc_factory渠道工厂 和发送数据的超时无直接联系 =NULL取得 ChannelBase*! =NULL未取得输出项: 返回值注释: 出错信息在该方法中输出流程中只判断是否取得,没有取得则应该跳到开头进入下一 次循环 测试: 对所有的可能生成的ChannelBase都进行一次测试 5.246程序描述TradeRecvData 接收的商家 存放数据的DataBus 超时时间 输人项: ChannelBase*p_chnbase Trade*p_recv_trade DataBus*p_databus ACE_Time_Value*time_out 输出项: 0成功 -1读取失败或者超时 注释: 主流程不记录详细出错信息 SINT32TradelnProcess(Trade*p_trade,DataBus*p_databus) 功能: 执行商家的入口处理(识别,解包。 。 。 ) p_databus的_data_buff和_len子段分别表示数据指针和长度 输入处理后将数据填入p_databus的_var_pool和_var_reco_pool—(识另U数据)— 中 输人项: Trade*p_trade接收服务商家 DataBus*p_databus存放数据的DataBus 输出项: 0成功 -1读取失败或者超时 注释: 没有超时限制,要控制短时间完成 5.248程序描述RequestSecureFailedProcess SINT32RequestSecureFailedProcess(DataBus*p_databus,Trade*p_trade,ChannelBase*in_svc_channel) 功能: 对输入是请求报文的安全类函数失败后的处理(输入是应答报文的就直接丢弃) 输人项: DataBus*p_databus数据 Trade*p_trade输入服务商家 ChannelBase*insvcchannel输入服务的渠道 输出项: S_OK应答保报文,不加理会 INTIDENERROR(SECUFAILED)请求报文,执行安全异常处理模式成功 其他。 请求报文,执行安全异常处理模式中出错 注释无论SecureFailedProcess的执行结果如何都不继续执行后面的操作 SINT32ExecPattern(ProcessPatternpattern,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了 (是否可以这样? SINT32ExecPattern(ProcessPattern*pattern,DataBus*p_databus,ChannelBasep_channel) 主程序都删除p_channel,但是ExecPattern有可能返回的p_channel是NULL。 此时的主控是什么都不做。 如果非null就删除) 5.3PatternNewSyncAsynclnnerDir同异步向处 理模式 5.3.1类图 PattemNewSyncAsyncInnerDir 5.3.2描述 继承 预先了解: 交换平台接入的是服务商家,发送的是主机商家(主机)PatternNewSyncAsyncInnerDir ProcessPattern类 5.3.3流程图 见下页 CallHost tpcall 接口平台 主机商家 通过后台返回的 是否同步返回 Yes 息 是否服务商家读写渠道相同 Yes No 是否服务商家读写渠道 Clientlnfo->channe Clientlnfo.chann Yes No 输入渠道 放 channel=NULL channel channel=NULL channel 释放! =NULL的渠道 执行主机商家的输出处理 writechannel writechannel 释放channel STXSTATUS来判断 释放 服务商家的读 入渠道channel el=NULL释放channel 岀错,记录错误 记录到ClientlnfoTable 放使用 的通道 fml变量 channel=NULL 后续不释 服务商家的输出处理(OutProcess),生成输出数据 出错释 创建Clientlnfo,记录当前的信 channel=NULL 创建新的 通过write_channel返回数据释放writechannel 服务商家 接口平台 主机商家 534类说明 5.341构造函数PatternNewSyncAsynclnnerDir PatternNewSyncAsynclnnerDir(Trade*svc_trade,Trade*host_trade);svc_trade和host_trade分别代表服务商家和主机商家 5.3.4.2方法Process SINT32Process(DataBus*p_databus,ChannelBase*p_channel,ACE_Time_Value*time_val); DataBus*p_databus数据总线,包含了解包解开的数据(FML格式) ChannelBase*p_inchannel服务商家接入的渠道 ACE_Time_Value*time_val超时时间 这样我们就拥有了处理需要的全部信息。 而其他缺少的是在执行中生成的信息了 5.3.4.3程序描述TradeOutProcess SINT32TradeOutProcess(Trade*p_trade,DataBus*p_databus) 功能: 执行商家输出处理 将数据处理(打包,加密。 。 。 )处理到发送前的状态 DataBus* p_databus数据总线 成功 失败 输出项: S_OK 其他 注释: 5.344程序描述CallHost SINT32CallHost(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. 同步成功同步执行完毕 5.345程序描述TradelnProcess SINT32TradeInProcess(Trade*p_trade,DataBus*p_databus) 功能: 执行主机商家的输入处理 执行王机商家的对应操作,将p_databus_中的原始数据识别出接口信息,转换成 「ML数据存放在—p_databus的_var_pool和_var_reco_pool中 输人项: Trade* p_hst_trade主机商家 DataBus* p_databus数据总线 输出项: S_OK 成功 其他 失败 注释: 5.346程序描述is_sync_return boolis_sync_return(DataBus*p_databus) 功能: 查看p_databus,判断这次返回是否是同步返回 输出项: true同步返回 false异步返回 注释: 5.347程序描述is_same_rw_svcchannel boolis_same_rw
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 详细 设计 文档