Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}