为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 接口详细设计文档

接口详细设计文档

2018-05-18 10页 doc 1MB 304阅读

用户头像

is_270070

暂无简介

举报
接口详细设计文档接口详细设计文档接口详细设计文档新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第3页/共63页第3页/共63页唐为(为哥)赵银2005-5-27新宇软件KEUJSKYSOFTWARE新宇软件KE1USKYSOFTWARE第6页/共63页第PAGE\*MERGEFORMAT#页,共63页新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页288913统的改动5.1对原系编写目的….名词解释....程序结构114.1接入处理线程类图114.2接收线程类图...
接口详细设计文档
接口详细文档接口详细设计文档新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第3页/共63页第3页/共63页唐为(为哥)赵银2005-5-27新宇软件KEUJSKYSOFTWARE新宇软件KE1USKYSOFTWARE第6页/共63页第PAGE\*MERGEFORMAT#页,共63页新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页288913统的改动5.1对原系编写目的….名词解释....程序结构114.1接入处理线程类图114.2接收线程类图124.3启12程序设计说明135・2ThreadInSvcProcessor接入处理器155.2.1类图155・2・2时155.2・3流中国邮政STCHINAPOST165.2・4ThreadInSvcPn)cessor类说明185・3PattemNewSyncAsyncImierDir同异步向内处理模式•••••••275.3.1类图275.3.2®述275.3.3流程275.3・4类说明295.4ThreadRepIySvcProcessor异步应答返回处理器36541类图365.4.2类说明365・5CIientInfo客户端连接数据475.5.1类|475・5・2类描述485.6CIientInfoTable客户端连接数据48561类4848描述5・7CIientInfoTabIeMoiiitor客户端连接数TOC\o"1-5"\h\z据表监控程序545.7.1类图545・7・2类说明545.8FrontMain565.8.1类间关系565•&2流程图575•&3类说明595・?问62岳中国邮政=TCHINAPOST题新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第8页#共63页1编写目的预期读者:对接口行为和目的有一定了解的人背景说明■软件系统名称:接口前端接入服务器■描述V接口〉接收不同商家的接入,接收数据转发给主机服务器,并同步/异步将返回数据发给接入商家的行为2名词解释■ChannelBase渠道,通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式目前有TCP短连接接入,从ACEMessage_Queue中读取(IPCMessageQueue->ACE_Message_Queue)■Tradedtrade商家对象,代表的其实是针对该商家处理方法的集合将接入数据的商家称为服务商家而将请求面向的商家称为主机商家,主机商家负责同步/异步返回交易的应答数据给接口平台■而接口(数据交换)平台是在两者之间的交换平台■渠道工厂:把接入数据的渠道工厂统一定为服务渠道工厂,发送数据的渠道工厂统一定为主机通道工厂服务.二主机3组件分布图commsercomms注各种服务渠道和主机通道抽象类都是相同的基类ChannelBase>只是作用不同IPC淸息队列東道TCP渠道接出服务连接监ATM接入ATM接入IPC消息队列渠道A^rif沧接入服务渠发送请、r工厂新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第10页,共63页第10页,共63页新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第11页#ft63页第11页#ft63页中国删政OJCHINAPOST4程序结构4.1接入处理线程类ThreadInSvcProcessor是接入处理线程的主收数,接包无误后将处理控制权交给ProccssPatternProcesspattern是后续处理的全部流程抽象类子类实现对应不同流程4.2蟄轴超wKEUJSKYSOFTWAREciAPOSTc=enthfodreg5'」imeFmeoutjime齐g—caestring言eftce」d•string^gyplid二2臭g」dc-aClienthfoTableenls.18I•CEOThreadlMutex◎MSISJnceJnReKAclln—hread—m三Is点一灵anceQ♦addRecordoHtchRecoaoflearlimeoutRecordso诺nerateKeyOf_eanupoTrade^3Execute)&hadeccdocharrrRADECODELEN^歹」ra&JWcharfTRADrTlMEmLEN+二E'oompressjag..SZT32歹—encryjlag-s_Nd2^l=ade」ype-S-NT32丈—err」一mes••S-NT32歹」nfu尸ser•vecsrASZT32VElou/lser二ector_trade_code:stringnthreads:SWT32%_l『ado_codo:std::strlngGetChannel()InltializeO-SvcChannolFactoryO*«virtual»*«vtmiai>>♦cWrtualx^>shmmgroableMomtor>Monitor()^FrontMain()«|•siarlupo♦shutdown。ThreadReplySvcProcessor^p_rGCv__trado:Trade*^data_bus:DataBusfi^b^exit:booTSvcChannelFactory(fromExecute)zthreadgrotip!i».斤—InteTask(fromExecute)*inteTask()^StartO•Stop()^AddThread()^-InteTaskO-g^<SvcRun()^GotChannolO^TradeRGCvDataO^TradeInProcess0>ExecPattem()^RequestSecureFailedProcessO•ThroadInSvcProcossor()•SvcRunO*GetRec\Channel()•tradoRoevData()•UnpackRecvData()^fetchClientlnfoRecord()*Reco\erDataBuslnfoO*getTrade()*Trad0OutP(DCGSS()*CreateOutputChannel()^TradoSondDalaO^ThreadReplySvcProcessor()5程序设计说明5.1对原系统的改动■改变原有商家Trade类,不存放渠道对象在商家类中,商家类只执行商家处理,不负责渠道的管理改动原有的系统中所有模式的处理,模式处理必须对渠道的释放负责■修改MidHstChannel,添加后台服务需要的2个FML字段,这两个字段是:FML域名S_INTERF_NO描述接口标识号,整数。系的唯一编号。用于标识请求的来源,异步应答根据这个号码分发给具体的接口程序。S_TX_CTRL_ATTR交易控制属性,字符串。接口都填0,表示这是正常的交易请求。ThreadlnSvcProcessor接入处理器5.2.1类图ThreadlnSvcPrxessor>idDop(pSvcTrade:Trade*,pSvcChnFactory:SvcChannelFactory*,pDataBus:DataBus*):SINT32factory:SvcChannelFactory*,time_val:ACE_Time_Value:parameter:string):ChannelBase*ata(p_trade:Trade*,p.chnbase:ChannelBase*,pjatabus:DataBus*,pJimeval:ACE^Time^Value*):int2ss(p.trade:Trade:p.databus:DataBus*):intpattern:ProcessPattem*,p_databus:DataBus*,p_channel:ChannelBase*):intjreFailedProcessfpJrade:Trade*,p_databus:DataBus*):intProcessor(pTrade:Trade',pFactory:SvcChannelFactory*,pBExit:boot)5.2.2时序图iSvcProcessor1:GstChanneltSvcChannelFactory*.ACE_Time_Value*.string)=I2:TradeRecvData(Trade*,ChannelBgsejDataBus*.ACE_Time_Value*)]3:TradelnProcess(Trad©*,DataBus*)如杲是请求安全出错J4:RequestSecureFailedProcess(Tradex.DataBus7')pattern:5:createRgttemNewSyncAs、/nclnnerDi「6:ExecPatter刍tterrT,DataBus*,Cha门n©IBase*)7:Proces5(DataBu5*.ChannelBase*.ACE_Time_Value*)后续处理全是调用psttem对象完成预先说明:新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页#共63页第PAGE\*MERGEFORMAT#页#共63页■ChannelBase渠道通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式。目前有TCP短连接接入。从ACEMessage_Queue中读取(IPCMessageQueue->ACE_Message_Queue)■Tradedtrade商家:代表的其实是针对该商家处理方法的集合5.2.3流程图新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页#共63页第19页,共63页5.2.4ThreadlnSvcProcessor类说明5.2.4.1功能收取用不同渠道接入的外部商家的请求识别,解包执行处理的模式具体的流程在模式中控制,并不做控制模式可能有3种:无返回:发送后台,不接收应答对应模式PatternASyncInnerDir,需要修改原来的相关程序,在本文档中并不涉及有返回,根据返回的应答判断是同步返回还是异步返回如果接收的应答表明是同步返回,按正常模式返回如果接收的应答表明是异步返I,按异步模式处理对应模式PatternNewSyncASyncInnerDirThreadlnSvcProcessor后续的ProcessPattern应该是PatternNewSyncASyncInnerDir.ThreadlnSvcProcessor只负责接入后调用模式,并处理异常情况3•安全异常情况的模式下,调用模式PatternErrorSyncInner来处理,必须限制:主要的改动是渠道的释放由模式来管理涉及模式有PatternASyncInnerDir,PatternNewSyncASyncInnerDirPatternErrorSyncInner(可能不全面)5・2・4・2程序描述ThreadlnSvcProcessorThreadlnSvcProcessor(Trade*ptrade,SvcChanne1Factor厂pfactory,bool*bexit)功能:构造函数性能:输人项:Trade*trade接入数据处理的商家类SvcChannelFactory^pfactory接入数据渠道工厂bool*exit退出标志输出项:注释:5・2・4・3程序描述SvcRunvoidSvcRun()功能:主控流程输人项:无输出项:无流程:服务商家在开始已经生成,生存周期里一直存在一个DataBus对象(数据总线),每线程一个DataBus对象。在生存周期里DataBus对象初始化循环处理{SINT32ret=a_process_loop(Trade*ptrade,SvcChanne1Factory"pfactoryzDataBus*pDataBus);if(bool*exit==true){释放渠道跳出循环}为下一次使用清空DataBus对象}收尾处理,释放recvtrade524.4程序描述a_process_loopSINT32a_process_loop(Trade*ptrade,SvcChannelFactory*pfactory‘DataBus*pDataBus)新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第22页,S63页第22页,S63页新宇软件SE1USKYSOFTWARE第21页#ft63页功能:一次交易的处理输人项:TradedpTrade,接收数据的服务商家服务渠道SvcChaimGlFactoFy学pFactoFy,服务商家接收数SvcChannelFactory孤pFactory服务商家渠道的生成工厂。DataBus^pDataBus预先创建的数据总线,不需要每次重建输出项:S_OK成功完成其他出错信息流程:依次执行GetChannel生成接入渠道ChannelBase*(根据商家生成一个ChannelBase的子类)除非出错,整个流程不释放该ChannelBase,委托给Patten负责释放TradeRecvData服务商家接收数据TradelnProcess服务商家进入处理(最主要一项功能就是接口识别)If(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中实现上述的全部逻辑5・2・4・5程序描述GetChannelSINT32GetChannel(SvcChannelFactory*factory,ChannelBase**ACE_Time_Value*timeval)功能:调用svc_factory生成服务渠道性能:输人项:SvcChannelFactory*svc_factory渠道工厂ACE_Time_Value*time_val超时时间这新宇软件SE1USKYSOFTWARE新宇软件SE1USKYSOFTWARE第24页/共63页第24页/共63页新宇软件KEUJSKYSOFTWARE第23页,ft€3页个超时目前是一个固定值,和接收数据和发送数据的超时无直接联系ChannelBase^!=NULL未取得=NULL取得输出项:返回值注释:出错信息在该方法中输出流程中只判断是否取得,没有取得则应该跳到开头进入下一次循测试:对所有的可能生成的ChannelBase都进行一次测试5・2・4・6程序描述TradeRecvDataSINT32TradeRecvData(Trade*p_recv_traderChannelBase*p_chnbase,DataBus*pdatabus,ACETimeValue*timeout)~~商家通过渠道接收数据放入p_databus中输人项:ChannelBase^p_chnbase收取的渠道Trade*p_recv_trade接收的商家DataBus^p_databus存放数据的DataBusACE_Time_VaIue*time_out超时时间输出项:0成功-1读取失败或者超时注释:主流程不记录详细出错信息程序描述TradelnProcessSINT32TradelnProcess(Trade*p_trade,DataBus*p_databus)功能:执行商家的入口处理(识别,解包。。。)p_databus的_data_bufif和_Ien字段分别表示数据指针和长度输入处理后将数据填入p_databus的_vtzr_pool和_VQF_Feco_pooI(识别数据)中输人项:Trade*p_trade接收服务商家DataBus^p_databus存放数据的DataBus输出项:0成功-1读取失败或者超时注释:没有超时限制,要控制短时间内完成程序描述RequestSecureFailedProcessSINT32RequestSecureFailedProcess(DataBus*p_databusTrade*p_trade新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第26页,共63页第26页,共63页新宇软件KEUJSKYSOFTWARE第25页/ft63页ChannelBase*in_svc_channel)功能:对输入是请求报文的安全类函数失败后的处理(输入是应答报文的就直接丢弃)输人项:DataBus^p_databus数据Trade*p_trade输入服务商家ChannelBase^in_svc_channel输入:服务的渠输出项:S_OK应答保报文,不加理会INTIDENERROR(SECUFAILED)请求报文,执行安全异常处理模式成功其他。请求报文,执行安全异常处理模式中出错注释:无论SecureFailedProcess的执行结果如何都不继续执行后面的操作程序描述ExecPatternSINT32ExecPattern(ProcessPa七tern*pattern,DataBus*p_databusrChannelBase*pchannel)功能:执行处理模式,全部处理交给pattern输人项:ProcessPattern^pattern处理模式DataBus^p_databus存放数据的数据总线ChannelBase^channel番鶴1齬输豪服务渠道,交给Pattern管理释放输出项:S_OK成功其他失败注释:ChannelBase^输入渠道,如果Pattern没有生成等错误,还是主控来释放p_channel执行pattern->Process后就不管了可能设置一个标志位来表示是否执行了Pattern,执行过最后就不用释放channel了(是否可以这样?SINT32ExecPattern(ProcessPattern*pattern,DataBus*pdatabus,ChannelBase**p_channel)主程序都删除p_channel,但是ExecPattern有可能返I的p_channel是NULLO此时的主控是什么都不做。如果非mill就删除)新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第27页#共63页第27页#共63页PatternNewSyncAsyncInnerDir同异步向内处理模式5.3.1类图PattemNewSyncAsyncInnerDir.databus:DataBus*,p_channel:ChannelBase*,time_val:ACE_Time_Value*):SINT32〉「ocess(p_trade:Trade*,p_databus:DataBus*):intBus(p_databus:DataBus*):gid)_trade:Trade*,p^databus:DataBus*):SINT32)cess(p_trade:Trade*,p_databus:DataBus*):intatum(p_databus:DataBus*):boolrw_svcchannel(trade:Trade*):boolntlnfo(p_databus:DataBus*,p_channel:ChannelBase*):ClientInfo*ntlnfoTable(key:string,info:Clientinfo*):void5.3.2描述预先了解:交换平台接入的是服务商家,发送的是主机商家(主机)PatternNewSyncAsyncInnerDir继承ProcessPattern类5.3.3流程图见下页新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第30页#共63页第30页#共63页新宇软件KEUJSKYSOFTWARE第29页,ft€3页5・3・4类说明5.3.4.1PatternNewSyncAsyncInnerDir(Trade*svctrade,Trade*hosttrade);svc_trade和host_trade分别代表服务商家和主机商家5.3.4.2方法ProcessSINT32Process(DataBus*p_databus,ChannelBase*p_channel,ACE_Time_Value*timeval);DataBus*p_databus数据总线,包含了解包解开的数据(FML格式)ChannelBase^p_inchannel服务商家接入的渠道ACE_Time_Value來time_val超时时间这样我们就拥有了处理需要的全部信息。而其他缺少的是在执行中生成的信息了5.3.4.3程序描述TradeOutProcessSINT32TradeOutProcess(Trade*p_trade,DataBus*p_databus)执行商家输出处理将数据处理(打包,加密。。。)处理到发送前的状态输人项:Trade*p_trade商家DataBus*p_databus数据总线输出项:S_OK成功其他失败新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页第PAGE\*MERGEFORMAT#页,共63页新宇软件KEUJSKYSOFTWARE第31页,ft63页注释:5・3・4・4程序描述CallHostSINT32CallHost(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后台,?=1渠道实现中控制了该渠道的发送接收必然返I同步成功,如果通讯失败,由该主机生成返回码,复制请求数据到返回数据中{返回码的生成是设置交易状态为同步返回S_TX_STATUS=1,设置响应码S_RSP_CD为"2023"i3=j设置响应码描述信息S_RSP_DESC为"调用后台服务错误”}交易或者通讯(tpcall)的失败由返回标志位和返回码来确定可能发生情况:同步失败可细分为通讯失败和后台处理返回失败(问题中的情况)同步成功同步执行完毕异步已发送异步处理,已经成功发送STXSTATUS=0程序描述TradelnProcessSINT32TradelnProcess(Trade*p_tradezDataBus*p_databus)功能:执行主机商家的输入处理据存放在Pzzdatabus——的二vaF二poolvarrGcopool中输人项:Trade*p_hst_trade主机商家DataBus^p_databus数据总线输出项:S_OK成功其他失败注释:程序描述is_sync_returnboolissyncreturn(DataBus*pdatabus)功能:查看p_databus,判断这次返回是否是同步返回输人项:DataBus^p_databus数据总线输出项:true同步返回false异步返回新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页第PAGE\*MERGEFORMAT#页#共63页新宇软件KEUJSKYSOFTWARE第34页/共63页>主机程序描述is_same_rw_svcchannelboolissamerwsvcchannel(Trade*ptrade)功能:查看该商家是否在同一链路上返回请求根据商家查看该商家的服务渠道定义查询如果没有定义了商家写的渠道,则表明读写渠道是一样的如果定义了商家写的渠道,则表明读写渠道是不同的输人项:Tradedp_trade服务商家输出项:true是false不是注释:通过査看商家的读写渠道是否相同,可以在处理前明白是否可以提前释放读的渠道返回给商家的时候明白是否要生成新的写的渠5.3.4.S程序描述createClientlnfoClient工nfo*createClientlnfo(DataBus*pdatabus,ChannelBase*pchannel)功能:创建一项异步返回的客户端连接记录无论p_channel是否=NULL,都填入新建的Clientinfo中输人项:DataBus^p_databusChannelBase^p_channel返回的渠道只有读写原路返回的才!=NULL如果写要重新创建的填NULL可以的话用ACE_ASSERT判断输出项:Clientinfo*客户连接记录!=NULL成功=NULL不大可能注释:5.3.4.9程序描述addToClientlnfoTablevoidaddToClient工nfoTable(stringkey,Clientinfo*info)功能:创建一项异步返回的客户端连接记录输人项:stringkey键值目前是由ClientlnfoTable的DataBus^)生成generateKey(p_databus:Clientinfoinfo记录输出项:Clientlnfo^客户连接记录注释:异步应答返回处ThreadReplySvcProcessor理器5.4.1类图ThreadReplySwProcessor:Trade*>ry:SvcChannelFactory*op(ptradeTrade*,pfactory:S^ChannelFactory*,pDataBus:DataBus*)SINT32mel(p_「ecv_trade:Trade*):ChannelBase*ita(p_chnbase:ChannelBase:pjrade:Trade*,p_databus:DataBus*,pJmeout:ACE_Time_Value*):int)ata(p_databus:DataBus*):int>Record(key:string):Clientinfo*Bus・fo(p_clientinfo_reco「d:Clientinfo*,p_databus:DataBus*):intencode:string):Trade*:ess(p_trade:Trade:p_databus:DataBus*):intChannel(outjrade:Trade*):ChannelBase*3ta(p_trade:Trade*,p.databus:DataBus*):int>vcProcessor(pTrade:Trade*,pFactory:SvcChannelFactory*,pBExit:bool*)542类说明5.4.2.1程序描述ThreadReplySvcProcessor功能:构造函数性能:输人项:Trade*trade处理的商家类服务商家,对于ATM接口就是ATM服务商家SvcChannelFactory^pfactory接收返回数据渠道工厂bool*exit退出标志输出项:注释:这里的服务商家就是存放在Clientinfo记录中的商家代码(trade_code)对应的服务商家,要根据trade_code来动态生成和释放新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页第PAGE\*MERGEFORMAT#页,共63页新宇软件SE1USKYSOFTWARE第PAGE\*MERGEFORMAT#页,共63页Clientinfo②begin」me^>timeoutjime②t「ade_code:string'^>interfacejd:string②pkggrp」d:int勛pkg」dx:int5・4・2・2程序描述SvcRunvoidSvcRun()主流程功能:接收主机商家异步交易返回的数据并向服务商家发送的输人项:无输出项:无流程:生成接收主机商录DataBus初始化循环处理{SINT32ret=a_process_loop(ptraderSvcChanne1Factory*pfactory,DataBus*pDataBus);清空DataBus,以便下次直复使用if(退出标志被设置并且渠道返回获得渠道收数为超时){跳出循环}}收尾处理,释放recvtrade注释:单次处理的方法在a_Ioop_process中实现5.4.2.3程序描述a_process_loopSINT32a_process_loop(Trade*ptrade,SvcChanne1Factory*pfactoryzDataBus*pDataBus)功能:一次交易的处理输人项:Trade*pTrade将应答数据返回对应的商家(对于ATM接口就是ATMC对应的那个)SvcChannelFactory^pFactory主机商家接收数据的主机通道-异步应答渠道的生成工厂DataBus^pDataBus预先创建的数据总线,不需要每次重建输出项:S_OK成功完成其他出错信息流程设ft主机商家接收通道和服务商家返回渠道,返回的服务商家为nullChannelBase*recvChannel=NULL;ChannelBase*returnchannel=NULL;Trade*svcChanne1=NULL;先执行GetRecvChannel取得接收数据的渠道(ChannelBase*),取不到则直接跳到最后的出错处理然后执行TradeReavDataRecvReplyData收数据放入DataBus的f,长度放入_丄"收完数据可以释放recvChannelzrecvChannel=NULL然后执行UnpackRecvData解开数据新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第40页,S63页第40页,S63页执行UnpackRecvData将数据解开为FMLBuffer然后调用ClientlnfoTable的genera仁eKey方法生成键值然后调用chClientlnfoRecord取得记录Client工nfoRecord*然后RecoverDataBusInfo调用恢复返回前的DataBus信息然后根据GlXn七工nfoRzord*rwd的七gdeoodo中调用GetZTrad©取得要返回信息的服务然后调用TradeOutProcess生成对服务商家发送的数据然后判断是否要生成返回渠道ChannelBase*return_channe1=clientinfo.channel;clientinfo・channel=NULL;//释放和clien七工nfo的联系if(return_channel=NULL){仓ij建returnchannel=CreateOutputChannel...创建失败,转入出错处理}调用TradeSendData向服务商家发送数据,失败转入出错处理释放return_channelreturn_channe1=NULL一NULL出错处理:记录错误如果收发渠道?=null释放收发渠道结束处理:——W-释放注释:为了便于单元测试,从SvcRun中分卡出该方法也可以在SvcRun中实现上述的全部逻辑可以单元测试正常处理以及取渠道超时,输入处理失败,生成服务商家写渠道失败等情况新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第41页#ft63页新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页/共63页第PAGE\*MERGEFORMAT#页/共63页问题:是否真的有助于单元测试?5.424~—Trade学precvtrade~~GhanHelBase^——!=NULL取到=NULL没有取到泮軽.yjETr*5・4・2・5程序描述TradeRecvData(建议改为RecvReplyData)功能:从商家收取数据输人项:ChannelBase^p_chnbase渠道(定义了数据收取方式)Trad皆ptradG(不可能存在不同的情况)DataBus^p_datrabus数据总线,收取数据存放地ACE_Time_VaIue來p_timeout超时时间输出项:S_OK成功其它失败注释:5.4.2.6程序描述UnpackRecvDataSINT32UnpackRecvData(DataBus*pdatabus)功能:解开p_databus中的数据(_data_bufif,_Ien),放入_var_pool输人项:DataBus^p_databus输出项:S_OK成功其它失败注释:新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第44页,»63页第44页,»63页5.4.2・7程序描述fetchClientlnfoRecordClientInfo*fetchClientlnfoRecord(stringkey)功能:从ClientlnfoTable中查找客户端连接信息输人项:stringkey键值输出项:!=NULL找到==NULL没找到注释:key是由ClientlnfoTable的generateKey(p_databus:DataBus^)方法生成的5.4.2.8程序描述RecoverDataBusInfoSINT32RecoverDataBusInfo(Clientinfo*p_clientinfo_record,DataBus*pdatabus)功能:从Clientlnfo^信息中恢复出原来的DataBus信息输人项:stringkey键值第45页,共63页第45页,共63页茅新宇软件卓中国Sib政■KEWSKYSOFTWARE^ETCHINAPOST输出项:!=NULL找到==NULL没找到注释:问题:原来的InProcess以后DataBus的数据怎么办?这里很容易出错,要单元测试5.429程序描述getTradeTrade*got»Trade(―storingtn?ad©oodo)输人项:―stringtradG_codg输出项:!.NULL——sahNull__程序描述TradeOutProcessSINT32TradeOutProcess(Trade*ptrade,DataBus*pdatabus)新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第46页/ft63页第46页/ft63页功能:执行商家的对外数据处理输人项:Trade*p_tradeDataBus^p_databus输出项:S_OK成功其他失败注释:程序描述CreateOutputChannelChannelBase*CreateOutputChanne1(Trade*outtrade)功能:~~创建输出的渠道输人项:Trade*p_trade输出项:ChannelBase!=NULL成功=NULL失败在读写渠道不同的情况下被调用生成写的渠道新宇软件SE1USKYSOFTWARE新宇软件SE1USKYSOFTWARE第48页,共63页第48页,共63页新宇软件KEUJSKYSOFTWARE第47页,S63页程序描述TradeSendDataSINT32TradeSendData(p_trade:Trade笃p_databus:DataBus^)功能:调用商家方法发送数据总线中的数据输人项:Trade*p_tradeDataBus^p_databus输出项:S_OK成功其他失败注释:5.5Clientinfo客户端连接数据5.5.1类图Clientinfo影begin_timei^>timeout_time②trade_code:string^■interfacejd:string②pkggrp」d:int②pkg」dx:int5.5.2类描述类描述存放客户端连接数据和服务渠道数据成员描述begin_time开始放入的时间timeout_time预计超时时间(接口处理中有超时时间指定,不过目前基本都没指定)trade_code商家代码interface_id接口编号pkggrpjd报文组号pkgjdx报文序号ClientlnfoTable客户端连接数据表5.6.1类图5.6.2类描述功能:■存取客户端ClientlnfoTable连接数据■生成存取键值■定时清除超时的记录5.6.2.1程序描述getlnstance()Client工nfoTabl"getTnstang()功能:取得ClientlnfoTable的单?第PAGE\*MERGEFORMAT#页/共63页第PAGE\*MERGEFORMAT#页/共63页新宇软件SE1USKYSOFTWARE第49页/ft63页输人项:输出项:ClientlnfoTable^注释:用double-check加锁5.6.2.2程序描述addRecordSINT32addRecord(stringkey,Clientinfo*p_record)~~添加一条记录到表中如果已经有了重复的,删除以前的记录,释放记录中的渠道输人项:stringkey键值Clientinfop_recordp_record记录输出项:0成功已有项相同主键,但被释放・1失败注释:加锁5・6・2・3程序描述fetchRecordClientinfo*fetchRecord(key:string):功能:取得ClientlnfoTable中key对应的记录并从表中去掉和这条记录的联系,防止被清输人项:stringkey键值输出项:Clientlnfo^!=NULL己经找到==NULL没有找到注释:如果没有取到,可能已经被清理掉了加锁5.6.2.4程序描述clearTimeoutRecordsvoidclearTimeoutRecords()功能:査找并清除表中超时的记录遍历表里的连接记录,如果超时加入待释放的列最后遍历释放的列表査看每条待释放的记录査看记录中的Channel如果channel!=NULL释放channel删除这条记录输人项:输出项:注释:如果没有取到,可能已经被清理掉了加锁要测试删除的使用新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第51页,S63页第51页,S63页=7111'性能:主要是锁定的问题。遍历的时候必须加锁而释放渠道就不用加锁在遍历的情况下加锁,如果需要清除,加入列表777ill!最后在解锁的情况下对列表中元素进行释放测试新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第53页#共63页第53页#共63页新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页/共63页底层使用了ACE_Hash_Map_Manager_Ex在192.168.100.242上对1024条记录进行测试结果如下ill!插入1024条v6毫秒(0.006秒)遍历1024条<0.5毫秒(0.0005秒)取出1024条v6毫秒(0.006秒)取出1024条加入删除链表v8毫秒(0.008秒)单次插入大约5微秒(0.005毫秒)单次取出大约5微秒(0.005毫秒)5.6.2・5程序描述delete_a_client_infovoiddelete_a_client_info(Clientl:nfo*tmp_info)功能:删除一条记录,释放占用的渠道输人项:Clientlnfo^tmp_info输出项:注释:是一个内部的函数,是用来删除记录和渠道的工具不加锁5.6.2.6程序描述cleanupvoidcleanup()aS~~清空全部记录,释放占用的渠道输人项:输出项:注释:加锁5.6.2.7程序描述generateKeystringgenerateKey(DataBus*pdatabus)功能:从p_databus取相应字段生成键值输人项:DataBus^p_databus数据总线输出项:stringkey生成的键值注释:新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第55页,共63页第55页,共63页新宇软件KEUJSKYSOFTWARE第54页,S63页ClientlnfoTableMonitor客户端连接数据表监控程序5.7.1类图5.7.2类说明功能:存取客户端ClientlnfoTable连接数据生成存取键值定时清除超时的记录成员:ACE_Thread_tthread_idClientlnfoTable^p_tableintinterval_seconds程序描述ClientlnfoTableMonitorClientlnfoTableMonitor(Client工nfoTabUptable,intintervalseconds)~~构造函数,锁定目标Monitor,和时间间隔rrw输人项:ClientlnfoTable^p_table目标表intinterval间隔秒数输出项:注释:程序描述startupintstartup0~~启动监视线程输人项:输出项:o启动成功-1启动不成功注释:程序描述notify_cleanupvoidnotify_cleanup()功能:通知ClientlnfoTable做一次超时记录的清理输人项:输出项:注释:新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第56页/共63页第56页/共63页程序描述shutdownvoidshutdown()功能:关闭监视线程等待线程关闭后返回(join)输人项:输出项:注释:FrontMain主控程序5.8.1类间关系新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE5•&2流程图斥亠m々、沁皿新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页#共63页第PAGE\*MERGEFORMAT#页#共63页5・&3类说明功能启动和关闭整个系统ThreadlnSvcProcessorThreadRepIySvcProcessor都传递给InteTask木板生成说明:线程组全部采用赵镐■原来的体系结构,使用InterTaskTemplate只是有一点改动‘factory的Initialize最后再做保证ThreadlnSvcProcessor和ThreadRepIySvcProcessor2个线程执行函数构造函数类型为T(Trade*ptrade,SvcChannelFactory^pfactory,bool*_bexit);循环执行函数名为voidSvcRun();即可使用赵银原来的体系结构新宇软件KEUJSKYSOFTWARE新宇软件KEUJSKYSOFTWARE第PAGE\*MERGEFORMAT#页,ft63页第61页#ft63页5•&3.1程序描述FrontMainFrontMain(conststring&intradecode,conststring&replytradecode)功能:构造FrontMain输人项:conststring&in_txade_code接入请求的商家异步回conststring&reply_trade_code复的商家输出项:0启动成功-1启动失败注释:5・8・3・2程序描述InitEnvSINT32InitEnv()功能:系统环境初始化操作,打开数据库DbOpen()装载factory.soilibpackagefactory.so输人项:输出项:启动成功就不返回了,直到执行shutdown或者coredump退出!=0启动失败,退出注释:5•&3.3程序描述startupSINT32startup()aS~~启动整个系统输人项:输出项:==0启动成功就不返回了,直到执行shutdown或者coredump退出!=0启动失败,退出注释:启动顺序1.InitEnv,失败直接退出2•将目前MainApp.c
/
本文档为【接口详细设计文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索