Esempio n. 1
0
def receive_data(conn, type, action):
    #接收数据,除了上传和下载
    re_header_len_bytes = conn.recv(4)
    re_header_len = struct_tcp.unpack_header_len(re_header_len_bytes)

    re_header_bytes = conn.recv(re_header_len)
    re_header = struct_tcp.decode_header_bytes_or_data_bytes(re_header_bytes)

    if re_header['type'] == type and re_header['action'] == action:
        re_data_len = re_header['len']
        re_data_bytes = conn.recv(re_data_len)
        re_data = struct_tcp.decode_header_bytes_or_data_bytes(re_data_bytes)
        return re_data
    return False
Esempio n. 2
0
def register(header, conn):
    #print('------------注册----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    cursor.execute('''select id from `user` where `phone`=%s''', data['phone'])
    user_info = cursor.fetchone()

    re_header = {
        'type': 'user',
        'action': 'register',
    }

    if user_info:
        re_data = {'status': False, 'msg': '用户名已存在'}
    else:

        try:
            res_db = cursor.execute(
                '''insert into `user`(`phone`,pwd,money,is_member,is_delete) values(%s,%s,%s,%s,%s)''',
                (data['phone'], data['pwd'], 0, 0, 0))
            db_conn.commit()
        except Exception as e:
            print(e)
            res_db = False
        if res_db:
            re_data = {'status': True, 'msg': '注册成功'}
        else:
            re_data = {'status': False, 'msg': '注册失败'}
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 3
0
def manage_user(header,conn):
    #print('------------管理用户----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    try:
        res_db = cursor.execute('''update `user` set is_delete=%s where phone=%s''', (data['is_lock'], data['phone']))
        db_conn.commit()
    except Exception as e:
        print(e)
        res_db = False
    if res_db:
        re_data = {
            'status': True,
            'msg': '修改成功'
        }
    else:
        re_data = {
            'status': False,
            'msg': '修改失败'
        }
    re_header = {
        'type': 'admin',
        'action': 'manage_user',
    }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 4
0
def check_dwn_records(header, conn):
    #print('------------查看观影(下载)记录----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)

    re_header = {
        'type': 'user',
        'action': 'check_dwn_records',
    }
    cursor.execute(
        '''select a.video_id,a.cost,c.url from `dwn_records` as a right join `user` as b on a.user_id=b.id and b.phone=%s
                      left join video as c on c.id=a.video_id
                 ''', data['phone'])
    dwn_records_info = cursor.fetchall()
    if dwn_records_info:
        re_data = {
            'status': True,
            'msg': '查询成功',
            'data': dwn_records_info,
            'video': dwn_records_info
        }
    else:
        re_data = {'status': True, 'msg': '暂无记录', 'data': ()}
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 5
0
def dwn_video(phone, id):
    conn = tcp_client.tcp_conn()
    header = {'type': 'user', 'action': 'dwn_video'}
    data = {'phone': phone, 'id': id}
    data_bytes = struct_tcp.pack_header(header, data)
    conn.send(data_bytes)
    T_F = conn.recv(1).decode('utf-8')
    if T_F == '0': return False, '余额不足'
    re_header_len_bytes = conn.recv(4)
    re_header_len = struct_tcp.unpack_header_len(re_header_len_bytes)

    re_header_bytes = conn.recv(re_header_len)
    re_header = struct_tcp.decode_header_bytes_or_data_bytes(re_header_bytes)

    recv_size = 0
    video_path1 = os.path.join(settings.Videos_path, re_header['filename'])

    with open(video_path1, 'wb') as f:
        while recv_size < re_header['filesize']:
            recv_data = conn.recv(1024)
            f.write(recv_data)
            recv_size += len(recv_data)
            common.schedule(re_header['filesize'], recv_size)
        f.flush()
    file_size1 = os.path.getsize(video_path1)
    md5_obj = hashlib.md5()
    md5_obj.update(str(file_size1).encode('utf-8'))
    if re_header['md5'] == md5_obj.hexdigest():
        return True, '下载成功'
    else:
        return False, '文件不完整或被篡改'
Esempio n. 6
0
def release_notice(header,conn):
    #print('------------发布公告----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    try:
        res_db = cursor.execute(
            '''insert into notice(content,is_delete) values(%s,%s)''',(data['content'],0))
        db_conn.commit()
    except Exception as e:
        print(e)
        res_db = False
    if res_db:
        re_data = {
            'status': True,
            'msg': '发布成功'
        }
    else:
        re_data = {
            'status': False,
            'msg': '发布失败'
        }
    re_header = {
        'type': 'admin',
        'action': 'release_notice',
    }

    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 7
0
def delete_video(header,conn):
    #print('------------删除视频----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    video_list = common.db_query(settings.DB_video_path)
    video_list[data['id']]['is_delete']=1
    common.db_save(settings.DB_video_path,video_list)
    re_header = {
        'type': 'admin',
        'action': 'delete_video',
    }
    try:
        res_db = cursor.execute(
            '''update video set is_delete=1 where id=%s''',(data['id'],))
        db_conn.commit()
    except Exception as e:
        print(e)
        res_db = False
    if res_db:
        re_data = {
            'status': True,
            'msg': '删除成功'
        }
    else:
        re_data = {
            'status': False,
            'msg': '删除失败'
        }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 8
0
def register(header,conn):
    #print('------------注册----------')
    data_len=header['len']
    data_bytes=conn.recv(data_len)
    data=struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    cursor.execute('''select id from `admin` where `name`=%s''',data['name'])
    admin_info=cursor.fetchone()
    re_header={
        'type':'admin',
        'action':'register',
    }
    if admin_info:
        re_data = {
            'status':False,
            'msg':'管理员名已存在'
        }
    else:
        try:
            res_db = cursor.execute('''insert into admin(`name`,pwd) values(%s,%s)''', (data['name'],data['pwd']))
            db_conn.commit()
        except Exception as e:
            print(e)
            res_db = False
        if res_db:
            re_data = {
                'status': True,
                'msg': '注册成功'
            }
        else:
            re_data = {
                'status': False,
                'msg': '注册失败'
            }
    re_data_bytes=struct_tcp.pack_header(re_header,re_data)
    conn.send(re_data_bytes)
Esempio n. 9
0
def get_video_list(header,conn):
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    cursor.execute('''select * from `video`''')
    video_list = cursor.fetchall()
    re_header = {
        'type': 'admin',
        'action': 'get_video_list',
    }
    re_data={
        'data':video_list
    }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 10
0
def become_member(header, conn):
    #print('------------冲会员----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)

    cursor.execute(
        '''select id,is_delete,money,is_member from `user` where `phone`=%s''',
        data['phone'])
    user_info = list(cursor.fetchone())
    re_header = {
        'type': 'user',
        'action': 'become_member',
    }
    user_info[2] += data['money']
    if user_info[3] == 0:
        if user_info[2] >= 50:
            user_info[2] -= 50
            user_info[3] = 1
            re_data = {
                'status': True,
                'msg': '冲会员成功',
                'money': user_info,
            }
        else:
            re_data = {
                'status': True,
                'msg': '充值成功,余额咋不足开启会员',
                'money': user_info,
            }

    else:
        re_data = {
            'status': True,
            'msg': '充值成功',
            'money': user_info,
        }
    try:
        cursor.execute(
            '''update `user` set money=%s,is_member=%s where phone=%s''',
            (user_info[2], user_info[3], data['phone']))
        db_conn.commit()
    except Exception as e:
        print(e)

    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 11
0
def task_tcp(conn):
    try:
        header_len_bytes=conn.recv(4)
        header_len=struct_tcp.unpack_header_len(header_len_bytes)

        header_bytes=conn.recv(header_len)
        header=struct_tcp.decode_header_bytes_or_data_bytes(header_bytes)
        action=header['action']

        if header['type']=='admin':
            admin_interface.action_dict[action](header,conn)
        if header['type']=='user':
            user_interface.action_dict[action](header,conn)
    except ConnectionResetError:
        pass
    finally:
        conn.close()
Esempio n. 12
0
def chech_capital(header,conn):
    #print('------------查看资金----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)

    cursor.execute('''select sum(cost) as c,(select count(id) from `user` where is_member=1) as d from dwn_records  ''')
    data_list = cursor.fetchone()
    re_header = {
        'type': 'admin',
        'action': 'chech_capital',
    }
    re_data = {
        'data': data_list
    }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 13
0
def chech_notice(header, conn):
    #print('------------查看公告----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    re_header = {
        'type': 'user',
        'action': 'chech_notice',
    }
    cursor.execute('''select id,content from notice where is_delete=0''')
    notice_list = cursor.fetchall()

    if not notice_list:
        re_data = {'status': True, 'msg': '暂无公告', 'data': notice_list}
    else:
        re_data = {'status': True, 'msg': '查询成功', 'data': notice_list}
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 14
0
def check_user(header,conn):
    #print('------------查看用户----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    cursor.execute('''select id,phone,money,is_member,is_delete from `user` ''')
    user_list = cursor.fetchall()


    re_header = {
        'type': 'admin',
        'action': 'check_user',
    }
    re_data = {
        'data': user_list
    }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 15
0
def login(header, conn):
    #print('------------登录----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    cursor.execute(
        '''select id,is_delete,money,is_member from `user` where `phone`=%s and pwd=%s''',
        (data['phone'], data['pwd']))
    user_info = cursor.fetchone()

    re_header = {
        'type': 'user',
        'action': 'login',
    }
    if user_info:

        if user_info[1] == 1:
            re_data = {'status': False, 'msg': '账户已被锁定'}
        else:
            re_data = {'status': True, 'msg': '登录成功', 'data': user_info}
    else:
        re_data = {'status': False, 'msg': '用户名或密码错误'}
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 16
0
def login(header,conn):
    # print('------------登录----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    print(data)
    cursor.execute('''select id from `admin` where `name`=%s and pwd=%s''', (data['name'],data['pwd']))
    admin_info = cursor.fetchone()
    re_header = {
        'type': 'admin',
        'action': 'login',
    }
    if admin_info:
        re_data = {
            'status':True,
            'msg':'登录成功'
        }
    else:
        re_data = {
            'status': False,
            'msg': '用户名或密码错误'
        }
    re_data_bytes = struct_tcp.pack_header(re_header, re_data)
    conn.send(re_data_bytes)
Esempio n. 17
0
def dwn_video(header, conn):
    #print('------------下载视频----------')
    data_len = header['len']
    data_bytes = conn.recv(data_len)
    data = struct_tcp.decode_header_bytes_or_data_bytes(data_bytes)
    re_header = {
        'type': 'user',
        'action': 'dwn_video',
    }
    cursor.execute(
        '''select url,is_charge,cost,member_cost from `video` where `id`=%s''',
        data['id'])
    video_list = cursor.fetchone()
    file_path = video_list[0]
    file_size = os.path.getsize(file_path)
    re_header['filesize'] = file_size
    file_pathx, filename = os.path.split(file_path)
    re_header['filename'] = filename
    file_size = os.path.getsize(file_path)
    md5_obj = hashlib.md5()
    md5_obj.update(str(file_size).encode('utf-8'))
    re_header['md5'] = md5_obj.hexdigest()
    cursor.execute(
        '''select id,is_delete,money,is_member from `user` where `phone`=%s''',
        data['phone'])
    user_info = list(cursor.fetchone())

    if user_info[3] == 1:
        cost = video_list[3]
    else:
        cost = video_list[2]
    if video_list[1] == 0:
        cost = 0
    user_info[2] -= cost
    if user_info[2] < 0:
        conn.send('0'.encode('utf-8'))
        return False
    else:
        conn.send('1'.encode('utf-8'))

    header_bytes = pickle.dumps(re_header)

    header_len = len(header_bytes)
    header_len_bytes = struct.pack('i', header_len)
    conn.send(header_len_bytes)
    conn.send(header_bytes)

    with open(file_path, 'rb') as f:
        for line in f:
            conn.send(line)

    try:
        cursor.execute(
            '''insert into dwn_records(user_id,video_id,cost) values(%s,%s,%s)''',
            (user_info[0], data['id'], video_list[2]))
        db_conn.commit()
        cursor.execute('''update `user` set money=%s where phone=%s''',
                       (user_info[2], data['phone']))
        db_conn.commit()
    except Exception as e:
        print(e)