int CSvrLink::Processing(ST_BUNIT *pBUnit) { int rtn; MSGBUF *pmb; RP_REQUEST rp; if (linksock.IsFree()) return(0); rp.iGRFrame = iGRFrame; rp.iLastReqType = htonl(iLastReqType); rp.iLastRetCode = htonl(iLastRetCode); rtn = SendMsg(MT_GETREQ,sizeof(rp),&rp); if (rtn!=0) { // 连接出现问题了:或被BCC关闭了 return(-1); } rtn = RecvMsg(pBUnit->iHBInterval); if (rtn>=(int)(sizeof(MSGHEAD))) { pmb = GetRecvMsg(); switch (pmb->head.msgtype) { case MT_LINKBEGIN: // Update some variables: if (pmb->head.len>=sizeof(AP_LINKBEGIN)) { AP_LINKBEGIN *pap; pap = (AP_LINKBEGIN *)(pmb->data); svr_hs1 = pap->bc1; iThisProcID = ntohl(pap->bu_number); } break; case EXITMSGTYPE: Close(); bExit = true; break; case WRITEAPPINFO: WriteAppInfo(bccBFuncNo,bccID); // 在主框架程序部分 break; case MT_GETREQ: // OK,have new request to process if (pmb->head.len>=sizeof(AP_REQUEST)+sizeof(ST_PACKHEAD)) { AP_REQUEST *prp = (AP_REQUEST *)(pmb->data); if (prp->iGRFrame==iGRFrame) { CallBPFunction(pmb); iGRFrame++; } } break; default: break; } } return(rtn); }
int CSvrLink::Processing(ST_BUNIT *pBUnit) { int rtn; MSGBUF *pmb; RP_REQUEST rp; if (linksock.IsFree()) return(0); rp.iGRFrame = iGRFrame; rp.iLastReqType = htonl(iLastReqType); rp.iLastRetCode = htonl(iLastRetCode); rtn = SendMsg(MT_GETREQ,sizeof(rp),&rp); if (rtn!=0) { // 连接出现问题了:或被BCC关闭了 return(-1); } GETNEXTMSG: rtn = RecvMsg(pBUnit->iHBInterval); if (rtn>=(int)(sizeof(MSGHEAD))) { pmb = GetRecvMsg(); switch (pmb->head.msgtype) { case MT_LINKBEGIN: // Update some variables: if (pmb->head.len>=sizeof(AP_LINKBEGIN)) { AP_LINKBEGIN *pap; pap = (AP_LINKBEGIN *)(pmb->data); svr_hs1 = pap->bc1; iThisProcID = ntohl(pap->bu_number); } break; case EXITMSGTYPE: Close(); bExit = true; break; case WRITEAPPINFO: (*pWriteAppInfo)(bccBFuncNo,bccID); // 在主框架程序部分 break; case MT_GETREQ: // OK,have new request to process if (pmb->head.len>=sizeof(AP_REQUEST)+sizeof(ST_PACKHEAD)) { AP_REQUEST *prp = (AP_REQUEST *)(pmb->data); if (prp->iGRFrame==iGRFrame) { CallBPFunction(pmb); iGRFrame++; } } break; /* ****** Updated by CHENYH at 2005-10-24 14:29:13 ****** */ // 当BU用CheckLink()发送MT_TESTLINK心跳检查的时候,BCC给BU反馈一个心跳检查应答, // 当BU用CheckLink()命令的时候,应该用tc2_tc1(GetTickCount(),m_lastrcvtick)与pBUnit->iHBInterval×2来比较 // BCC与BU在不稳定网络下,链路是否正常的。 case MT_TESTLINK: goto GETNEXTMSG; // 仅仅作为当BU给BCC发送MT_TESTLINK心跳检查时候,BCC给BU的心跳检查应答 break; /*******************************************************/ default: break; } } return(rtn); }