Ejemplo n.º 1
0
    def GetPackages_Send_To_FBotSrv(self):
        retCTUnitArray = []

        bSendList = True
        # 如果没有修改,则等更长时间再发送
        if (not self.s_FiberMang.PopRetrive_RemoteExec()):
            if (not self.s_FBotSendFbUnitList_TimerCheck.CheckTimeDiff()):
                bSendList = False
        if (bSendList):
            # 发送纤程列表名字
            comuFiberList = CUTRC_NATs_ComuFiberList()
            comuFiberList.GetFromFiberMang(self.s_FiberMang)

            retCTUnitArray.append(
                FBotV4.make_package(
                    Share_UTRC_CfgDef.g_iFBot_Cmd_Report_FbUnitList_To_Srv,
                    comuFiberList.ExportToStr()))

        if (self.s_toBeSend_FBot_PackageArray):
            retCTUnitArray.extend(self.s_toBeSend_FBot_PackageArray)
            self.s_toBeSend_FBot_PackageArray.clear()

        if (not retCTUnitArray):
            if (self.s_timeDiff_SendInit.CheckTimeDiff()):
                retCTUnitArray.append(
                    FBotV4.make_package(
                        Share_UTRC_CfgDef.g_iFBot_Cmd_Nop_SendEcho_To_Srv))

        return retCTUnitArray
Ejemplo n.º 2
0
    def Exec_Reply_Message_Result(self, iFromDomainType, strMsgContent):
        comuMsgUnit_ReplyResult = CUTRC_NATs_Comu_RunMessageUnit()
        if (comuMsgUnit_ReplyResult.LoadFromStr(strMsgContent)):
            iDomainType, strDestClientName = self.s_collect_FbNameDict_Mang.GetRemoteClientName_By_FbUnit_Content(
                comuMsgUnit_ReplyResult.s_strFromFbUnit_FullName, comuMsgUnit_ReplyResult.s_strFromFbUnit_StrParam,
                comuMsgUnit_ReplyResult.s_lFromFbUnit_lParam1, comuMsgUnit_ReplyResult.s_lFromFbUnit_lParam2)

            strFrom, strDest = self.GetFromDestFullName(comuMsgUnit_ReplyResult)
            CTYLB_Log.ShowLog(0, "执行 回复", "[%s] -> [%s]:%d" % (strFrom, strDest, comuMsgUnit_ReplyResult.s_iRun_MessageID))

            if (strDestClientName):
                if (iDomainType == Collect_FbNameDict_Mang.s_g_iType_LocalPeerNats):
                    # 传递给该client单元
                    self.s_AsyncNATS_ProcComu.AddContentToSend(
                        strDestClientName, Share_UTRC_CfgDef.g_iFbUTRC_Cmd_Reply_Message_Result,
                        strMsgContent)

                elif (iDomainType == Collect_FbNameDict_Mang.s_g_iType_Local_FBotClient):
                    # 增加到队列
                    newPackage = FBotV4.make_package(command_id=Share_UTRC_CfgDef.g_iFbUTRC_Cmd_Reply_Message_Result,
                                                     value=strMsgContent)
                    # 传递给FBot单元
                    toBeSendArray = []
                    if (strDestClientName in self.s_toBeSend_FBotClient_PackageDict.keys()):
                        toBeSendArray = self.s_toBeSend_FBotClient_PackageDict[strDestClientName]
                    else:
                        self.s_toBeSend_FBotClient_PackageDict[strDestClientName] = toBeSendArray
                    toBeSendArray.append(newPackage)

                elif (iDomainType == Collect_FbNameDict_Mang.s_g_iType_Peer_FBot):
                    # 增加到队列
                    newPackage = FBotV4.make_package(command_id=Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_NeedPeerFBot_Reply_Message_Result,
                                                     value=strMsgContent)
                    # 传递给FBot单元
                    self.s_toBeSend_PeerFBot_PackageArray.append(newPackage)
                    pass
            else:
                CTYLB_Log.ShowLog(1, "Not Found Dest", "%s -> %s" % (strFrom, strDest))
                pass

        pass
Ejemplo n.º 3
0
    def CheckRecv_Handle(self):
        iExecCount = 0
        origRecvMsgArray = self.CheckRecvMsg()
        for eachRecvMsg in origRecvMsgArray:
            # 处理各个消息单元
            #eachRecvMsg.s_strPeerMsgName
            #eachRecvMsg.s_iMsgType
            #eachRecvMsg.s_strMsgContent

            self.v_HandleRecvPacket(eachRecvMsg.s_strPeerMsgName, eachRecvMsg.s_iMsgType, eachRecvMsg.s_strMsgContent)

            if(not FBotV4.GetGlobalIsRunning()):
                break
            pass
        return iExecCount
Ejemplo n.º 4
0
    def v_TimerCheck(self):
        bRetValue = False
        # 每隔2秒钟,广播我的客户端列表。
        if (self.s_TimerCheck.CheckTimeDiff()):
            bSendList = True
            # 如果没有修改,则等更长时间再发送
            if (not self.s_FiberMang.Pop_Reset_LastModifyFlag()):
                if (not self.s_AlwaysSendFbUnitList_TimerCheck.CheckTimeDiff()
                    ):
                    bSendList = False
            if (bSendList):
                self.Exec_SendUTRC_FiberList()

            bRetValue = True

        # 检查需要发送到远端的命令
        iExecCount = 0
        while (iExecCount < 5):
            nextRemoteExecMsgUnit = self.s_FiberMang.PopRetrive_RemoteExec()
            if (nextRemoteExecMsgUnit):
                # 执行,提交到远端服务端,进行发送
                strExecContent = nextRemoteExecMsgUnit.ExportToStr()
                if (self.s_AsyncNATS_ProcComu):
                    self.s_AsyncNATS_ProcComu.AddContentToSend(
                        self.s_strNATSProcServerName,
                        Share_UTRC_CfgDef.g_iFbUTRC_Cmd_Run_Message,
                        strExecContent)
                if (self.s_utrcFBot):
                    newPackage = FBotV4.make_package(
                        Share_UTRC_CfgDef.g_iFbot_Cmd_TransExecMsg_To_Srv,
                        strExecContent)
                    self.s_toBeSend_FBot_PackageArray.append(newPackage)
                bRetValue = True
            else:
                break
            iExecCount += 1

        # 检查异步进程通信,处理接收的命令
        if (self.Exec_CheckExec_RecvAsyncProcComuCmd()):
            bRetValue = True

        if (self.Exec_CheckExec_RecvAsyncProcCmd_ReplyCmdResult()):
            bRetValue = True

        return bRetValue
Ejemplo n.º 5
0
    def OnFBot_Client_Cmd_NeedExecCmd(self, value, param1, param2,
                                      is_last_package):
        # 分析执行此数据包
        comuMsgUnit = CUTRC_NATs_Comu_RunMessageUnit()
        if (comuMsgUnit.LoadFromStr(value)):
            comuUtrcExecResult = self.s_FiberMang.HandleExRemoteExecCmd(
                comuMsgUnit)
            # 执行完成后,返回此数据包
            execResultPackage = FBotV4.make_package(
                Share_UTRC_CfgDef.g_iFBot_Cmd_Reply_ExecMsg_To_Srv,
                comuUtrcExecResult.ExportToStr())
            self.s_toBeSend_FBot_PackageArray.append(execResultPackage)

        # 把需要的数据包发送出去
        retCTUnitArray = []
        if (is_last_package):
            retCTUnitArray = self.GetPackages_Send_To_FBotSrv()

        return retCTUnitArray
Ejemplo n.º 6
0
 def IsGlobalRunning():
     bRet = True
     if (not FBotV4.GetGlobalIsRunning()):
         bRet = False
     return bRet
Ejemplo n.º 7
0
    def __init__(self, config_file="config/config.yaml", funcCallBack=None):
        TYFiberBot_Mang_NATS_Instance_Base.__init__(self, config_file,
                                                    funcCallBack)

        # 如果有更新,2秒发一次。否则,半分钟发一次 我的单元列表
        self.s_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify(2)
        self.s_AlwaysSendFbUnitList_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify(
            30)
        self.s_FBotSendFbUnitList_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify(
            30)

        CLessTYBotFrameThread.SetDefaultConsoleCompatible(
            FBotV4.environment_event_handle)

        # 初始化,加载FBot的配置
        strFBotUTRC_Server = CTylb_Bot_Exec_Frame.ReadIniSectionValue(
            config_file, Share_UTRC_CfgDef.g_str_section_FiberUTRC,
            Share_UTRC_CfgDef.g_str_key_FBot_UTRC_Server, "")
        self.s_utrcFBot = None

        self.s_toBeSend_FBot_PackageArray = []  # 等到发送给伙伴FBot的数据包队列
        self.s_timeDiff_SendInit = CSkBot_Common_Share.CSkBot_TimeIdentify(1)

        if (strFBotUTRC_Server):
            loopCallBack = []
            if (self.s_funcTimerCallBack):
                loopCallBack.append((self.s_funcTimerCallBack))
            loopCallBack.append(self.LoopEventCallBack)

            connectUTRCFBotSrvAddr = {
                strFBotUTRC_Server:
                [Share_UTRC_CfgDef.g_iFbUTRC_AcceptExecClient_ListenPort]
            }
            self.s_utrcFBot = FBotV4(connect_to_socks=connectUTRCFBotSrvAddr,
                                     loop_event_callbacks=loopCallBack,
                                     config_file=config_file)

            self.s_utrcFBot.add_connect_to_callbacks(
                sock_id=strFBotUTRC_Server,
                sock_port=Share_UTRC_CfgDef.
                g_iFbUTRC_AcceptExecClient_ListenPort,
                cmd_id=Share_UTRC_CfgDef.g_iFBot_Cmd_Nop_SendEcho_To_Srv,
                callback=self.OnFBot_InitCall_LoopSendToSrv,
                is_auto_callback=True)

            self.s_utrcFBot.add_connect_to_callbacks(
                sock_id=strFBotUTRC_Server,
                sock_port=Share_UTRC_CfgDef.
                g_iFbUTRC_AcceptExecClient_ListenPort,
                cmd_id=Share_UTRC_CfgDef.g_iFBot_Cmd_NeedExecCmd_To_Client,
                callback=self.OnFBot_Client_Cmd_NeedExecCmd,
                is_auto_callback=False)

            self.s_utrcFBot.add_connect_to_callbacks(
                sock_id=strFBotUTRC_Server,
                sock_port=Share_UTRC_CfgDef.
                g_iFbUTRC_AcceptExecClient_ListenPort,
                cmd_id=Share_UTRC_CfgDef.g_iFbUTRC_Cmd_Reply_Message_Result,
                callback=self.OnFBot_Client_Cmd_ReplyMessageResult,
                is_auto_callback=False)

        pass
Ejemplo n.º 8
0
 def Run(self):
     while(FBotV4.GetGlobalIsRunning()):
         self.LoopEventCallBack()
Ejemplo n.º 9
0
 def s_Exec_SendFbList_To_PeerFBot(self):
     if(self.s_TimerDiff_PeerFBotSrv_FbUnit_Notify.CheckTimeDiff()):
         strSendContent = self.s_collect_FbNameDict_Mang.Construct_Ex_PeerFBotSrv_Content()
         self.s_toBeSend_PeerFBot_FbNames_Package=FBotV4.make_package(
             Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_BroadCast_Peer_FbUnitNames, strSendContent)
     pass
Ejemplo n.º 10
0
    def __init__(self, config_file="config/config.yaml", funcCallBack=None):
        self.s_collect_FbNameDict_Mang = Collect_FbNameDict_Mang()  # 集合纤程单元的管理


        # 临时存储处理FBot-客户端的Fb单元列表 字典
        self.s_recvFBotClientFibersDicts={} # 接收到FBot客户端 纤程名字典. key=FBot客户端名字, 内容=CUTRC_NATs_ComuFiberList

        TYFiberBot_Mang_UTRC_NATS_Instance.__init__(self, config_file, funcCallBack)
        # 保存本地变了

        iFbUTRC_ListenPeer_Port = Share_UTRC_CfgDef.g_iFbUTRC_ListenPeer_Port  # 纤程TRC服务器的监听端口
        # 线程UTRC服务器,对FBot客户端的监听端口
        iFbUTRC_AcceptExecClient_ListenPort=Share_UTRC_CfgDef.g_iFbUTRC_AcceptExecClient_ListenPort

        connectSrvAddr={}
        strPeerFbUTCServerAddr = CTylb_Bot_Exec_Frame.ReadIniSectionValue(config_file, Share_UTRC_CfgDef.g_str_section_FiberUTRC,
                                                                           Share_UTRC_CfgDef.g_str_key_FbUTRC_FBot_PeerServerAddr, "")
        if(strPeerFbUTCServerAddr):
            connectSrvAddr[strPeerFbUTCServerAddr] = [iFbUTRC_ListenPeer_Port]

        # 创建FBot服务器
        loopCallBack=[]
        if(self.s_funcTimerCallBack):
            loopCallBack=[self.s_funcTimerCallBack]

        loopCallBack.append(self.LoopEventCallBack)
        self.s_RunFBotV4=FBotV4(listen_socks=[iFbUTRC_ListenPeer_Port, iFbUTRC_AcceptExecClient_ListenPort],
                                listen_accpet_callback=self.FBot_Listen_Accept_Callback,
                                config_file=config_file, loop_event_callbacks=loopCallBack,
                                connect_to_socks=connectSrvAddr)

        # 针对 PeerSrv的消息处理
        self.s_RunFBotV4.add_listen_callbacks( Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_BroadCast_Peer_FbUnitNames,
                                               self.OnListen_Recv_Peer_BroadCastFbUnitName)
        self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_NeedPeerFBot_Run_Message,
                                              self.OnListen_Recv_Peer_ExecRunMessage)

        # 针对 FBot-ExecClient - g_iFbUTRC_AcceptExecClient_ListenPort 的消息处理. client发到utrc服务端的
        self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Nop_SendEcho_To_Srv,
                                              self.OnListen_Recv_Client_Nop_SendEcho)
        self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFbot_Cmd_TransExecMsg_To_Srv,
                                              self.OnListen_Recv_Client_TransExecMsg)
        self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Report_FbUnitList_To_Srv,
                                              self.OnListen_Recv_Client_Report_FbUnitList)
        self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Reply_ExecMsg_To_Srv,
                                              self.OnListen_Recv_Client_Reply_execMsg)


        if(strPeerFbUTCServerAddr):
            self.s_RunFBotV4.add_connect_to_callbacks(
                sock_id=strPeerFbUTCServerAddr, sock_port=Share_UTRC_CfgDef.g_iFbUTRC_ListenPeer_Port,
                cmd_id=Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_BroadCast_Peer_FbUnitNames,
                callback=self.OnFBot_PeerSrv_BroadCastPeerFbUnitName, is_auto_callback=True)

        # 初始化Fiber管理
        # 对信息传递 以纤程单元实现。收到nats服务器信息,判断是否在本地队列。不在,则发送给tybot
        self.s_TimerDiff_PeerFBotSrv_FbUnit_Notify = CSkBot_Common_Share.CSkBot_TimeIdentify(30)
        self.s_toBeSend_PeerFBot_FbNames_Package = None  # 等待发送的广播名字数据包
        self.s_toBeSend_PeerFBot_PackageArray = []  # 等到发送给伙伴FBot的数据包队列
        self.s_toBeSend_FBotClient_PackageDict={}  # 等待发送给 客户端的 Package. key=名字, 内容=[]

        pass