Exemplo n.º 1
0
    def Sys_Schedule_RequestParamBlock(self):
        retParamBlockArray = []
        while( self.s_iCanSendRequestParamCount > 0):
            # 检查时间符合?
            assignWebNameBlock = self.Viul_Internal_ParamBlock_ReadEach_CTUnit()
            if( assignWebNameBlock):
                self.s_iCanSendRequestParamCount -= 1   # 执行数-1

                # 提交,发送
                retParamBlockArray.append( assignWebNameBlock)
                # 加入参数到等待完成队列
                self.s_bstrPromptWaitFinishParamSignArray.append(assignWebNameBlock.s_bstrUniqueSign)

                CTYLB_Log.ShowLog(0, 'send-task-center',
                                  'prompt-run-param-block:%d [%s]' % (len(assignWebNameBlock.s_bstrDomainNameArray), assignWebNameBlock.s_bstrUniqueSign))
                msgObject={
                    "monitor_type":"send-task-block",
                    "level":"info",
                    "target":"",
                    "plugin_id":assignWebNameBlock.s_iRunPluginID,
                    "block_id":assignWebNameBlock.s_bstrUniqueSign,
                    "block_size":len(assignWebNameBlock.s_bstrDomainNameArray),
                    "free_size":0,
                    "wait_size":0,
				    "success_size":0,
                    "result_code":0,
                    "msg":""}
                CTYLB_Log.ShowMonitor(msgType="PLC",msgObject=msgObject)
            else:
                break
        return retParamBlockArray
Exemplo n.º 2
0
    def Sys_Reply_ParamBlock_Result(self, bstrOrigParamBlockSign, iResultCode):
        bstrOrigParamBlockSign = CTYLB_MainSys_MiscFunc.SafeGetUTF8(bstrOrigParamBlockSign)

        self.Viul_FinishParamBlock( bstrOrigParamBlockSign, iResultCode)
        if( bstrOrigParamBlockSign in self.s_bstrPromptWaitFinishParamSignArray):
            bRemove = False
            if( iResultCode == CTYBot_CTUnit_CommonData.s_g_iIntValue_Task_Finish):
                bRemove = True
            elif( iResultCode == CTYBot_CTUnit_CommonData.s_g_iIntValue_Task_Finish_Fail):
                bRemove = True
            if( bRemove):
                self.s_bstrPromptWaitFinishParamSignArray.remove( bstrOrigParamBlockSign)
                CTYLB_Log.ShowLog( 0,'param-reply', 'block %s run-finish. %d, still_buff_len:[%d]' % (
                    bstrOrigParamBlockSign, iResultCode, len( self.s_bstrPromptWaitFinishParamSignArray)) )

                msgObject={
                    "monitor_type":"block-finish-reply",
                    "level":"info",
                    "target":"",
                    "plugin_id":self.s_iRunPluginID,
                    "block_id":bstrOrigParamBlockSign,
                    "block_size":0,
                    "free_size":0,
                    "wait_size":len( self.s_bstrPromptWaitFinishParamSignArray),
			        "success_size":0,
                    "result_code":iResultCode,
                    "msg":""}
                CTYLB_Log.ShowMonitor(msgType="PLC",msgObject=msgObject)
                pass
        pass
Exemplo n.º 3
0
    def Sys_Reply_SendResultCount_Finish(self, iResultCount, bstrRequestCTUnitSign):
        CTYLB_Log.ShowLog( 0, 'recv-task-center', 'recv result count:%d' % (iResultCount))
        msgObject={
                    "monitor_type":"send-task-block-reply",
                    "level":"info",
                    "target":"",
                    "plugin_id":self.s_iRunPluginID,
                    "block_id":"",
                    "block_size":0,
                    "free_size":0,
                    "wait_size":0,
			        "success_size":iResultCount,
                    "result_code":0,
                    "msg":""}
        CTYLB_Log.ShowMonitor(msgType="PLC",msgObject=msgObject)
Exemplo n.º 4
0
def CTYBot_Frame_CommonData_CallBack(bstrFromName, param1, param2,
                                     commDataCTUnit, execCallBackUnit):
    if (commDataCTUnit.s_iType == CTYBot_CTUnit_CommonData.s_g_iType_int):
        CTYLB_Log.ShowLog(
            0, 'common-callback', '>>> exactly, data receive %d - %d' %
            (commDataCTUnit.s_strParam1, commDataCTUnit.s_iValue))
    elif (commDataCTUnit.s_iType == CTYBot_CTUnit_CommonData.s_g_iType_string):
        CTYLB_Log.ShowLog(
            0, 'common-callback',
            '>>> exactly, data receive: [%s]' % (commDataCTUnit.s_strValue))
    else:
        CTYLB_Log.ShowLog(
            0, 'common-callback',
            'unknown data receive, type:%d' % (commDataCTUnit.s_iType))
    pass
Exemplo n.º 5
0
def HandleSendDataToEchoSrv():
    curExecTime = datetime.now()
    newCTUnit = CTYBot_CTUnit_CommonData()

    strLarge = 'xxsseefa'
    iLargeRandCount = random.randint(5200, 18000)
    for iSub in range(iLargeRandCount):
        strLarge += 'xx11223344xqwe333dd3xx11223344xqwe3333xx11223344xqwe3333xx11223344xqwe3333xx11223344xqwe3333xx11223344xqwe3333'
    strContent = '1 hello %s, huge:%d, mid-huge-size:%d,' % (
        curExecTime.strftime('%H:%M:%S'), iLargeRandCount, len(strLarge))
    strContent += strLarge
    newCTUnit.SetStrData(strContent)

    global g_strLastSendContent
    g_strLastSendContent = strContent

    CTYLB_Log.ShowLog(
        0, 'send', "send huge count:%d total size:%d" %
        (iLargeRandCount, len(strContent)))

    newCTUnit1 = CTYBot_CTUnit_CommonData()
    strContent = '2 hello %s, I am %s' % (curExecTime.strftime('%H:%M:%S'),
                                          g_strSelfID)
    newCTUnit1.SetStrData(strContent)

    newCTUnit2 = CTYBot_CTUnit_CommonData()
    strContent = '3 hello %s, I am %s' % (curExecTime.strftime('%H:%M:%S'),
                                          g_strSelfID)
    newCTUnit2.SetStrData(strContent)

    retCTArray = [newCTUnit, newCTUnit1, newCTUnit2]
    return retCTArray
 def HandleRecvSockCTUnit(self, cTUnit):
     if (cTUnit.s_iMyDataType
             == CTYLB_Bot_BaseDef.s_g_iDataType_TaskRegCenter_sk_v1
             and cTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
             s_g_iMainCmd_TaskRegCenter_Assign_WebNameBlock
             and cTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
             s_g_iSubCmd_TaskRegCenter_Assign_WebNameBlock):
         CTYLB_Log.ShowLog(
             0, u'Recv-CallBack',
             u' Recv WebParamBlock cmd [%s]' % (cTUnit.s_bstrUniqueSign))
         newRunParamUnit = CThreadRunParamUnit(u'n/a', cTUnit)
         self.s_waitRunParamUnit.append(newRunParamUnit)
         pass
     # 结果通用单元
     elif (cTUnit.s_iMyDataType
           == CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask
           and cTUnit.s_iBotCmd_Main
           == CTYLB_Bot_BaseDef.s_g_iMainCmd_CommonTask_SingleData):
         if (cTUnit.s_iBotCmd_Sub ==
                 CTYLB_TaskReg_Cmd_BaseDef.s_g_iSubCmd_Sample):
             pass
         elif (cTUnit.s_iBotCmd_Sub ==
               CTYLB_Bot_BaseDef.s_g_iSubCmd_CommonTask_SingleData):
             if (cTUnit.s_iValue == CTYBot_CTUnit_CommonData.
                     s_g_iIntValue_Query_DExecHost_Send_Result_Count):
                 # [任务中心->执行插件主机] 查询完成的结果单元个数。strParam1=最大可发送个数。
                 # 在单位时间发送内容中,实现发送数据的功能
                 pass
     pass
 def PopSizeResultCTUnitArray(self, iTotalExSize=1024000):
     iCurSendCount = 0
     bLooping = True
     retResultCTUnitArray = []
     iCurExSize = 0
     # 查找任务完成等待取结果的单元
     while (bLooping):
         bAllEmpty = True  # 是否全部为空
         for eachThread in self.s_runThreadMang:
             if (iCurExSize >= iTotalExSize):
                 bLooping = False
                 break
             bstrFromName, resultRunUnit = eachThread.Safe_Pop_Retrive_MiddleResult_Unit(
             )
             if (bstrFromName and resultRunUnit):
                 iCurSendCount += 1  # 发送个数 + 1
                 bAllEmpty = False  # 至少一个有内容,不为空
                 strMsg = u'send type:%d cmd:%d-%d sign:%s' % (
                     resultRunUnit.s_iMyDataType,
                     resultRunUnit.s_iBotCmd_Main,
                     resultRunUnit.s_iBotCmd_Sub,
                     resultRunUnit.s_bstrUniqueSign)
                 CTYLB_Log.ShowLog(0, u'bot', strMsg)
                 retResultCTUnitArray.append(resultRunUnit)
                 iCurExSize += resultRunUnit.GetTotalSize()
             pass
         if (bAllEmpty):  # 如果全部为空,那么,跳出循环
             break
     return retResultCTUnitArray
Exemplo n.º 8
0
def HandleRecvCTUnit_OPResult(hlSockMang, iEachAcceptSock, ctUnitArray):
    retDataArray = []
    iReplyAddResultCount = 0
    
    for eachCTUnit in ctUnitArray:
        eachRetCommCTUnit = None
        eachRetCommCTUnitArray = []
        if( eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask):
            if( eachCTUnit.s_iValue == g_i_OpResult_SubCmd_AddResult):
                SubHandle_OPResult_AddResult( eachCTUnit.s_strValue, eachCTUnit.s_strParam1, eachCTUnit.s_strParam2)
                iReplyAddResultCount += 1

        if( eachRetCommCTUnit):
            retDataArray.append(eachRetCommCTUnit)
        if( eachRetCommCTUnitArray):
            retDataArray.extend( eachRetCommCTUnitArray)

    if( iReplyAddResultCount>0):
        CTYLB_Log.ShowLog(0, u'result-write', u'write %d result count' % iReplyAddResultCount)

    retCommCTUnit = CTYBot_CTUnit_CommonData()
    retCommCTUnit.SetIntData( g_i_OpResult_SubCmd_ReplyAddResult)
    retCommCTUnit.SetStrData( str(iReplyAddResultCount).encode())

    retDataArray.append(retCommCTUnit)
    hlSockMang.PassiveSend_To_AcceptSock(iEachAcceptSock, retDataArray)
    pass
Exemplo n.º 9
0
 def environment_event_handle(signum, frame):
     '''
     系统全局事件处理函数,主要处理Ctrl+C等终止事件
     '''
     CTYLB_Log.ShowLog(1, "Ctrl+C",
                       "Ctrl+C keyboard event detected...[Exiting]")
     global IS_SYS_RUNNING
     IS_SYS_RUNNING = False
Exemplo n.º 10
0
 def CloseSockByIndex(self, iSockIndex):
     destCloseSock = self.__GetSockByIndex(iSockIndex)
     if (destCloseSock):
         # 搜索单元。
         if (self.s_ExecMutex.acquire()):
             if (destCloseSock in self.s_sockArray):
                 destCloseSock.Vilu_Close()
                 CTYLB_Log.ShowLog(0, 'HLSockMang',
                                   'sock closed.[%d]' % (iSockIndex))
             else:
                 CTYLB_Log.ShowLog(
                     1, 'HLSockMang',
                     'sock found but not exist.[%d]' % (iSockIndex))
             self.s_ExecMutex.release()
     else:
         CTYLB_Log.ShowLog(1, 'HLSockMang',
                           'Close not exist sock.[%d]' % (iSockIndex))
     pass
Exemplo n.º 11
0
def CtrlCHandle(signum, frame):
    global g_bSysRunning
    CTYLB_Log.ShowLog(1, 'CTRL_C', "Ctrl+C Input, exiting")
    msgObject = {
        "monitor_type": "status",
        "level": "error",
        "target": "",
        "plugin_id": -1,
        "block_id": "",
        "block_size": 0,
        "free_size": 0,
        "wait_size": 0,
        "success_size": 0,
        "result_code": 0,
        "msg": "Ctrl+C keyboard detected, PLC exiting..."
    }
    CTYLB_Log.ShowMonitor(msgType="PLC", msgObject=msgObject)
    g_bSysRunning = False
Exemplo n.º 12
0
    def Sys_Reply_Plugin_RunParam_Count(self, iPluginID, iRemoteTaskCenterFreeCount):
        if( iPluginID == self.s_iRunPluginID):
            self.s_iCanSendRequestParamCount = iRemoteTaskCenterFreeCount
            CTYLB_Log.ShowLog( 0, 'recv-task-center', 'plugin:%d free:%d' % (iPluginID, iRemoteTaskCenterFreeCount))

            msgObject={
                    "monitor_type":"recv-task-block-free",
                    "level":"info",
                    "target":"",
                    "plugin_id":iPluginID,
                    "block_id":"",
                    "block_size":0,
                    "free_size":iRemoteTaskCenterFreeCount,
                    "wait_size":0,
				    "success_size":0,
                    "result_code":0,
                    "msg":""}
            CTYLB_Log.ShowMonitor(msgType="PLC",msgObject=msgObject)
Exemplo n.º 13
0
def HandleRecvSockCTUnit(hlSockMang, iEachAcceptSock, ctUnitArray):
    retDataArray = []
    for eachCTUnit in ctUnitArray:
        if( eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask):
            retCommData = CTYBot_CTUnit_CommonData()
            retCommData.SetStrData( eachCTUnit.s_strValue)
            CTYLB_Log.ShowLog(0, u'recv & reply', eachCTUnit.s_strValue)
            retDataArray.append(retCommData)
    hlSockMang.PassiveSend_To_AcceptSock(iEachAcceptSock, retDataArray)
    pass
Exemplo n.º 14
0
 def Vilu_Close(self):
     bSendClose = True
     # 如果已经连接,发送关闭数据包
     if (bSendClose):
         # 构造关闭数据包,发送远端
         CTYLB_Log.ShowLog(
             0, 'HLSockMang',
             'send sock close to peer.[%d]' % (self.s_iLocalPort))
         self.Exec_SendClose_To_RemotePeer()
     # 设置状态
     CTYBot_SockUnit_Base.Vilu_Close(self)
Exemplo n.º 15
0
def HandleRecv_OPWeiXin_CTUnit(recvCTUnit):
    if (recvCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask
        ):
        if (recvCTUnit.s_iValue == g_i_OpWeiXin_SubCmd_Reply_GetLoginCode):
            CTYLB_Log.ShowLog(
                0, 'recv-wx-data',
                'recv login-code-reply:[] param: [%s] : [%s]' %
                (recvCTUnit.s_strParam1, recvCTUnit.s_strParam2))
        elif (recvCTUnit.s_iValue == g_i_OpWeiXin_SubCmd_Reply_Get_ChatText):
            CTYLB_Log.ShowLog(
                0, 'recv-wx-data',
                'recv reply-chat result:[%s] param: [%s] : [%s]' %
                (recvCTUnit.s_strValue, recvCTUnit.s_strParam1,
                 recvCTUnit.s_strParam2))
        elif (recvCTUnit.s_iValue == g_i_OpWeiXin_SubCmd_Reply_SendChatContent
              ):
            CTYLB_Log.ShowLog(
                0, 'recv-wx', 'recv sendtext-reply:[%s] param: [%s] : [%s]' %
                (recvCTUnit.s_strValue, recvCTUnit.s_strParam1,
                 recvCTUnit.s_strParam2))
    pass
Exemplo n.º 16
0
 def Handle_SystemNotify_ClientStatus(self, iSystemNotifyClientStatus,
                                      strDestClientName):
     # 在 Tylb_Support_Client.py的 CTYLB_MidBalance_InOutBuffMang 中定义。
     if (iSystemNotifyClientStatus == 0):
         # client restart
         # 搜索所有connect和accept的管套。如果是,则设置关闭标志
         if (self.s_ExecMutex.acquire()):
             for eachSock in self.s_sockArray:
                 if ((eachSock.s_iType
                      == CTYBot_SockUnit_Base.s_g_iType_Accept)
                         or (eachSock.s_iType
                             == CTYBot_SockUnit_Base.s_g_iType_Connect)):
                     if (eachSock.s_strRemoteID == strDestClientName):
                         eachSock.Vilu_Close()
                         CTYLB_Log.ShowLog(
                             0, u'HLSockMang',
                             u'Client Restart, sock:%d->%s:%d closed' %
                             (eachSock.s_iLocalPort, strDestClientName,
                              eachSock.s_iRemotePort))
             self.s_ExecMutex.release()
         pass
     elif (iSystemNotifyClientStatus == 1):  # client init startup
         # 搜索所有connect和accept的管套。如果是,则设置关闭标志
         if (self.s_ExecMutex.acquire()):
             for eachSock in self.s_sockArray:
                 if ((eachSock.s_iType
                      == CTYBot_SockUnit_Base.s_g_iType_Accept)
                         or (eachSock.s_iType
                             == CTYBot_SockUnit_Base.s_g_iType_Connect)):
                     if (eachSock.s_strRemoteID == strDestClientName):
                         eachSock.Vilu_Close()
                         CTYLB_Log.ShowLog(
                             0, u'HLSockMang',
                             u'Client Init-StartUP, sock:%d->%s:%d closed' %
                             (eachSock.s_iLocalPort, strDestClientName,
                              eachSock.s_iPeerPort))
             self.s_ExecMutex.release()
         pass
     pass
Exemplo n.º 17
0
    def Viul_Notify_Recv_RunResult(self, bstrParamSign, iReplyPluginID, bstrOrigDomain, bstrResult):
        bstrParamSign = CTYLB_MainSys_MiscFunc.SafeGetUTF8(bstrParamSign)
        bstrOrigDomain = CTYLB_MainSys_MiscFunc.SafeGetUTF8(bstrOrigDomain)
        bstrResult = CTYLB_MainSys_MiscFunc.SafeGetUTF8(bstrResult)

        bstrShowResult = bstrResult
        s2 = bstrShowResult.replace(b'\r', b'')
        bstrShowResult = s2.replace(b'\n', b'')
        CTYLB_Log.ShowLog( 0, 'result-arrive', '[%s] - [%s] [%d] [%s]' % (bstrParamSign, bstrOrigDomain, iReplyPluginID, bstrShowResult))
        msgObject={
            "monitor_type":"result",
            "level":"info",
            "target":bstrOrigDomain,
            "plugin_id":self.s_iRunPluginID,
            "block_id":"",
            "block_size":0,
            "free_size":0,
            "wait_size":0,
			"success_size":0,
            "result_code":0,
            "msg":bstrResult
            }
        CTYLB_Log.ShowMonitor(msgType="PLC",msgObject=msgObject)
        pass
Exemplo n.º 18
0
 def Vilu_Close(self):
     bSendClose = False
     if (self.s_iStatus == CTYBot_SockUnit_Base.s_g_iStatus_Connecting):
         bSendClose = True
     elif (self.s_iStatus == CTYBot_SockUnit_Base.s_g_iStatus_Connected):
         bSendClose = True
     # 如果已经连接,发送关闭数据包
     if (bSendClose):
         # 构造关闭数据包,发送远端
         CTYLB_Log.ShowLog(
             0, 'HLSockMang',
             'connect sock send closed.[%d]' % (self.s_iLocalPort))
         self.Exec_SendClose_To_RemotePeer()
         pass
     CTYBot_SockUnit_Base.Vilu_Close(self)
Exemplo n.º 19
0
 def __AssignFreeParamToExecPluginHost(self, execPluginHost):
     if (execPluginHost.s_lastClientStatusData and
             execPluginHost.s_lastClientStatusData.s_iCanRecvTaskCount > 0):
         # 找有空闲请求,而且等待时间最长的任务
         freeRequestHost = self.__Query_RequestCanRunParam_MostWaitTime()
         if (freeRequestHost):
             freeParam = freeRequestHost.PopFrom_WaitArray_StoreSign_To_ExecParamArray(
             )
             if (freeParam):
                 # 分配,发送
                 iExecPluginID = CTYLB_TaskCenter_HostMang.GetParamUnit_PluginID(
                     freeParam)
                 if (iExecPluginID):
                     # 完成发送,执行删除参数,放到运行队列.
                     # 发送到远程执行主机
                     CTYLB_Log.ShowLog(
                         0, 'TRC_host_mang', "send param [%s] to [%s]" %
                         (freeParam.s_bstrUniqueSign,
                          execPluginHost.s_bstrHostIDName))
                     execPluginHost.s_toBeSendCTUnitArray.append(freeParam)
                     # 加入到主机的执行队列
                     execPluginHost.s_bstrTaskParamSignArray.append(
                         freeParam.s_bstrUniqueSign)
                     # 分配一个,减少一个值
                     if (execPluginHost.s_lastClientStatusData):
                         execPluginHost.s_lastClientStatusData.s_iCanRecvTaskCount -= 1
                 else:
                     # 回复失败,设置任务完成。
                     freeRequestHost.SetTaskFinish(
                         freeParam.s_bstrUniqueSign)
                     # set task finish & failure.
                     replyCommUnit = CTYBot_CTUnit_CommonData()
                     replyCommUnit.SetIntData(
                         CTYBot_CTUnit_CommonData.
                         s_g_iIntValue_Task_BCast_Fail_No_Host)
                     replyCommUnit.SetParam(freeParam.s_bstrUniqueSign, '')
                     freeRequestHost.s_clientResultCTUnitArray.append(
                         replyCommUnit)  # 加入到结果队列
                 pass
     pass
Exemplo n.º 20
0
                                                    eachCTUnit.s_strParam1,
                                                    eachCTUnit.s_strParam2)


# ################################################################################################
#   主程序入口 实现
# ################################################################################################
if __name__ == '__main__':
    #获取配置文件路径及文件名,文件夹不存在则创建
    config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                              u"config")
    config_file = os.path.join(config_dir, u"config.ini")
    if not os.path.exists(config_dir):
        os.makedirs(config_dir)
    if not os.path.isfile(config_file):
        CTYLB_Log.ShowLog(0, u'Main',
                          u'[%s] config file missing...Quit!' % g_strProgName)
        #配置文件不存在,直接退出
        os._exit(-1)

    db_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), u"db")
    db_file = os.path.join(db_dir, u"data.db")
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)

    # 创建机器人框架
    g_LessTYLB_Bot_FrameThread = CLessTYBotFrameThread(config_file, db_file)
    # 设置默认环境处理
    g_LessTYLB_Bot_FrameThread.SetDefaultConsoleCompatible(CtrlCHandle)
    # 准备运行
    g_LessTYLB_Bot_FrameThread.Prepare_Start()
Exemplo n.º 21
0
def CtrlCHandle(signum, frame):
    global g_bSysRunning
    CTYLB_Log.ShowLog(1, 'CTRL_C', "Ctrl+C Input, exiting")
    g_bSysRunning = False
Exemplo n.º 22
0
    newCTUnit2.SetStrData(strContent)

    retCTArray = [newCTUnit, newCTUnit1, newCTUnit2]
    return retCTArray


# 主程序入口
if __name__ == '__main__':
    #获取配置文件路径及文件名,文件夹不存在则创建
    config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                              "config")
    config_file = os.path.join(config_dir, "config.yaml")
    if not os.path.exists(config_dir):
        os.makedirs(config_dir)
    if not os.path.isfile(config_file):
        CTYLB_Log.ShowLog(0, 'Main',
                          '[%s] config file missing...Quit!' % g_strProgName)
        #配置文件不存在,直接退出
        os._exit(-1)

    db_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "db")
    db_file = os.path.join(db_dir, "data.db")
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)

    # 创建机器人框架
    g_LessTYLB_Bot_FrameThread = CLessTYBotFrameThread(config_file, db_file)
    # 设置默认环境处理
    g_LessTYLB_Bot_FrameThread.SetDefaultConsoleCompatible(CtrlCHandle)
    # 准备运行
    g_LessTYLB_Bot_FrameThread.Prepare_Start()
    g_strSelfID = g_LessTYLB_Bot_FrameThread.GetMyName()
Exemplo n.º 23
0
    def Vilu_TimerCheck(self):
        bRetValue = False

        # 对每个扫描任务进行检查调度
        for eachPromptTask in self.s_RunnDTaskArray:
            if( eachPromptTask.Vilu_ExecTimerCheck()):
                bRetValue = True

        if( self.s_x_TaskRegCenter_Sock.ExecNextCheck()):
            bRetValue = True
        if( self.s_x_TaskRegCenter_Sock.CanExecSendData()):
            bRetValue = True
            # 对每个任务的准备函数进行调用
            needPromptParamArray = []
            for eachDTask in self.s_RunnDTaskArray:
                curParamArray = eachDTask.Sys_Schedule_RequestParamBlock()
                needPromptParamArray.extend(curParamArray)
                # 请求插件ID的空余数量
                newCommDataCTUnit = CTYBot_CTUnit_CommonData()
                newCommDataCTUnit.SetIntData(CTYBot_CTUnit_CommonData.s_g_iIntValue_Query_PluginID_Run_ParamBlock_Count)
                newCommDataCTUnit.SetParam(str(eachDTask.s_iRunPluginID).encode(), b'')
                needPromptParamArray.append(newCommDataCTUnit)
            # 提交发送
            if( not needPromptParamArray):
                newCommDataCTUnit = CTYBot_CTUnit_CommonData()
                needPromptParamArray.append( newCommDataCTUnit)
            self.s_x_TaskRegCenter_Sock.ExecSendData( needPromptParamArray)
            pass

        recvCTArray = self.s_x_TaskRegCenter_Sock.PopRetriveRecvCTArray()
        if( recvCTArray):
            bRetValue = True
            bstrPeerName, iPeerPort = self.s_hlSockMang.GetSockPeerAddr(self.s_x_TaskRegCenter_Sock.s_iExecConnectSockIndex)
            for eachUnit in recvCTArray:
                # CTYLB_Log.ShowLog(0, 'data-receive', 'from [%s:%d] recv [%d]' % (strPeerName, iPeerPort, eachUnit.s_iMyDataType))
                msgObject = {
                    "monitor_type": "status",
                    "level": "info",
                    "target": "",
                    "plugin_id": -1,
                    "block_id": "",
                    "block_size": 0,
                    "free_size": 0,
                    "wait_size": 0,
                    "success_size": 0,
                    "result_code": 0,
                    "msg": "PLC received <%d> bytes from <%s:%d>" % (eachUnit.s_iMyDataType, bstrPeerName, iPeerPort)
                }
                CTYLB_Log.ShowMonitor(msgType="PLC", msgObject=msgObject)

                if (eachUnit.s_iMyDataType == CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask):
                    self.HandleRecv_CommonData(bstrPeerName, eachUnit)
                elif (eachUnit.s_iMyDataType == CTYLB_Bot_BaseDef.s_g_iDataType_TaskRegCenter_sk_v1):
                    if (eachUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.s_g_iMainCmd_TaskRegCenter_ReportResult_V2):
                        self.HandleRecv_Result_V2(bstrPeerName, eachUnit)
                        self.s_x_TaskRegCenter_Sock.SetNextTempSendWaitTick(0)   # 有结果到达,可能还有结果数据,这时候不等待,立即再发送获取
                    elif (eachUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.s_g_iMainCmd_TaskRegCenter_ReportResult):
                        self.HandleRecv_Result(bstrPeerName, eachUnit)
                        self.s_x_TaskRegCenter_Sock.SetNextTempSendWaitTick(0)   # 有结果到达,可能还有结果数据,这时候不等待,立即再发送获取
                else:
                    CTYLB_Log.ShowLog(1, 'data-receive', 'Unknown packet:%d-%d-%d' % (eachUnit.s_iMyDataType,
                                                                                      eachUnit.s_iBotCmd_Main,
                                                                                      eachUnit.s_iBotCmd_Sub))
                    msgObject = {
                        "monitor_type": "status",
                        "level": "warning",
                        "target": "",
                        "plugin_id": -1,
                        "block_id": "",
                        "block_size": 0,
                        "free_size": 0,
                        "wait_size": 0,
                        "success_size": 0,
                        "result_code": 0,
                        "msg": "PLC unknown package received <Type:%d,MainCMD:%d,SubCMD:%d>"
                               % (eachUnit.s_iMyDataType, eachUnit.s_iBotCmd_Main, eachUnit.s_iBotCmd_Sub)
                    }
                    CTYLB_Log.ShowMonitor(msgType="PLC", msgObject=msgObject)

                pass

        return bRetValue
Exemplo n.º 24
0
# 主程序入口
if __name__ == '__main__':
    msgObject = {
        "monitor_type": "status",
        "level": "info",
        "target": "",
        "plugin_id": -1,
        "block_id": "",
        "block_size": 0,
        "free_size": 0,
        "wait_size": 0,
        "success_size": 0,
        "result_code": 0,
        "msg": "PLC starting..."
    }
    CTYLB_Log.ShowMonitor(msgType="PLC", msgObject=msgObject)
    iNextFileReadPos = 0

    iArgCount = len(sys.argv)
    if (iArgCount < 2):
        print('input run: [skip_block_count], default is 0')
    elif (iArgCount >= 2):
        iNextFileReadPos = int(sys.argv[1])

    msgObject = {
        "monitor_type": "status",
        "level": "info",
        "target": "",
        "plugin_id": -1,
        "block_id": "",
        "block_size": 0,
Exemplo n.º 25
0
    def __init__(self,
                 connect_to_socks=None,
                 loop_event_callbacks=None,
                 listen_socks=None,
                 listen_accpet_callback=None,
                 config_file="config/config.yaml",
                 report_status=False,
                 report_interval=60,
                 comment=""):
        '''
        功能Bot初始化对象
        :param connect_to_socks: 需要连接的套管对象集合,字典格式{"连接端的惟一ID":创建连接对应的指令值}
        :param loop_event_callbacks: 需要在每次主轮询时执行的函数回调集合,一般用于数据库检测操作,List集合
        :param listen_socks: 需要监听的套管对象ID集合,List格式[ID]
        :param config_file: 配置文件路径,默认为"./config/config.ini"
        :param report_status: 是否向节点状态监测节点发送节点状态信息:True-发送当前节点状态信息,False-不发送当前节点状态信息,默认为False
        :param report_interval: 状态汇报时间间隔,单位秒,默认60秒
        :param comment: 节点描述/备注,用于描述节点功能说明,默认为""
        '''
        # 功能Bot的名字,一般与配置文件中一致
        self.__bot_name = get_config_value(config_file, 'client.myid')
        self.__connect_to_socks = connect_to_socks if connect_to_socks else {}
        self.__listen_socks = listen_socks if listen_socks else []
        self.__listen_accept_callback = listen_accpet_callback
        self.__config_file = config_file
        self.__report_status = report_status
        self.__report_interval = report_interval
        self.__last_report_time = time.time()
        self.__node_comments = comment
        self.__connect_to_callbacks = {}
        self.__listen_callbacks = {}
        self.__loop_event_callbacks = loop_event_callbacks if loop_event_callbacks else []
        self.__node_status = NodeStatus(name=self.__bot_name,
                                        comment=self.__node_comments)
        # 增加节点当前状态汇报
        if self.__report_status:
            self.__add_report_status_sock_callbacks()

        assert (isinstance(self.__connect_to_socks, dict))
        if len(self.__listen_socks) < 1 and len(
                self.__connect_to_socks.keys()) < 1:
            CTYLB_Log.ShowLog(
                2, "Error Sock Pipes",
                "Connect to socks and Listen socks could not be zero at the same time."
            )
            exit(-1)
        # 需要发送到服务端的数据队列数组,可能连接到多个服务端,因此以字典形式存储每个对应的发送队列数组
        self.__connect_wait_to_send_arrays = {}
        # 监听模式下,只有一个监听行为
        # 监听模式下需要发送的数据队列数组
        self.__listen_wait_to_send_arrays = []
        # 初始化客户端发送队列数组
        for key in self.__connect_to_socks.keys():
            for port in self.__connect_to_socks[key]:
                if key not in self.__connect_wait_to_send_arrays.keys():
                    self.__connect_wait_to_send_arrays[key] = {}
                self.__connect_wait_to_send_arrays[key][port] = []
                if self.__report_status:
                    sockInfo = SockInfo(name=key,
                                        operateId=self.__connect_to_socks[key])
                    obj = sockInfo.dump_obj()
                    key = CTYLB_MainSys_MiscFunc.SafeGetUnicode(key)
                    self.__node_status.SocksInfo['Socks'][key] = obj
Exemplo n.º 26
0
    def run(self):
        global IS_SYS_RUNNING
        IS_SYS_RUNNING = True
        # 获取配置文件路径及文件名,文件夹不存在则创建
        config_file = os.path.abspath(self.__config_file)
        if not os.path.isfile(config_file):
            CTYLB_Log.ShowLog(
                0, 'Main',
                '[%s] config file missing...Quit!' % self.__bot_name)
            # 配置文件不存在,直接退出
            os._exit(-1)

        db_dir = os.path.join(os.path.abspath("."), u"db")
        db_file = os.path.join(db_dir, "{0}.db".format(self.__bot_name))
        if not os.path.exists(db_dir):
            os.makedirs(db_dir)
        # 创建机器人框架
        botFrameThread = CLessTYBotFrameThread(config_file, db_file)
        # 设置默认对环境全局事件处理
        botFrameThread.SetDefaultConsoleCompatible(
            FBotV4.environment_event_handle)
        # 准备运行
        botFrameThread.Prepare_Start()

        # 获得通讯管套管理对象
        sockManager = botFrameThread.s_HLSockMang

        connectToSocks = {}
        # 获得通讯管套管理对象、操作结果以及操作参数块
        for key in self.__connect_to_socks.keys():
            connectToSocks[key] = {}
            for port in self.__connect_to_socks[key]:
                # 若为状态汇报,则间隔时间由用户指定
                if key == TYFBOT_STATUS_MANAGER_IDENTIFY_NAME:
                    sock = CTYFBot_OpSession_ConnectSock(
                        hlSockMang=sockManager,
                        strDestSrvName=key,
                        iDestPort=port,
                        iDefaultIdleTick=self.__report_interval)
                else:
                    sock = CTYFBot_OpSession_ConnectSock(
                        hlSockMang=sockManager,
                        strDestSrvName=key,
                        iDestPort=port,
                        iDefaultIdleTick=1)
                connectToSocks[key][port] = sock

                CTYLB_Log.ShowLog(
                    0, 'exec',
                    'Start HLSock connect remote [{0}:{1}]  --{2}'.format(
                        key, port, self.__bot_name))

        listenSocks = []
        acceptSocks = []
        for sockID in self.__listen_socks:
            listenSock = sockManager.CreateListenSock(sockID)
            listenSocks.append(listenSock)

        iFreeCount = 0
        while IS_SYS_RUNNING:
            isTaskBusy = False
            for key in connectToSocks.keys():
                for port in connectToSocks[key].keys():
                    sock = connectToSocks[key][port]
                    if (sock.ExecNextCheck()):
                        isTaskBusy = True

                    if (sock.CanExecSendData()):
                        for port in self.__connect_to_callbacks[key].keys():
                            execSendCTArray = self.__connect_send_package_handle(
                                key, port)
                            sock.ExecSendData(execSendCTArray)
                        isTaskBusy = True
                        if self.__report_status:
                            if key in self.__node_status.SocksInfo[
                                    'Socks'].keys():
                                self.__node_status.SocksInfo['Socks'][key][
                                    'Status'] = "Up"
                                self.__node_status.SocksInfo['Socks'][key][
                                    'TotalSend'] += len(execSendCTArray)
                                self.__node_status.SocksInfo['Socks'][key][
                                    'LastSendTime'] = NodeStatus.get_now_timestamp(
                                    )
                                self.__node_status.SocksInfo[
                                    'TotalSend'] += len(execSendCTArray)
                    recvCTArray = sock.PopRetriveRecvCTArray()

                    if (not recvCTArray):
                        bSockExist, recvCTArray = sockManager.PassiveRecv_From_ConnectSock(
                            sock.s_iExecConnectSockIndex)
                        if (not bSockExist):
                            CTYLB_Log.ShowLog(
                                0, 'exec', 'sock close by remote. restarting.')
                            sock.Close()

                    if (recvCTArray):
                        isTaskBusy = True
                        strPeerName, iPeerPort = sockManager.GetSockPeerAddr(
                            sock.s_iExecConnectSockIndex)
                        if isinstance(strPeerName, bytes):
                            strPeerName = strPeerName.decode()
                        isNonePackageReply = True
                        arrayLen = len(recvCTArray)
                        if self.__report_status:
                            if key in self.__node_status.SocksInfo[
                                    'Socks'].keys():
                                self.__node_status.SocksInfo['Socks'][key][
                                    'Status'] = "Up"
                                self.__node_status.SocksInfo['Socks'][key][
                                    'TotalRecv'] += arrayLen
                                self.__node_status.SocksInfo['Socks'][key][
                                    'LastRecvTime'] = NodeStatus.get_now_timestamp(
                                    )
                                self.__node_status.SocksInfo[
                                    'TotalRecv'] += arrayLen
                        packageCount = 0
                        for eachUnit in recvCTArray:
                            packageCount += 1
                            eachRetCommCTUnitArray = self.__connect_to_basic_handle(
                                key, port, eachUnit, packageCount == arrayLen)
                            if eachRetCommCTUnitArray:
                                isNonePackageReply = False
                                self.__connect_wait_to_send_arrays[key][
                                    port].extend(eachRetCommCTUnitArray)
                        if isNonePackageReply:
                            defaultPackage = CTYBot_CTUnit_CommonData()
                            self.__connect_wait_to_send_arrays[key][
                                port].append(defaultPackage)
            # 若存在监听服务
            for listenSock in listenSocks:
                # 监听服务通信检查,检查新接受的连接
                newClientSockIndex = sockManager.ExAcceptNewListenArriveSock(
                    listenSock)
                if newClientSockIndex:
                    strPeerName, iPeerPort = sockManager.GetSockPeerAddr(
                        newClientSockIndex)
                    if isinstance(strPeerName, bytes):
                        strPeerName = strPeerName.decode()
                    if self.__listen_accept_callback:
                        self.__listen_accept_callback(
                            listen_sock_id=listenSock,
                            peer_name=strPeerName,
                            peer_port=iPeerPort,
                            client_index=newClientSockIndex)
                    CTYLB_Log.ShowLog(
                        0, u'New Client Accept',
                        u'From [%s:%d] new HLConnect %d accept.' %
                        (strPeerName, iPeerPort, newClientSockIndex))
                    bTaskBusy = True
                    acceptSocks.append(newClientSockIndex)
                    if self.__report_status:
                        # 添加Listen端SockInfo
                        sockInfo = SockInfo(name=strPeerName,
                                            operateId=key,
                                            sockType='Listen')
                        self.__node_status.SocksInfo['Socks'][
                            strPeerName] = sockInfo.dump_obj()
                        self.__node_status.SocksInfo['Socks'][strPeerName][
                            'Status'] = "Up"
                    pass
                for iEachAcceptSock in acceptSocks:
                    # 检查有否新数据包到达
                    strPeerName, iPeerPort = sockManager.GetSockPeerAddr(
                        iEachAcceptSock)
                    if isinstance(strPeerName, bytes):
                        strPeerName = strPeerName.decode()
                    bSockExist, ctUnitArray = sockManager.ActiveRecv_From_AcceptSock(
                        iEachAcceptSock)
                    if (not bSockExist):
                        # 检查是否管套已经关闭
                        if self.__report_status:
                            if strPeerName in self.__node_status.SocksInfo[
                                    'Socks'].keys():
                                self.__node_status.SocksInfo['Socks'][
                                    strPeerName]['Status'] = "Down"
                        CTYLB_Log.ShowLog(
                            0, u'Accept Client Closed',
                            u'Accept sock %d closed' % (iEachAcceptSock))
                        acceptSocks.remove(iEachAcceptSock)

                        break
                    else:
                        if (ctUnitArray):
                            bTaskBusy = True
                            self.__listen_basic_handle(sockManager,
                                                       iEachAcceptSock,
                                                       ctUnitArray)
                            if self.__report_status:
                                if strPeerName in self.__node_status.SocksInfo[
                                        'Socks'].keys():
                                    self.__node_status.SocksInfo['Socks'][
                                        strPeerName]['Status'] = "Up"
                                    self.__node_status.SocksInfo['Socks'][
                                        strPeerName]['TotalRecv'] += len(
                                            ctUnitArray)
                                    self.__node_status.SocksInfo['Socks'][
                                        strPeerName][
                                            'LastRecvTime'] = NodeStatus.get_now_timestamp(
                                            )
                                    self.__node_status.SocksInfo[
                                        'TotalRecv'] += len(ctUnitArray)
            # 循环需要调用的回调处理,比如定时从数据库读取任务发送等
            for loop_event_callback in self.__loop_event_callbacks:
                loop_event_callback()

            if (not isTaskBusy):
                iFreeCount += 1
                if (iFreeCount > 50):
                    time.sleep(0.01)
            else:
                iFreeCount = 0

        for key in connectToSocks.keys():
            for port in connectToSocks[key]:
                connectToSocks[key][port].Close()
        connectToSocks = {}
        listenSocks = []

        botFrameThread.SafeStop()
        CTYLB_Log.ShowLog(0, "System Exited", "Bye Bye!")
Exemplo n.º 27
0
 def Handle_ExecPlugin_RecvSockCTUnit(self, hlSockMang, iExecPluginSock,
                                      ctUnitArray):
     execPluginHost = self.SearchHostUnitBySockIndex(iExecPluginSock, False)
     if (execPluginHost):
         execPluginHost.UpdateLastActiveTime()
         lastOrigReqHostUnit = None  # 上次查询的主机单元值
         for eachCTUnit in ctUnitArray:
             bUnitHandled = False
             if (not bUnitHandled):
                 # 向任务中心报告当前状态
                 if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                         s_g_iDataType_TaskRegCenter_sk_v1):
                     if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                          s_g_iMainCmd_TaskRegCenter_ReportMyStatus) and
                         (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                          s_g_iSubCmd_TaskRegCenter_ReportMyStatus_None)):
                         bUnitHandled = True
                         execPluginHost.s_lastClientStatusData = eachCTUnit
                         pass
             if (not bUnitHandled):
                 # 结果报告的命令
                 if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                         s_g_iDataType_TaskRegCenter_sk_v1):
                     if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                          s_g_iMainCmd_TaskRegCenter_ReportResult) and
                         (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                          s_g_iSubCmd_TaskRegCenter_ReportResult_PingTraceWebCrawl
                          )):
                         bUnitHandled = True
                         taskUnitReportResult = eachCTUnit
                         bOrigParamExist, origReqHostUnit = self.Search_OrigTaskSign_ReqHostUnit_By_UniqueSign(
                             taskUnitReportResult.s_bstrOrigTaskUniqueSign,
                             lastOrigReqHostUnit)
                         if (bOrigParamExist and origReqHostUnit):
                             origReqHostUnit.s_clientResultCTUnitArray.append(
                                 taskUnitReportResult)
                             lastOrigReqHostUnit = origReqHostUnit
                         pass
             if (not bUnitHandled):
                 # 结果报告单元V2
                 if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                         s_g_iDataType_TaskRegCenter_sk_v1):
                     if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                          s_g_iMainCmd_TaskRegCenter_ReportResult_V2) and
                         (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                          s_g_iSubCmd_TaskRegCenter_ReportResult_V2_PingTraceWebCrawl
                          )):
                         bUnitHandled = True
                         taskUnitReportV2Result = eachCTUnit
                         bOrigParamExist, origReqHostUnit = self.Search_OrigTaskSign_ReqHostUnit_By_UniqueSign(
                             taskUnitReportV2Result.
                             s_bstrOrigTaskUniqueSign, lastOrigReqHostUnit)
                         if (bOrigParamExist and origReqHostUnit):
                             origReqHostUnit.s_clientResultCTUnitArray.append(
                                 taskUnitReportV2Result)
                             lastOrigReqHostUnit = origReqHostUnit
                         pass
             if (not bUnitHandled):
                 # 结果通用单元
                 if (eachCTUnit.s_iMyDataType ==
                         CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask):
                     if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                          s_g_iMainCmd_CommonTask_SingleData) and
                         (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                          s_g_iSubCmd_CommonTask_SingleData)):
                         bUnitHandled = True
                         lastOrigReqHostUnit = self.__Handle_ExecPluginHost_Recv_CommCTUnit(
                             execPluginHost, eachCTUnit,
                             lastOrigReqHostUnit)
         # 把主机空闲的参数块,分配到该主机。
         self.__AssignFreeParamToExecPluginHost(execPluginHost)
         # 发送数据包。发送后,清除
         if (len(execPluginHost.s_toBeSendCTUnitArray) > 0):
             toBeSendArray = execPluginHost.s_toBeSendCTUnitArray
         else:
             tmpCommCTUnit = CTYBot_CTUnit_CommonData()
             tmpCommCTUnit.SetIntData(0)
             toBeSendArray = [tmpCommCTUnit]
         hlSockMang.PassiveSend_To_AcceptSock(iExecPluginSock,
                                              toBeSendArray)
         execPluginHost.s_toBeSendCTUnitArray = []
     else:
         CTYLB_Log.ShowLog(
             1, 'TRC_host_mang',
             "Invalid ExecPluginSocket HL_Socket %d not exist" %
             (iExecPluginSock))
         pass
Exemplo n.º 28
0
    def Handle_PromptorRequester_RecvSockCTUnit(self, hlSockMang,
                                                iPromptorSock, ctUnitArray):
        requestorHost = self.SearchHostUnitBySockIndex(iPromptorSock, True)
        if (requestorHost):
            for eachCTUnit in ctUnitArray:
                bUnitHandled = False
                if (not bUnitHandled):
                    # 单个参数块分配
                    if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                            s_g_iDataType_TaskRegCenter_sk_v1):
                        if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                             s_g_iMainCmd_TaskRegCenter_AssignTask) and
                            (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                             s_g_iSubCmd_TaskRegCenter_AssignTask_Param)):
                            bUnitHandled = True
                            requestorHost.s_waitExecParamArray.append(
                                eachCTUnit)
                            pass
                if (not bUnitHandled):
                    # 广播参数块分配
                    if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                            s_g_iDataType_TaskRegCenter_sk_v1):
                        if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                             s_g_iMainCmd_TaskRegCenter_AssignTask) and
                            (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                             s_g_iSubCmd_TaskRegCenter_AssignTask_BroadCast_Param
                             )):
                            bUnitHandled = True
                            requestorHost.s_waitBroadCastParamArray.append(
                                eachCTUnit)
                            pass
                if (not bUnitHandled):
                    # 域名参数块分配
                    if (eachCTUnit.s_iMyDataType == CTYLB_Bot_BaseDef.
                            s_g_iDataType_TaskRegCenter_sk_v1):
                        if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                             s_g_iMainCmd_TaskRegCenter_Assign_WebNameBlock)
                                and
                            (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                             s_g_iSubCmd_TaskRegCenter_Assign_WebNameBlock)):
                            bUnitHandled = True
                            requestorHost.s_waitExecParamArray.append(
                                eachCTUnit)
                            pass
                if (not bUnitHandled):
                    if (eachCTUnit.s_iMyDataType ==
                            CTYLB_Bot_BaseDef.s_g_iDataType_CommonTask):
                        if ((eachCTUnit.s_iBotCmd_Main == CTYLB_Bot_BaseDef.
                             s_g_iMainCmd_CommonTask_SingleData) and
                            (eachCTUnit.s_iBotCmd_Sub == CTYLB_Bot_BaseDef.
                             s_g_iSubCmd_CommonTask_SingleData)):
                            bUnitHandled = True
                            self.__Handle_PromptRequestor_Recv_CommCTUnit(
                                requestorHost, eachCTUnit)
            # 调度数据包发送回去。
            totalNeedSend = []
            # 把最多某个个长度的数组存入
            # 发送 回复单元
            iCanSendCount = CTYLB_TaskCenter_HostMang.s_g_iMaxSendTotalCTUnitCount
            iArrayLen = len(requestorHost.s_toBeSendReplyCTUnitArray)
            if (iArrayLen > 0):
                iHaveSendCount = iArrayLen if (
                    iCanSendCount > iArrayLen) else iCanSendCount
                totalNeedSend.extend(
                    requestorHost.s_toBeSendReplyCTUnitArray[:iHaveSendCount])
                stillSaveArray = requestorHost.s_toBeSendReplyCTUnitArray[
                    iHaveSendCount:]
                requestorHost.s_toBeSendReplyCTUnitArray = stillSaveArray

            # 发送结果单元
            iArrayLen = len(requestorHost.s_clientResultCTUnitArray)
            iCanSendCount = CTYLB_TaskCenter_HostMang.s_g_iMaxSendTotalCTUnitCount - len(
                totalNeedSend)
            if (iArrayLen > 0 and iCanSendCount > 0):
                iHaveSendCount = iArrayLen if (
                    iCanSendCount > iArrayLen) else iCanSendCount
                totalNeedSend.extend(
                    requestorHost.s_clientResultCTUnitArray[:iHaveSendCount])
                stillSaveArray = requestorHost.s_clientResultCTUnitArray[
                    iHaveSendCount:]
                requestorHost.s_clientResultCTUnitArray = stillSaveArray

            if (not totalNeedSend):
                # 如果为空的队列,增加临时单元,保证队列不为空
                replyCommUnit = CTYBot_CTUnit_CommonData()
                totalNeedSend.append(replyCommUnit)

            hlSockMang.PassiveSend_To_AcceptSock(iPromptorSock, totalNeedSend)
        else:
            CTYLB_Log.ShowLog(
                1, 'TRC_host_mang',
                "Invalid Promptor HL_Socket %d not exist" % (iPromptorSock))
            pass
Exemplo n.º 29
0
#   下面是主程序入口
# ################################################################################################
if __name__ == '__main__':
    s_g_iTaskMang_Listen_Port_PromptTask = 3  # 任务管理中心,对任务提交者的监听端口
    s_g_iTaskMang_Listen_Port_PluginStatusResult = 4  # 任务管理中心,插件报告状态,和传回结果。收到后,发送参数块过去

    # bot = FBot(name='TaskRegCenter', listen_mode=True, listen_operate_id=)

    #获取配置文件路径及文件名,文件夹不存在则创建
    config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                              u"config")
    config_file = os.path.join(config_dir, u"config.ini")
    if not os.path.exists(config_dir):
        os.makedirs(config_dir)
    if not os.path.isfile(config_file):
        CTYLB_Log.ShowLog(0, u'Main',
                          u'[%s] config file missing...Quit!' % g_strProgName)
        #配置文件不存在,直接退出
        os._exit(-1)

    db_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), u"db")
    db_file = os.path.join(db_dir, u"data.db")
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)

    # 创建机器人框架
    g_LessTYLB_Bot_TRC_Srv_FrameThread = CLessTYBotFrameThread(
        config_file, db_file)
    # 设置默认环境处理
    g_LessTYLB_Bot_TRC_Srv_FrameThread.SetDefaultConsoleCompatible(CtrlCHandle)
    # 注册用到的数据单元,当HLSession单元收到后,里面用到的单元数据
    g_LessTYLB_Bot_TRC_Srv_FrameThread.RegisterNewCTUnit(
Exemplo n.º 30
0
    hlSockMang.PassiveSend_To_AcceptSock(iEachAcceptSock, retDataArray)
    pass


# ################################################################################################
#   主程序入口 实现
# ################################################################################################
if __name__ == '__main__':
    #获取配置文件路径及文件名,文件夹不存在则创建
    config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                              u"config")
    config_file = os.path.join(config_dir, u"config.ini")
    if not os.path.exists(config_dir):
        os.makedirs(config_dir)
    if not os.path.isfile(config_file):
        CTYLB_Log.ShowLog(0, u'Main',
                          u'[%s] config file missing...Quit!' % g_strProgName)
        #配置文件不存在,直接退出
        os._exit(-1)

    db_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), u"db")
    db_file = os.path.join(db_dir, u"data.db")
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)

    # 链接主数据库
    g_mainOperateWeiXinDB.ReConnect(u"172.16.56.130", 3306, u"testzhuangshiqi",
                                    u"abc888+222@@@", g_ustr_WeiXinBot_DBName)

    # 创建机器人框架
    g_LessTYLB_Bot_FrameThread = CLessTYBotFrameThread(config_file, db_file)
    # 设置默认环境处理