def RunOnlineMessage(message): global dictRelayerServer, dictClientServer, dictServerLoad, dictServerInfo, lockMaps with lockMaps: if len(message.destType) < 2: return if (message.destType[1] == TTYPE_HUMAN): session_key = message.destId if message.operation == OPER_ONLINE: if session_key not in dictClientServer: dictServerLoad[message.fromId] = dictServerLoad.get( message.fromId, 0) + 1 dictClientServer[session_key] = CConnectionItem( message.fromId) else: dictClientServer[session_key].server_id = message.fromId dictClientServer[ session_key].dt_active = datetime.datetime.now() if message.addition.lower() == 'y': #need redirect checking listRelayeres = SBDB.GetRelayeresByAccountId( message.fromId) target_server_id = -1 for relayer_id in listRelayeres: if relayer_id in dictRelayerServer: #if there is a relayer connected to that account is connected on the same server with the account connection, don't redirect the account connection if dictRelayerServer[ relayer_id].server_id == message.fromId: return else: target_server_id = relayer_id if target_server_id > -1: RedirectHumanTo(message.destId, target_server_id) elif message.operation == OPER_OFFLINE: if session_key in dictClientServer: dictServerLoad[message.fromId] = dictServerLoad.get( message.fromId, 0) - 1 dictClientServer.pop(session_key) elif (message.destType[1] == TTYPE_GATEWAY): if message.operation == OPER_ONLINE: if message.destId not in dictRelayerServer: dictServerLoad[message.fromId] = dictServerLoad.get( message.fromId, 0) + 1 dictRelayerServer[message.destId] = CConnectionItem( message.fromId) else: dictRelayerServer[ message.destId].server_id = message.fromId dictRelayerServer[ message.destId].dt_active = datetime.datetime.now() elif message.operation == OPER_OFFLINE: if message.destId in dictRelayerServer: dictServerLoad[message.fromId] = dictServerLoad.get( message.fromId, 0) - 1 dictRelayerServer.pop(message.destId) pass