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
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
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'}
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
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)