接口详细设计文档资料_第1页
接口详细设计文档资料_第2页
接口详细设计文档资料_第3页
接口详细设计文档资料_第4页
接口详细设计文档资料_第5页
已阅读5页,还剩56页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、接口详细设计文档作者:唐为(为哥)审核:赵锟日期:2005-5-27#+接口详细设计文档编写目的. 名词解释. 组件分布图 程序结构.接入处理线程类图接收线程类图启动控制图程序设计说明5.1对原系统的改动5.2ThreadlnSvcProcessor 接入处理器.1类图.35.2.4时序图流程图Thread In Svc Pro cessor 类说明P atternNewSy ncAsy ncinn erDir同异步向内处理模式5.3.1类图.5.3.2描述.5.3.3流程图5.3.4类说明ThreadReplySvcPro

2、cessor异步应答返回处理器5.4.1 类图5.4.2 类说明Clientinfo客户端连接数据5.5.1 类图5.5.2 类描述ClientinfoTable客户端连接数据表5.6.1 类图5.6.2 类描述Clie ntIn foTableM on itor客户端连接数据表监控程序5.7.1 类图1010121717181820252525343434353535393.2 类说明FrontMain主控程序5.8.1类间关系5.8.2 流程图5.8.3 类说明问题3941414243451编写目的预期读者:对接口行为和目的有一定了解的人背景说明软件系统名称:接口前端接

3、入服务器描述 接口 接收不同商家的接入,接收数据转发给主机服务器,并同步/异步将返回数据发给接入商家的行为2名词解释Cha nn elBase渠道,通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式目前有TCP短连接接入,从ACE Message_Queue中读取(IPC MessageQueue-> ACE_Message_Queue)Trade* trade商家对象,代表的其实是针对该商家处理方法的集合将接入数据的商家称为服务商家而将请求面向的商家称为主机商家,主机商家负责同步/异步返回交易的应答数据给接口平台而接口(数据交换)平台是在两者之间的交换平台渠道工厂:把

4、接入数据的渠道工厂统一定为服务渠道工厂,发送数据的渠道工厂统定为主机通道工厂3组件分布图各种服务渠道银联和主机通道抽ATM象类都是相同commserverIPC消息队AAATM接入服务器commserver11IPC消息队列ChannelBase,只是作用不同ATM连接队列IPC消息队TCP渠道TCP渠IPC消息队道列渠道除超连接记 录表IPC消息队列渠道IPC消息队列后台服r务器接收 线程查不到,丢弃IPC消4程序结构4.1接入处理线程类图SwChannalF Mtoryiradefrorn EKfurr)-工ru陽Gnsftfteig irwLBiuEO <urtLiSlA4 Svc

5、 &sindKlrxy0. cir rrfVtDecoDt4-£M*i| dHAdt:_runie oiar |mADENAMELEr1 j J_wornprEw40 BIWIM l/_cncn _na(a sihtjz 句radqjy 片 aihrr32理hfT左JrrRrie< veclof 5 nth > fcciiilFLri_sa- vczinr* S-HtXZ >JEIW OWeffTCf Ehg 吋 Ut 辆 Flty tKflThreadInSvc Processor是接入处理线程的TTW*1HCI blSwCProte SSOf主流程收数,

6、接包无误后将处理控制权交给*3vi:RunOfa斗flUefgai 出TiaxM n PrccK-5-(jRfquHfeSE 匚 uraJMPTCcessl) *rn rMJfTeOTCSTOUP rocess PatternProceasPatern"leni 社 KtcuBc是后续处理的全部流程抽象类*PrDcetBPaliefn(i+-d -drtujln- Moe Stindl) KcamodTvy *-=Mrtjii'=- S«Seru) + viflrtLkBl « Srtft«*(ji *<-:vrtual>> H

7、QntSETMJFUa* HfflTRecvFiie(5 如YWrta"anC3e«FllC<) *<<rhjali>> S«nec»ilfl<) pPKesefJ *4 心rthHiR Oe!3-em Ckhrn <narf| T*rea_ingijF4.2接收线程类图Cb&nttifoTableCiefih 怖餉tji« ACE.nnid.l/ QteKXs:ance mdei -: AiCE Ihread mulaibeghjiint (btpuouljinw*geirsmice)血翹拘d

8、ill*fc(c»*!«DnlO如(创皿:ill*tla>Timoutfi*tDrt()轴(flj曲 rt*giMeKtyi)*(IhpiiK)Trade(fromEieciMe)牯 tfultfodfl thifniA)ECODElJEN4lJi hv fTRADEhW/ ELEh+1 m_66nipwfijiag SINT3!£im2jwlejypf : HTJ; ._en_tiinH SIrO. vKlo(* iNT32 亠l#_DjHLn_ser: ector SNT3J >Ip_p3ct(_slralegif 'Genedt Fnir

9、farilaterl rttrfsM '$vcChanndFactoiy(ftonEiflCLiBili硝wChanndFadayD4.3启动控制图.P-iWLir*> Tw)e' 乐d3ila”bifs: Daiafius Ib_tii1: bouFTlfMdRe 商SwiProcossM*6etRec心annel申 jemjrade - Jrade''(i - OianrvelHase怖sdtRfc迹ata(phTtaM ChanrwIBasf* pa(ie : bad*: pj抽血£. DataBT.hCSJinw'对歯)int*l

10、lnpachRK'/&5(pi_ditabii5 : Cal aS us*) i1fete ient Irfc ReccrUkey itrirg).匚lierfc'*fieKnfftO3fa5ujtrtelp_tlleriinfs_record Oiertihfo', pjmtabui. OaU%*; ifH Tra(Je<lradt_CDde: am .'rade*怖MjeCMPnucKgig* Traoe'. p.dilstwj Dajfijil knt *CfEaitCMpiJtClMnnel(gdJi<比 TinMQ Cti(

11、nnea*' *Tr«eSefiilD«Bfp_tnde Tddr p卫abia: MaBii附:irt *TTiffiidReplySw Pio e«s «f(plrad( Tnd< pF圈鲫:SveClwn#adtr/. pBE 谄血©盯5程序设计说明5.1对原系统的改动改变原有商家Trade类,不存放渠道对象在商家类中,商家类只执行商家处理,不 负责渠道的管理改动原有的系统中所有模式的处理,模式处理必须对渠道的释放负责修改MidHstChannel,添加后台服务需要的2个 FML字段,这两个字段是:FML域名描述S_INTE

12、RF_NO接口标识号,整数。系统中接收异步响应程 序的唯一编号。用于标识请求的来源,异步 应答根据这个号码分发给具体的接口程序。S_TX_CTRL_ATTR交易控制属性,字符串。接口都填0,表示这 是正常的交易请求。5.2 Threadl nSvc Processor接入处理器5.2.1类图Thread kiSvc Processor*SvcRun(): void*a_process_loop(p S vcTrad e: Trade", pSvcChnFactory: SvcChanielFactory', pDataBus: DataBus'):SHT32 *Get

13、Channd(factory: SvcChannelFactorv timeval: ACE J砸 Jatue: parameter: string): ChanneBase* *TfadeRecvDatap_trade: Trade*, p_chrbase:C harried Base*, pjabbus: DataBus*, pjimeval: ACE_Time_Zalue'): int *Tfa-dlehPrDce55(ipi_trade: Trade*, p_databus: DataBus'): int*ExecPattenXpattein: P rocessPatt

14、erri p _databijs: DataBus", p_channel: ChannelBase*): int *RequestSecureFaile3 Pece詢(p-tra 犯:Trade; pjatabus: OataBus"); int *Thrq9dhSvcProce5wr(pTrade: Traded pFaqtory:Sv;ChanrelFactQfy pBExit; boor)522时序图T1 ieadlriSvcPoce55cx1: G9tChann9l(SvChann9lFactQr7*, ACE_Tirri9_Value', string)

15、”1 2 TradeRecvData(Trade*. ChannelBase*, DataBus*. ACE_Tirme_Value*)3 TradelnProcessfTrade*. DataBus*)如果是请求妄全出错 44: l©qu©stSGCur©l-ailedProcGSE( I rade*. Uatatlus*)pattern :5: createP atra rn 忖 evjSTnc a s/n c In ne rUi r6: ExecPattern(RreusessPattern*, DataBus*, ChannelCase*)7: lrocG

16、scUataSus ChannelHase", ACt Time Value后续处理全是调用 卩eitt弓E对尿完咸l预先说明:ChannelBase渠道通信基类,提供数据收发和释放的方法接口用子类实现来封装了不同通信方式。目前有TCP短连接接入。从 ACE Message_Queue中读取(IPCMessageQueue-> ACE_Message_Queue)Trade* trade商家:代表的其实是针对该商家处理方法的集合5.2.3流程图524 ThreadInSvcProcessor 类说明 功能收取用不同渠道接入的外部商家的请求识别,解包执行处理的模式具

17、体的流程在模式中控制,并不做控制模式可能有3种:1.无返回:发送后台,不接收应答对应模式PatternASyncinnerDir,需要修改原来的相关程序,在本文档中并不涉及2.有返回,根据返回的应答判断是同步返回还是异步返回如果接收的应答表明是同步返回,按正常模式返回如果接收的应答表明是异步返回,按异步模式处理对应模式Patter nN ewS yncASyncInn erDirThreadl nSvcProcessor后续的 Process Patter n 应该是PatternNewSy ncASy ncl nn erDir.ThreadI nSvcP rocessor 只负责接入后调用模

18、式,并处理异常情况3.安全异常情况的模式下,调用模式PatternErrorSyncinner来处理,必须限制:主要的改动是渠道的释放由模式来管理涉及模式有PatternASy ncinn erDirPatternNewSy ncASyn cI nn erDir , P atternErrorSy ncinner(可能不全面) 程序描述 ThreadInSvcProcessorThreadInSvc Processor(Trade* p trade,SvcChannelFactory* pfactory, bool*_bexit)功能:构造函数性能:输人项:Trade* trad

19、e接入数据处理的商家类SvcCha nn elFactory* p factory接入数据渠道工厂退出标志bool* exit输出项: 注释:5.243 程序描述SvcRunvoid SvcRun()功能:主控流程输人项:输出项:流程:服务商家在开始已经生成,生存周期里一直存在一个DataBus对象(数据总线),每线程一个DataBus对象。在生存周期里一直存在DataBus 对象初始化循环处理SINT32 reta_p rocess_l oop p factory,DataBus* p DataBus );if(bool* exit = true )释放渠道跳出循环为下一次使用清空 Data

20、Bus对象收尾处理,释放recv_trade(Trade*p tradeSvcChannelFactory*5.244 程序描述 a_process_loopSINT32 a_p rocess_loop(Trade*p trade,SvcChannelFactory*p factory,DataBus*p DataBus )功能:一次交易的处理输人项:Trade* pTrade ,接收数据的服务商家服务渠道SvcChannelFactory* pactory,服务商家接收数据的主机通道SvcCha nn elFactory * pFactory 服务商家渠道的生成工厂。DataBus* pDa

21、taBus预先创建的数据总线,不需要每次重建输出项:S 0K成功完成其他出错信息流程:依次执行TradeRecvDataGetChannel生成接入渠道 ChannelBase*除非出错,整个流程不释放该 ChannelBase ,服务商家接收数据(根据商家生成一个 ChannelBase 的子类) 委托给Patten负责释放Tradein ProcessIf( TradeIn Process 服务商家进入处理(最主要一项功能就是接口识别)成功&&安全函数出错)/安全函数一般是 mac校验失败if( p ack_t ype根据 p_databus-> pack_type是

22、请求)对请求和应答作2种不同的处理执行 RequestSecureFailed Processelse /应答报文结果是应答直接丢弃,返回成功不管结果如何都跳到异常处理,但是返回值可能因else函数调用SecureFailed Process的执行结果而不同否则生成Patern 对象 生成对方商家hst trade生成模式对象P attern,将服务商家和对方商家传入执行Exec Pattern执行具体的模式处理,将渠道委托给P atten负责释放异常处理记录出错信息和时间当异常发生在 ExecPattern之外,释放渠道结束处理(无论异常与否都执行):释放对方商家 h st trade释放模

23、式对象P attern注释:为了便于单元测试,从SvcRun中分离出该方法也可以在SvcRun中实现上述的全部逻辑5.245 程序描述 GetChannelSINT32 GetChannel(SvcChannelFactory*factory,ChannelBase*ACE Time Value*time_val )功能:调用svc_factory生成服务渠道性能:输人项:SvcChannelFactory*svc_factory渠道工厂ACE_Time_Value*time_val超时时间这个超时目前是一个固定值,和接收数据和发送数据的超时无直接联系Chann elBase* !=NULL

24、未取得 =NULL 取得输出项:返回值注释:出错信息在该方法中输出流程中只判断是否取得,没有取得则应该跳到开头进入下一次循环测试:对所有的可能生成的Cha nn elBase都进行一次测试5.246 程序描述 TradeRecvDataSINT32 TradeRecvData (T rade* p_recv_trade , ChannelBase* p_chnbase , DataBus* p_databus , ACE_Time_Value* time_out )功能:商家通过渠道接收数据放入p_databus中输人项:Chann elBase* p_chn base收取的渠道Trade*

25、p _recv_trade接收的商家DataBus* p_databus存放数据的DataBus输出项:ACE_Time_Value* time_out超时时间0成功-1读取失败或者超时注释:主流程不记录详细出错信息5.247 程序描述 TradeInProcessSINT32 TradelnProcess(Trade* p trade , DataBus* p databus )功能:执行商家的入口处理(识别,解包。)p_databus 的_data_buff和_len字段分别表示数据指针和长度输入处理后将数据填入P_databus 的 _var_ pool禾口 _var_reco_pool

26、 (识另U数据)_中输人项:Trade* p_ trade接收服务商家-1读取失败或者超时注释:没有超时限制,要控制短时间内完成DataBus* p_databus存放数据的 DataBus成功输出项:5.248程序描述 RequestSecureFailedProcessSINT32RequestSecureFailed Process(DataBus*p_databus,Trade*p_trade,ChannelBase* in_svc_channel)功能:对输入是请求报文的安全类函数失败后的处理(输入是应答报文的就直接丢弃)输人项:DataBus* p_databus 数据Trade*

27、 p_trade 输入服务商家输入服务的渠道Chann elBase* i n_svc_cha nnel输出项:S_OK 应答保报文,不加理会INTIDENERROR( SECUFAILED )请求报文,执行安全异常处理模式成功其他。请求报文,执行安全异常处理模式中出错注释:无论SecureFailedProcess的执行结果如何都不继续执行后面的操作5.249程序描述 Exec PatternSINT32 Exec Pattern( Process Pattern* pattern,DataBusProcess(p_ci5tabus : DataCus p_chanriel : Channe

28、lBase*. tin>e_val: ACE_Tirr»e_Valkie *: SINT32 TradeOutProcesspjrade : Trade*, pdalabus : DataBus*): intlearOataBus(pdatabus - DataBus*); voidallHo£t(pJrade ; Trade*, ip_datatxi& : DaiaBus*): SINT3Z TfadelnProc令$w(p_trade : Trade*. p_cJatabus : DataBus*): ints_sy nc_return(p_databus

29、 : Dat日Bus") _ bool p databus,ChannelBase*p_channel)功能:执行处理模式,全部处理交给pattern输人项:ProcessPattern* pattern 处理模式DataBus* p_databus存放数据的数据总线ChannelBase* channel输入服务渠道,交给Pattern管理释放输出项:S OK 成功其他 失败注释:ChannelBase*输入渠道,如果 Pattern没有生成等错误,还是主控来释放p_channelPattern,执行过最执行Pattern->Process后就不管了可能设置一个标志位来表示是

30、否执行了 后就不用释放channel 了(是否可以这样?SINT32 Exec Pattern( Process Pattern* pattern,DataBus* p_databus,ChannelBasei&_5ame_rw_&vcchannel(trade Trade"): txjolrea teCl is n 11 r fo(p_data bus : DataBu& p_channel: ChannelBase*): Client Into* *addToChentlnfaTable(key - stnng, info ; Client(n1b*) -

31、 midp_channel )主程序都删除 p_channel,但是ExecPattern有可能返回的 p_channel是NULL。此时的主控司异步向是什么都不做。如果非null就删除)5.3 P atternNewSy ncAsy ncl nn erDir内处理模式5.3.1类图PattemNewSyncAsyncInnerDir532描述预先了解:交换平台接入的是服务商家,发送的是主机商家(主机)P atternNewSy ncAsy ncinn erDir继承P rocess Patter n 类533流程图见下页#+534类说明 构造函数 PatternNewSyncA

32、synclnnerDirPatternNewSyncAsynclnnerDir(Trade * svc trade ,Trade *host trade );svc_trade和host_trade分别代表服务商家和主机商家5.342方法 ProcessSINT32 P rocess(DataBus * p_databus , ChannelBase* p_channel , ACE_Time_Value * time_val);DataBus * p_databus数据总线,包含了解包解开的数据(FML格式)Cha nn elBase* p_in cha nn el服务商家接入的渠道ACE_

33、Time_Value * time_val 超时时间 这样我们就拥有了处理需要的全部信息。而其他缺少的是在执行中生成的信息了服务商家. 二1接入渠道接口平台,<主机商家svc uadehosl lradeis_same_rw_cha nnel 来判断如果读写 渠道相同则使用原来的接入渠道原路 返回,不用生成SINT32 TradeOut Process( Trade* p_trade , DataBus* p_databus )将数据处理(打包,加密。)处理到发送前的状态 程序描述 TradeOutProcess功能:执行商家输出处理#+输人项:Trade* p_trade

34、商家DataBus* p _databus数据总线输出项:S 0K成功注释:其他失败5.344程序描述CallHostSINT32 CallHost( Trade* p_hst_trade , DataBus* p_databus )输人项:Trade* p_ hst_trade 主机商家DataBus* p _databus数据总线bool is_sync_return(DataBus* p_databus )输人项:DataBus* p_databus数据总线成功失败输出项:S 0K其他注释:实际上是封装了一次发送接收的处理在这个模式里并不考虑单发无返回的情况,全部 是发送后等待返回的情况

35、 功能:执行和主机商家的一次交互。执行的流程如下:创建主机商家发送的主机通道 发送数据if(读写不是同一条通道)释放发送主机通道设置发送主机通道为 NULL创建主机商家接收的主机通道接收数据释放接收的主机商家通道,在此过程中所有生成的通讯渠道都要负责清除失败情况分析:Cha nn elBase* sen d_cha nn el=NULL;ChannelBase* recv channel =NULL创建主机商家发送的主机通道失败问题: 当tuxedo出错的时候的处理如何进行回答:在目前的情况下,主机服务渠道实际上是tpcall后台,如果通讯失败,由该主机生成返回渠道实现中控制了该渠道的发送接收

36、必然返回同步成功, 码,复制请求数据到返回数据中返回码的生成是设置交易状态为同步返回S_TX_STATUS = 1设置响应码S_RSP_CD为“ 2023”设置响应码描述信息 S_lRSP DESC为“调用后台服务错误”交易或者通讯(tpcall)的失败由返回标志位和返回码来确定可能发生情况:1.同步失败可细分为通讯失败和后台处理返回失败(问题中的情况)2.同步成功同步执行完毕3.异步已发送异步处理,已经成功发送S_TX_STATUS = 05.345 程序描述 TradeInProcessSINT32 Tradein Process (T rade* p trade , DataBus* p

37、 databus )功能:执行主机商家的输入处理执行主机商家的对应操作,将p_databus中的原始数据识別出接口信息,转换成FML数据存放在p_databus 的 _var_pool 禾n_var_reco_pool 中输人项:Trade* p_ hst_trade 主机商家DataBus*p _databus数据总线输出项:S OK成功失败其他注释:5.346 程序描述 is_sync_return功能:查看p_databus,判断这次返回是否是同步返回#+输出项:true同步返回false异步返回注释:5.347 程序描述 is same rw svcchannelbool is sam

38、e rw svcchannel ( Trade* p trade )功能:查看该商家是否在同一链路上返回请求根据商家查看该商家的服务渠道定义查询如果没有定义了商家写的渠道,则表明读写渠道是一样的如果定义了商家写的渠道,则表明读写渠道是不同的输人项:Trade* p _trade服务商家输出项:true不是false注释:通过查看商家的读写渠道是否相同,可以在处理前明白是否可以提前释放读的渠道返回给商家的时候明白是否要生成新的写的渠道5.348程序描述 createClientinfo功能:创建一项异步返回的客户端连接记录无论p_channel是否=NULL,都填入新建的 Clientlnfo中

39、输人项:DataBus* p_databusChann elBase* p_cha nne返回的渠道只有读写原路返回的才!=NULL如果写要重新创建的填NULL可以的话用 ACE ASSERT判断一下输出项:Clie ntl nfo*客户连接记录!=NULL成功=NULL不大可能注释:5.349程序描述 addToClientInfoTablevoid addToClientlnfoTable( string key , Clientinfo* info )功能:创建一项异步返回的客户端连接记录输人项:string key键值目前是由ClientlnfoTable 的 generateKey(

40、p_databus :DataBus*)生成Clie ntin fo* i nfo记录输出项:Clientlnfo*客户连接记录注释:异步应答返回处Dread 斷能 w P rocessorThreadRe pl ySvc Processor bool*_bexit)(Trade*p tradeSvcChannelFactory*p factory.功能:构造函数5.4 ThreadRe plySvc Processor理器5.4.1类图4'p_recv_trade: Trade* p_sw:iii_fectofv: SvcCtianndFactoiY* 馳b exit bool*Sv

41、cRunO*a_p roc es5_kx)p (ptrad e: Trade*, pfectory: SvcChanneFactorf, pDaUBu: DataBua*): SIITO2 *GetRecvChannel (p_rec v_lra de: Trade*). CharmelBase*T rade Re c vO a tap-chnba se: ChanneJBase'. p_trade: Trade", p_databus. Da laB'us*, p_ti meoui, ACE_Tlm e_Value*); int *U npac k Rec vDat

42、af p_d'ata bus . DataQus*). inL*fetehC li rtinfo Rec ord (key: stnrg): Clienttifo'Recover D ata Biislnfofpclienti nb_ recad . Clienthfo*, p databus: Data Bus*) int*gerTradetfa)decode siring) TSde*T racteOutPcces s( p_tfade. Trade; pj ata bus: Data Bus'J mt*CreateOutputCharwi(oiJt_trade T

43、rade*) ChainelBase"*IradeSendDatap_trade : Traded P-Cbtmbus , Data创5*): int*ThreadReplySvcProcessor(pTrade Trade*. pFactofy: SwCharnelFaclory*, pBExil: bool*)5.4.2类说明542.1 程序描述 ThreadReplySvcProcessor性能:输人项:Trade* trade接收返回数据处理的商家类一服务商家,对于 ATM接口就是ATM服务商家SvcCha nn elFactory* p factory接收返回数据渠道工厂退

44、出标志bool* exit输出项: 注释:这里的服务商家就是存放在Clientinfo记录中的商家代码(trade_code)对应的服务商家,要根据trade_code来动态生成和释放Clientinfobeginjime %>timeout_time trade_codle : string interface_id : string 色巾kggrpd : int lpkgjdx : int542.2 程序描述SvcRunvoid SvcRun()主流程功能:接收主机商家异步交易返回的数据并向服务商家发送的输人项: 输出项: 流程:牛.成接收主机商家DataBus 初始化循环处理SIN

45、T32 ret = a_p rocess_loo p (p trade , SvcChannelFactory* pfactoryQataBus* p DataBus );清空DataBus,以便下次重复使用if(退出标志被设置并且渠道返回获得渠道收数为超时)#+跳出循环收尾处理,释放recv_trade注释:单次处理的方法在a_loop_process中实现542.3程序描述 a_process_loop商家Trade*然后调用TradeOutProcess生成对服务商家发送的数据SINT32a_p rocess_loop仃 rade*ptrade,SvcChannelFactory*p f

46、actory,DataBus*p DataBus )功能:一次交易的处理输人项:Trade* pTrade将应答数据返回对应的商家 (对于ATM接口就是ATMC对应的那个)SvcChannelFactory* pFactory主机商家接收数据的主机通道异步应答渠道的生成工厂DataBus* p DataBus预先创建的数据总线,不需要每次重建输出项:S OK成功完成流程其他出错信息设置主机商家接收通道和服务商家返回渠道,返回的服务商家为NULLChannelBase* recvChannel = NULL;ChannelBase* returnChannel = NULL;Trade* svc

47、Channel = NULL;先执行 GetRecvChannel取得接收数据的渠道(ChannelBase* ), 然后执行 TradeRecvDataRecvReplyData 收完数据可以释放recvChannel,取不到则直接跳到最后的出错处理收数据放入 DataBus 的_data buff , 长度放入_lenrecvChannel=NULL然后执行UnpackRecvData解开数据执行UnpackRecvData将数据解开为FML Buffer然后调用ClientInfoTable的generateKey方法生成键值然后调用 fetchClientInfoRecord取得记录

48、ClientInfoRecord*然后 RecoverDataBusInfo调用恢复返回前的 DataBus 信息然后根据 ClientInfoRecord* record的trade code中调用GetTrade取得要返回信息的服务#+然后判断是否要生成返回渠道ChannelBase* return_channel = clientinfo.channel;clientinfo.channel = NULL;/ 释放和 clientInfo的联系调用释放释放svc trade svc trade=NULif( return_channel = NULL )仓建 return_channel

49、 = CreateOutputChannel创建失败,转入出错处理TradeSendData向服务商家发送数据,失败转入出错处理return channel return channel=NULL出错处理:记录错误如果收发渠道!=NULL释放收发渠道 结束处理:如svc trade!=NULL释放 svc trade注释:为了便于单元测试,从SvcRun中分离出该方法也可以在SvcRun中实现上述的全部逻辑 可以单元测试 正常处理 以及 取渠道超时,输入处理失败,生成服务商家写渠道失败等情#+18: Sen dData(DataBus *, Cha nn elBase*, ACE_Time_V

50、alue*)inFactory :svc_trade :ThreadRe pl ySvc ProcessorSvcChannelFactoryTrade¥ 1: GetRecvCha nn el(Trade*)ClientlHfoTableResManager-2: GetCha nn el(ACE_Time_Value *, Cha nn elBase *, SINT32)3: TradeRecvData(Cha nn elBase*, Trade*, DataBus*, ACE_Time_Value*)4: RecvData(DataBus *, ACE_Time_Value *)5: Unp ackRecvData(DataBus*)6: getI nsta nc()7: generateKey(DctaBus*)8: fetchClie ntin foRecord(stri ng)9: fetchRecord(sting)10: RecoverDataBusI nfo(Clie ntin fo*, DataBus*)11: getTrade(stri ng)12: GetTrade(co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论