Esempio n. 1
0
def process_response(client, req, seqno, method):
    global total_ack, stat_count, err
    sign_parameters = {
        P_FORMAT: 'json',
        P_APPKEY: g_appkey,
        P_SIGN_METHOD: "md5",
        P_VERSION: '2.0',
        P_TIMESTAMP: str(long(time.time() * 1000)),
        P_PARTNER_ID: SYSTEM_GENERATE_VERSION,
        P_API: method_hash[method],
    }
    try:
        uuid = req['uuid']
        del req['uuid']
    except KeyError:
        uuid = None
    if method == 2:
        if req['start_time'] == '': req['start_time'] = req['release_time']
    sign_parameters.update(req)
    sign_parameters[P_SIGN] = sign(g_secret, sign_parameters)
    params_url = URL(N_REST)
    params_url.query = sign_parameters
    try:
        response = http.get(params_url.request_uri)
        data = response.read()
        logger.info('response data=%s', data)
        total_ack += 1
        stat_count += 1
        assert response.status_code == 200
        hash1 = json.loads(data)
    except socket.timeout:
        logger.error('response timeout')
        hash1 = {'error_response': None}
        err += 1
    except:  #timeout:
        logger.error(traceback.format_exc())
        #data = {'err', traceback.format_exc()}
        hash1 = {'error_response': None}
        err += 1
    #logger.debug('data=%s, client=%s, conn_list=%s', data, client, conn_list)
    #data = marshal.dumps(data)
    if method == 2: return
    if 'error_response' in hash1:
        data = {}  #{'call_in_no':None}
    else:
        try:
            data = hash1['alibaba_aliqin_secret_call_control_response']
            try:
                play_code = data['play_code']
            except KeyError:
                play_code = None
            data['play_code'] = play_code
        except KeyError:
            logger.error(traceback.format_exc())
            data = {}  #{'call_in_no': None}
    if uuid: data['uuid'] = uuid
    data = marshal.dumps(data)
    if client in conn_list:
        client.sendall(struct.pack('!LL', len(data), seqno) + data)
    elif conn_list:
        n = len(conn_list)
        conn_list[hash(seqno) %
                  n].sendall(struct.pack('!LL', len(data), seqno) + data)
    else:
        logger.error("No client connection!")