Ejemplo n.º 1
0
async def get_decoed_item(engine, server, user_, itemset_, pos_, name_, fullstr=''):
    dict_ = {}
    fame = 0

    async with engine.acquire() as conn:
        id_ = await get_item_id(conn, name_) 
        image_path = ''
        async for it_ in conn.execute(db.tbl_items.select().where(db.tbl_items.c.id==id_)):
            img_url = it_[2]
            #img_url = f'https://wow.zamimg.com/images/wow/icons/large/{img_}.jpg'
        async for tuple_ in conn.execute(db.tbl_arranged_auction.select().where(and_((db.tbl_arranged_auction.c.item==id_),(db.tbl_arranged_auction.c.server==server)))):
            #print('name_:{}'.format(name_))
            dict_['name'] = name_ 
            dict_['num'] = tuple_[2]
            #dict_['min'] = tuple_[3]
            dict_['min_seller'] = tuple_[4]
            dict_['min_chain'] = tuple_[5].split('?')
            #dict_['edited_time'] = tuple_[6]
            dict_['image'] = img_url
            #print(f'icon_name:{img_url}')
            fame = tuple_[9]
            if fame is None:
                fame = 0
            fame += 1

            # 골드,실버,카퍼 를 분리해줍니다
            price = int(tuple_[3])

            if price < 10000:
                dict_['gold'] = 0
            else:
                dict_['gold'] = math.floor(price / 10000)

            price = price - dict_['gold'] * 10000
            if price < 100:
                dict_['silver'] = 0
            else:
                dict_['silver'] = math.floor(price / 100)

            dict_['copper'] = price - dict_['silver'] * 100
        # fame 을 1 증가시켜줍니다
        # fame 증가시키는 프로세스를 별도 task로 실행시켜 multitasking을 구현합니다.
        # 사용자 응답시간이 많이 빨라집니다. 1회 업데이트에 0.1초씩 걸리더군요. rpi3b+에서..
        await increase_fame(engine, server, id_, fame)

        # 현재 itemset의 해당 아이템 칸 값을 새 아이템명으로 변경해줍니다
        # 별도의 task로 실행시켜 최대한 일단 사용자에게 반응을 먼저하도록 노력합니다
        # itemset이 입력되지 않은 경우(update_indiv가 아닌 rq_item 에서의 요청)는 itemset update를 생략합니다
        #log.info(f'itemset_:{itemset_}, dict_:{dict_}')
        if(itemset_ and dict_):
            log.info('itemset은 입력된 update_indiv의 콜입니다. 세트종류를 보고 수정해줍니다')
            log.info(f'cur_itemset:{itemset_}')
            set_ = a_cl.Set(itemset_).fork()
            log.info('forked')
            log.info(f'user_:{user_}, pos_:{pos_}, name_:{name_}, fullstr:{fullstr}')
            await set_.update_itemset(engine, user_, itemset_, pos_, name_, fullstr)
    return dict_
Ejemplo n.º 2
0
async def update(request):
    global ar
    global server
    #global currentset
    itemset = ''
    print('/update handler came in')
    log.info('/update handler came in')

    itemset = request.match_info['itemset']
    srver = request.match_info['server']
    user = request.match_info['cur_user']
    '''
    proto = request.match_info['proto']
    print(f':itemset = {itemset}')
    if(proto == '_default'):
        print('DEFAULT!!!!')
        '''

    '''
    if currentset != itemset:
        currentset = itemset
        ar = await get_decoed_item_set(server, currentset)
    '''
    # 굳이 글로벌로 균일하게 갖고 있는 것은 말이 안됩니다. 사용자가 원하는 상황마다 그대로 전달해줘야합니다
    start_time = time.time()
    set_ = a_cl.Set(itemset).fork()
    dict_ = await set_.get_decoed_item_set(srver)
    #array = await get_decoed_item_set(srver, itemset)
    finished_time = time.time()
    proc_time = round(finished_time - start_time, 3)
    print(f'fetch elapsed time: {proc_time} 초')
    log.info(f'fetch elapsed time: {proc_time} 초')

    #print(ar)
    #ar = await get_decoed_item_set(server, currentset)
    data = {}
    itemsets = []

    async with create_engine(user='******',
                            database='auction_db',
                            host='192.168.0.212',
                            password='******') as engine:
        async with engine.acquire() as conn:
            async for r in conn.execute(di.tbl_wow_server_info.select().where(di.tbl_wow_server_info.c.server==server)):
                data['time'] = r[1]
            #async for r in conn.execute(tbl_item_set.select()):
                #itemsets.append(r[0])

    #data['ar'] = ar
    #data['itemsets'] = itemsets
    data['ar'] = dict_
    data['itemsets'] = await get_itemsets()
    #data['currentset'] = currentset 

    return web.json_response(data)
Ejemplo n.º 3
0
async def update(request):
    global ar
    global server
    global serverlist
    #global currentset
    itemset = ''
    log.info('/update handler came in')

    itemset = request.match_info['itemset']
    srver = request.match_info['server']
    user = request.match_info['cur_user']
    '''
    proto = request.match_info['proto']
    print(f':itemset = {itemset}')
    if(proto == '_default'):
        print('DEFAULT!!!!')
        '''
    '''
    if currentset != itemset:
        currentset = itemset
        ar = await get_decoed_item_set(server, currentset)
    '''
    # 굳이 글로벌로 균일하게 갖고 있는 것은 말이 안됩니다. 사용자가 원하는 상황마다 그대로 전달해줘야합니다
    start_time = time.time()
    set_ = a_cl.Set(itemset).fork()
    dict_ = await set_.get_decoed_item_set(request.app['db'], srver)
    #dict_ = {}
    finished_time = time.time()
    proc_time = round(finished_time - start_time, 3)
    log.info(f'fetch elapsed time: {proc_time} 초')

    data = {}
    itemsets = []

    #conn = await request.app['db'].cursor()
    async with request.app['db'].acquire() as conn:
        async for r in conn.execute(di.tbl_wow_server_info.select().where(
                di.tbl_wow_server_info.c.server == srver)):
            data['time'] = r[1]

    #data['time'] = ''
    data['ar'] = dict_
    data['itemsets'] = await get_itemsets(request, user)
    #data['itemsets'] = []

    #data['serverlist'] = await auc.get_serverlist() # get_serverlist가 처음 handle시에삽입되어 있습니다
    data['serverlist'] = serverlist

    return web.json_response(data)
Ejemplo n.º 4
0
async def handle(request):
    #return web.Response(text='f**k')
    global ar
    global server
    global currentset
    global imageroot
    global serverlist
    global master_server_pairs

    #redis로부터 top5 가져옴
    keys_top5 = ['1', '2', '3', '4', '5']
    redis_top5 = []
    redis = request.app['redis']
    for i in keys_top5:
        val = await redis.get(i)
        redis_top5.append(val)

    #최적화를 위해서 굳이 db에서 가져오지 않습니다. 0.2초 단축 200ms
    #itemsets = await get_itemsets()
    itemsets = []
    # default set이냐 아니냐로 분기하기 위함입니다
    set_ = a_cl.Set(currentset).fork()
    #dict_ = await set_.get_decoed_item_set(server)
    dict_ = {}
    currentset_code = 'default'
    '''
    return {'name': '7', 'imageroot': '../static/images/' ,'ar':ar, 'server':server,
                    'itemsets': itemsets, 'current_itemset':currentset}
    '''
    return {
        'name': '7',
        'imageroot': imageroot,
        'ar': dict_,
        'server': server,
        'user': '******',
        'user_code': '',
        'serverlist': serverlist,
        'master_server_pairs': master_server_pairs,
        'itemsets': itemsets,
        'current_itemset': currentset,
        'current_itemset_code': currentset_code,
        'top_5': redis_top5
    }
Ejemplo n.º 5
0
async def rq_itemset(request):
    #global currentset
    log.info('/rq_itemset handler came in')

    itemset = request.match_info['itemset']
    user = request.match_info['cur_user']
    log.info(f'itemset:{itemset}')
    start_time = time.time()
    set_ = a_cl.Set(itemset).fork()
    code, dict_ = await set_.get_only_itemset(request.app['db'], user)
    finished_time = time.time()
    proc_time = round(finished_time - start_time, 3)
    log.info(f'rq_itemset:: fetch elapsed time: {proc_time} 초')

    data = {}
    data['data'] = dict_
    data['code'] = code
    log.info(data)
    return web.json_response(data)
Ejemplo n.º 6
0
async def handle(request):
    #return web.Response(text='f**k')
    global ar
    global server
    global currentset
    global imageroot
    
    itemsets = await get_itemsets()
    #itemsets.remove(currentset)
    # default set이냐 아니냐로 분기하기 위함입니다
    set_ = a_cl.Set(currentset).fork()
    dict_ = await set_.get_decoed_item_set(server)
    #array = await set_.get_decoed_item_set(server)
    #array = await get_decoed_item_set(server, currentset)
    #print(f'dict_:{dict_}')

    '''
    return {'name': '7', 'imageroot': '../static/images/' ,'ar':ar, 'server':server,
                    'itemsets': itemsets, 'current_itemset':currentset}
    '''
    return {'name': '7', 'imageroot': imageroot ,'ar':dict_, 'server':server,
                    'itemsets': itemsets, 'current_itemset':currentset}