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 main(int argc, char *argv[]) { QString APP_ID = (APP_DEBUG) ? UNIQUIE_DEBUG_ID : UNIQUE_ID; SingleApplication App(argc, argv,APP_ID); //check if there is another process running if(App.AlreadyExists()) { App.SendInstanceMessage(QString(APP_MESSAGE_SHOWAPP)); return 0; } WriteAppInfo(APP_LOCAL_VERSION_FILENAME,QString::number(APP_MAJOR_VERSION),QString::number(APP_MINOR_VERSION)); CheckUpdaterFiles(APP_UPDATER); bool Args = false; if(!APP_DEBUG) { if(argc < 2) { Args = true; QString UpdaterPath = QApplication::applicationDirPath() + QDir::separator() + APP_UPDATER; // Check if an updater exists QFile Updater(UpdaterPath); if(!Updater.exists()) { if(QMessageBox::critical(0,"Error","Cannot find Ouroboros Updater.exe, please re-install Ouroboros") == QMessageBox::Ok) return 0; } QProcess::startDetached(UpdaterPath,QStringList()); } } if(!Args) { //run the application Ouroboros Window; Window.show(); Window.raise(); Window.activateWindow(); App.connect(&App,SIGNAL(MessageAvailable(QStringList)),&Window,SLOT(RecievedMessageFromInstance(QStringList))); return App.exec(); } return 0; }