示例#1
0
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