コード例 #1
0
ファイル: ServerClient.cpp プロジェクト: xkmld419/crawl
/***********************************************************************
    交易: CLIENT_LOGIN
    功能:远程监控客户端连接主监控时调用
    输入参数:
        iHostID(客户端主机ID, 对应WF_HOSTINFO.HOST_ID) 
          --客户端守护进程启动时建议默认根据hostname取ID
        sSysUserName(Unix 用户名)
    返回值:
        iLogID(登录ID; -1登录失败)
        sMsg(错误信息. 当iLogID == -1时有效)
----------------------------------------------------------------------*/
void CLIENT_LOGIN(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setLogID(-1); //输入参数不合法,登录失败
        ParaList.addMsg("登录主监控守护时输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    ParaList.getSysUserName(g_pShmTable->ClientReqInfo.m_sSysUserName);
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_CLIENT_LOGIN;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_CLIENT_LOGIN)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) {
            ParaList.setLogID(-1); //time out,failed
            ParaList.addMsg("登录主监控超时!");
            ParaList.getBuiltStr(sQqstBuf);
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有: 
    //SERVER_ACCEPT MAX_CLIENT_NUM SERVER_REJECT
    if (g_pShmTable->ClientReqInfo.m_iStatus == SERVER_ACCEPT){
        ParaList.setLogID(g_pShmTable->ClientReqInfo.m_iIndex);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == MAX_CLIENT_NUM)
    {
        ParaList.setLogID(-1);
        ParaList.addMsg("远程守护监控连接达到最大限制!");
    }
    else {
        ParaList.setLogID(-1);
        ParaList.addMsg(g_pShmTable->ClientReqInfo.m_sMsgBuf);
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}
コード例 #2
0
//Overrides the interation method
void ASafeInteract::OnInteraction_Implementation(AFirstPersonCharacter* Character)
{
	if (!bIsActive) return;
	Super::OnInteraction_Implementation(Character);
	
	if (IsLocked)
	{
		CharacterReference = Character;
		EnteringCombination = !EnteringCombination;

		if (EnteringCombination)
			Fade = 1.0;
		else
			Fade = -1.0;
	}
	else
	{
		UAudioComponent* SpeakerAudio2 = SafeUnlockSpeaker->GetAudioComponent();
		SpeakerAudio2->Play();
		UnlockSafe();
	}
}
コード例 #3
0
void ASafeInteract::Tick(float DeltaTime)
{
	APlayerController* c = GetWorld()->GetFirstPlayerController();
	if (!c) return;

	ACharacterHUD* h = Cast<ACharacterHUD>(c->GetHUD());
	if (!h) return;

	if (EnteringCombination)
	{
		if ((this->GetActorLocation() - CharacterReference->GetActorLocation()).Size() > 400.0f)
		{
			EnteringCombination = false;
			Fade = -1.0;
		}

		h->DrawSafeString = true;
		FString string = TestCombination;

		if (CombinationLength < COMBINATION_LENGTH)
		{
			string += "_";
			for (int i = 0; i < (COMBINATION_LENGTH - CombinationLength) - 1; i++)
			{
				string += " ";
			}
		}
		h->SafeString = string;

		if (CheckInput())
		{
			UAudioComponent* SpeakerAudio = SafeSpeaker->GetAudioComponent();
			UAudioComponent* SpeakerAudio2 = SafeUnlockSpeaker->GetAudioComponent();

			if (EnterCombination())
			{
				EnteringCombination = false;
				h->DrawSafeString = false;
				h->SafeString = "";

				SpeakerAudio2->Play();
				IsLocked = false;
				UnlockSafe();
				Fade = -1.0;
			}
			else
			{
				if (!SpeakerAudio->IsPlaying())
					SpeakerAudio->Play();
			}
		}
	}
	else
	{
		h->DrawSafeString = false;
		h->SafeString = "";
	}

	if (Fade != 0)
	{
		h->BlackBackgroundAlpha = FMath::Clamp(h->BlackBackgroundAlpha + (200 * DeltaTime * Fade), 0.0f, 150.0f);

		if (h->BlackBackgroundAlpha == 0.0f || h->BlackBackgroundAlpha == 150)
			Fade = 0;
	}
}
コード例 #4
0
ファイル: ServerClient.cpp プロジェクト: xkmld419/crawl
/***********************************************************************
    交易: SEND_REMOTEMSG
    功能:远程监控发送一个应用程序状态和输出信息到主监控
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
        iProecessID
        iProcessCnt
        cState(进程状态)
        iMainGuardIndex
        <sMsg=str_msg>...
    返回值:
        iResult(0-失败, 1-成功)
----------------------------------------------------------------------*/
void SEND_REMOTEMSG(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0); //输入参数不合法
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    //g_pShmTable->ClientReqInfo.m_cState = ParaList.getState();
    //strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,ParaList.getBuiltMsg());
    strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,sQqstBuf);
    
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_SEND_REMOTEMSG;

    ParaList.reset();
    int iTimeOut = 0;    
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_SEND_REMOTEMSG)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out,failed
            ParaList.addMsg("输出消息超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    // CLIENT_LOG_DEAD REMOTEMSG_SENT
    if (g_pShmTable->ClientReqInfo.m_iStatus == REMOTEMSG_SENT)
    {
        ParaList.setResult(1);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD) {
        ParaList.setResult(0);
        ParaList.addMsg("client log dead.");
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Failed. Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);    
}
コード例 #5
0
ファイル: ServerClient.cpp プロジェクト: xkmld419/crawl
/***********************************************************************
    交易: ACK_COMMAND
    功能:返回指令执行后的结果信息(在GET_COMMAND后调用)
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
        iProcessID(指令操作的进程ID)
        iOperation(指令动作) (1-start, 2-stop, 3-ChangeStatus, 4-Refresh)
        iResult(0-失败, 1-成功) 指令的执行情况
        sMsg(指令执行返回的文本信息)
    返回值:
        iResult(0-失败, 1-成功) 交易的执行情况
        //iMainGuardIndex(当指令为启动指令时,标识远程应用进程在主监控守护主机AppInfo中的下标)
        sMsg (失败原因)
----------------------------------------------------------------------*/
void ACK_COMMAND(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0); //输入参数不合法
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock the signal.
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    g_pShmTable->ClientReqInfo.m_iProcessID = ParaList.getProcessID();
    g_pShmTable->ClientReqInfo.m_iResult = ParaList.getResult();
    g_pShmTable->ClientReqInfo.m_iOperation = ParaList.getOperation();
    strcpy(g_pShmTable->ClientReqInfo.m_sMsgBuf,ParaList.getMsg());
    
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_ACK_COMMAND;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_ACK_COMMAND)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out,failed
            ParaList.addMsg("返回指令执行结果超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    // CLIENT_LOG_DEAD ACK_COMMAND_END
    if (g_pShmTable->ClientReqInfo.m_iStatus == ACK_COMMAND_END)
    {
        ParaList.setResult(1);
        //ParaList.setMainGuardIndex(g_pShmTable->ClientReqInfo.m_iMainGuardIndex);
        //ParaList.addMsg("已获取到iMainGuardIndex");
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD) {
        ParaList.setResult(0);
        ParaList.addMsg("client log dead.");
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Failed. Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    
    TWfLog::log(0,"server_client send ACK_COMMAND_END msg:%s",sQqstBuf);
    
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}
コード例 #6
0
ファイル: ServerClient.cpp プロジェクト: xkmld419/crawl
/***********************************************************************
    交易: GET_COMMAND
    功能:远程监控客户端获取其需要执行的指令时调用
    输入参数:
        iLogID(登录ID)
        iHostID(主机ID)
    返回值:
        iResult    (0-失败, 1-有操作指令, 2-当前无指令)
        iOperation (1-start, 2-stop, 3-ChangeStatus, 4-Refresh)
        iProcessID (指令操作的进程号)
        iStaffID
        iPlanID
        cState
        sMsg (iResult=0时存放失败信息; )
----------------------------------------------------------------------*/
void GET_COMMAND(TPSVCINFO *rqst)
{
    TParseBuff ParaList;
    char *sQqstBuf;
    sQqstBuf = tpalloc("STRING",NULL,MAX_CMAMSG_LEN);
		
    int iLen = rqst->len;
    memcpy(sQqstBuf, rqst->data, iLen);
    sQqstBuf[iLen] = 0;
    TrimHeadNull(sQqstBuf,iLen);
    
    DEFINE_QUERY(qry);
    qry.commit();
		qry.close();
		
    int iRet = ParaList.parseBuff(sQqstBuf);
    if (!iRet){
        ParaList.reset();
        ParaList.setResult(0);
        ParaList.addMsg("输入参数不合法!");
        ParaList.getBuiltStr(sQqstBuf);
        tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
    }
    
    //lock signal
    LockSafe(g_pShmTable->m_iClientLock,0);
    g_pShmTable->ClientReqInfo.m_iHostID = ParaList.getHostID();
    g_pShmTable->ClientReqInfo.m_iIndex = ParaList.getLogID();
    g_pShmTable->ClientReqInfo.m_iStatus = REQ_GET_COMMAND;
    
    ParaList.reset();
    int iTimeOut = 0;
    while(g_pShmTable->ClientReqInfo.m_iStatus == REQ_GET_COMMAND)
    { //wait...
        usleep(USLEEP_LONG);
        if (iTimeOut++ > TIME_OUT) { 
            ParaList.setResult(0); //time out
            ParaList.addMsg("获取指令超时!");            
            ParaList.getBuiltStr(sQqstBuf);            
            UnlockSafe(g_pShmTable->m_iClientLock,0);
            tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
        }
    }
    
    //主守护进程处理后的状态可能有:
    //REQ_COMMAND_RECV CLIENT_LOG_DEAD REQ_NO_COMMAND
    if (g_pShmTable->ClientReqInfo.m_iStatus == REQ_COMMAND_RECV){
        ParaList.setResult(1);
        ParaList.setOperation(g_pShmTable->ClientReqInfo.m_iOperation);
        ParaList.setProcessID(g_pShmTable->ClientReqInfo.m_iProcessID);
        ParaList.setStaffID(g_pShmTable->ClientReqInfo.m_iStaffID);
        ParaList.setPlanID(g_pShmTable->ClientReqInfo.m_iPlanID);
        ParaList.setState(g_pShmTable->ClientReqInfo.m_cState);
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == CLIENT_LOG_DEAD){
        ParaList.setResult(0);
        ParaList.addMsg("Err: CLIENT_LOG_DEAD");
    }
    else if (g_pShmTable->ClientReqInfo.m_iStatus == REQ_NO_COMMAND){
        ParaList.setResult(2);
    }
    else {
        ParaList.setResult(0);
        ParaList.addMsg("Err: Unknown reason.");
    }
    ParaList.getBuiltStr(sQqstBuf);
    UnlockSafe(g_pShmTable->m_iClientLock,0);
    tpreturn(TPSUCCESS,0L,sQqstBuf,strlen(sQqstBuf),0L);
}