Пример #1
0
    def __init__(self):
        inQueueManager = QueueManager(address=('/tmp/SVSqueue'), \
            authkey='gnarf')
        inQueueManager.connect()
        self.inQueue = inQueueManager.get_queue()

        self.handleMsg = msgHandler(self.logfunc)
        self.handleMsg.register('init', self.do_init)
        self.handleMsg.register('addClient', self.do_addClient)
        self.handleMsg.register('peerQuit', self.do_peerQuit)
        self.handleMsg.register('exit', self.do_exit)
        self.handleMsg.register('procDead', self.do_procDead)
        self.handleMsg.register('chatLobby', self.do_chatLobby)
        self.handleMsg.register('nameProposed', self.do_nameProposed)
        self.handleMsg.register('PINGsent', self.do_PINGsent)
        self.handleMsg.register('PINGreceived', self.do_PINGreceived)
        self.handleMsg.register('PONGreceived', self.do_PONGreceived)
        self.handleMsg.register('getUserList', self.do_getUserList)
        self.handleMsg.register('chatPrivate', self.do_chatPrivate, 3, False)
        self.handleMsg.register('shutdown', self.do_shutdown)
        self.handleMsg.register('syslog', self.do_syslog, 3, False)

        self.clients = {}
        self.lastClient = 0

        self.SVG = SVGhandler()

        self.init = False
        self.keep_alive = True
Пример #2
0
    def __init__(self):
        self.ID = '/tmp/MDqueue'

        outQueueManager = QueueManager(address=('/tmp/SVSqueue'), \
            authkey='gnarf')
        outQueueManager.connect()

        inQueueManager = QueueManager(address=(self.ID), \
            authkey='gnarf')
        inQueueManager.connect()

        self.inQueue = inQueueManager.get_queue()
        self.outQueue = outQueueManager.get_queue()

        self.handleMsg = msgHandler()
        self.handleMsg.register('privateMsg', self.do_privateMsg)
        self.handleMsg.register('lobbyMsg', self.do_lobbyMsg)
        self.handleMsg.register('alert', self.do_alert)
        self.handleMsg.register('userJoined', self.do_userJoined)
        self.handleMsg.register('userLeft', self.do_userLeft)
        self.handleMsg.register('bye', self.do_bye)
        self.handleMsg.register('userList', self.do_userList)
        self.handleMsg.register('syslog', self.do_syslog)

        self.handleCmd = msgHandler(self.logfunc)
        self.handleCmd.register('userList', self.do_cmd_userList, 2)
        self.handleCmd.register('master', self.do_cmd_master, 3)
        self.handleCmd.register('shutdown', self.do_cmd_shutdown, 2)
        self.handleCmd.register('log', self.do_cmd_log, 2)

        self.userList = []
        self.masterList = []
        self.logList = []

        self.keep_alive = True
Пример #3
0
    def do_addClient(self, param):
        self.lastClient += 1
        queuepath = param[2] # we use path to named pipe as client id

        m = QueueManager(address=(queuepath), authkey='gnarf')
        m.connect()
        queue = m.get_queue()

        self.clients[queuepath] = { \
            'name': '_SVuser' + str(self.lastClient),
            'queue': queue,
            'state': 'init'}
Пример #4
0
    def __init__(self, queuepath, sock):
        self.ID = queuepath

        outQueueManager = QueueManager(address=('/tmp/SVSqueue'), \
            authkey='gnarf')
        outQueueManager.connect()

        inQueueManager = QueueManager(address=(queuepath), \
            authkey='gnarf')
        inQueueManager.connect()

        self.inQueue = inQueueManager.get_queue()
        self.outQueue = outQueueManager.get_queue()
        self.sock = sock

        self.inBuffer = ''

        self.handleMsg = msgHandler(self.logfunc)
        self.handleMsg.register('sock', self.do_sock)
        self.handleMsg.register('lobbyMsg', self.do_lobbyMsg)
        self.handleMsg.register('clientNameAccepted', \
            self.do_clientNameAccepted)
        self.handleMsg.register('clientNameDenied', \
            self.do_clientNameDenied)
        self.handleMsg.register('sendPONG', self.do_sendPONG)
        self.handleMsg.register('userList', self.do_userList)
        self.handleMsg.register('bye', self.do_bye)
        self.handleMsg.register('privateMsg', self.do_privateMsg, 3, False)
        self.handleMsg.register('userLeft', self.do_userLeft)
        self.handleMsg.register('userJoined', self.do_userJoined)

        self.handleProtIn = msgHandler()
        self.handleProtIn.register(210, self.do_210_in_proposeName, 2)
        self.handleProtIn.register(401, self.do_401_in_listRooms, 1)
        self.handleProtIn.register(406, self.do_406_in_newRoom, 1)
        self.handleProtIn.register(501, self.do_501_in_chatLobby)
        self.handleProtIn.register(502, self.do_502_in_chatPrivate)
        self.handleProtIn.register(505, self.do_505_in_getUserList, 1)
        self.handleProtIn.register(602, self.do_602_in_ackProt, 2)
        self.handleProtIn.register(603, self.do_603_in_PING, 1)
        self.handleProtIn.register(604, self.do_604_in_PONG, 1)
        self.handleProtIn.register(699, self.do_699_in_exit, 1)

        self.handleProtOut = msgHandler()
        self.handleProtOut.register(101, self.do_ProtOut_trivial)
        self.handleProtOut.register(302, self.do_ProtOut_trivial)
        self.handleProtOut.register(303, self.do_ProtOut_trivial)
        self.handleProtOut.register(305, self.do_ProtOut_trivial)
        self.handleProtOut.register(306, self.do_ProtOut_trivial)
        self.handleProtOut.register(503, self.do_503_out_chatLobby)
        self.handleProtOut.register(504, self.do_504_out_chatPrivate)
        self.handleProtOut.register(506, self.do_ProtOut_trivial)
        self.handleProtOut.register(507, self.do_507_out_userEntry)
        self.handleProtOut.register(508, self.do_ProtOut_trivial)
        self.handleProtOut.register(509, self.do_509_out_userJoined)
        self.handleProtOut.register(510, self.do_510_out_userLeft)
        self.handleProtOut.register(601, self.do_601_out_serverHello)
        self.handleProtOut.register(603, self.do_603_out_PING)
        self.handleProtOut.register(604, self.do_ProtOut_trivial)
        self.handleProtOut.register(697, self.do_ProtOut_trivial)

        self.FSMsymbols = {}
        self.FSM = StateMachine(self.FSMsymbols)
        self.FSM.add_state('init', self.st_init)
        self.FSM.set_state('init')
        self.FSM.add_state('prot_proposed', self.st_prot_proposed)
        self.FSM.add_state('prot_accepted', self.st_prot_accepted)
        self.FSM.add_state('name_asked', self.st_name_asked)
        self.FSM.add_state('online', self.st_online)

        self.userList = []

        self.firstCycle = True
        self.keep_alive = True
Пример #5
0
def mainfunction():
    """
    mainfunction
    分別與IBM MQ及Rabbit MQ建立連線通道,進行從IBM MQ Server取得BPM資料,將取得的原始內文,直接publish傳送到Rabbit MQ 的BPM序列中。
    除此之外,導入連線例外狀況的容錯處理,重複使用已建立的連線通道,降低建立連線通道成本。
    主系統程式架構,由兩大迴圈組成,外層迴圈管控與Server的連線,內層迴圈管控BPM資料取得及傳送。利用FailToSleepSec及DisconnectSec參數,設定連線處理的等待時間。
    
    FailToSleepSec: 設定程式例外處理的休眠時間,包括”NO_MSG”的處理。
    
    DisconnectSec: 設定程式與IBM MQ Server離線後,重新連線的隔間等待時間。

    """
    # === Local ===

    FailToSleepSec = int(os.getenv('FailToSleepSec'))
    DisconnectSec = int(os.getenv('DisconnectSec'))

    # # RabbitMQ Variables
    user = os.getenv('RABBITMQ_USER')
    password = os.getenv('RABBITMQ_PASSWORD')
    host = os.getenv('RABBITMQ_HOST')
    port = os.getenv('RABBITMQ_PORT')
    vhost = os.getenv('RABBITMQ_VHOST')
    exchange = os.getenv('RABBITMQ_BPMEXCHANGE')
    routing_key = os.getenv('RABBITMQ_ROUTING_KEY')
    queue = os.getenv('RABBITMQ_QUEUENAME')
    #user = "******"
    #password = "******"
    #host = "172.20.0.220"
    #port = 5671
    #vhost = "isnr"
    #exchange ="bpm"
    #routing_key = 'bpm_rk'
    qm = QueueManager(user, password, host, port, vhost, True)

    # initial queues
    qm.declare_queue_binding(exchange, queue, routing_key)

    # # IBMMQ Variables
    queue_manager = os.getenv('IBMQUEUE_MANAGER')
    channel = os.getenv("IBMCHANNEL")
    host = os.getenv("IBMHOST")
    port = os.getenv("IBMPORT")
    queue_name = os.getenv("IBMQUEUE_NAME")
    user = os.getenv('IBMUSER')
    password = os.getenv('IBMPASSWORD')
    #queue_manager = "TIABPM"
    #channel = "TAISNR.SVRCONN"
    #host = "10.2.67.76"
    #port = "1414"
    #queue_name = "TAISNR.LOCAL.QUEUE"
    #user = '******'
    #password = '******'
    conn_info = "%s(%s)" % (host, port)
    ibmmqi = IBMMQClientManager(queue_manager, channel, host, port, queue_name,
                                conn_info)

    keep_connect = True
    msg = ""
    connectmsg = ""
    exceptioncount = 0
    getmessagecount = 0
    connectcount = 0
    while keep_connect:
        try:
            ibmmqi.connect(user, password)
            keep_connect = False
            connectcount = connectcount + 1
            msg = connectmsg = "Connect success !! connectcount:" + str(
                connectcount)
            DebugLog(msg, connectmsg, 'MqConnectSucces', '0')
        except Exception as pymqierror:
            keep_connect = True
            msg = connectmsg = "Connect fail !! connectcount:" + str(
                connectcount) + str(pymqierror)
            DebugLog(msg, connectmsg, 'MqConnectFail', '0')
        time.sleep(1)
        if keep_connect == False:
            #Connecting in client mode
            ibmmqi.Queue()
            keep_running = True
            count = 1

            while keep_running:
                msg = connectmsg = " keep_running is true!! "
                try:
                    #How to get the message off a queue
                    msg_body = ibmmqi.getmessage()
                    msg = "Success!! " + msg_body
                    getmessagecount = getmessagecount + 1
                    connectmsg = "IBMMQ  getmessage success!! getmessagecount:" + str(
                        getmessagecount)
                    DebugLog(msg, connectmsg, 'GetMesFormIbmMQ', '1')
                    try:
                        if (qm.is_connected()) == False:
                            qm.connect()
                        qm.publish(exchange, routing_key, msg_body)
                        connectmsg = "RabbitMQ publisher success!! getmessagecount:" + str(
                            getmessagecount)
                        DebugLog(msg, connectmsg, 'BpmToRabbbitMQ', '0')
                    except Exception as RabbitMQerror:
                        qm.connect()
                        msg = connectmsg = ":" + str(
                            count) + "RabbitMQerror Exception !! " + str(
                                RabbitMQerror)
                        DebugLog(msg, connectmsg, 'RabbitMqError', '0')
                    keep_running = True
                    keep_connect = False
                    count = 1
                except Exception as pymqierror:
                    exceptioncount = exceptioncount + 1
                    connectmsg = ":" + str(
                        count) + " Exception !! exceptioncount:" + str(
                            exceptioncount) + "-" + str(pymqierror)
                    if count > 9:
                        keep_running = False
                        keep_connect = True
                    else:
                        keep_running = True
                        keep_connect = False
                    count = count + 1
                    DebugLog(msg, connectmsg, 'IbmMQException', '0')
                    time.sleep(FailToSleepSec)
                #time.sleep(2)

            if keep_running == False:
                keep_connect = True
                try:
                    msg = connectmsg = "ibmmqi.close()!! "
                    ibmmqi.close()
                except Exception as pymqicloseerr:
                    msg = connectmsg = "ibmmqi.close():Exception !! " + str(
                        pymqicloseerr)
                DebugLog(msg, connectmsg, 'IbmMqClose', '0')
                time.sleep(1)

        keep_connect = True
        try:
            ibmmqi.disconnect()
            msg = connectmsg = "ibmmqi.disconnect! getmessagecount:" + str(
                getmessagecount)
        except Exception as pymqidisconerr:
            msg = connectmsg = "ibmmqi.disconnect:Exception !! " + str(
                pymqidisconerr)
        DebugLog(msg, connectmsg, 'IbmMqDisconnect', '0')
        time.sleep(DisconnectSec)