def on_connect(sid, environ):
    """
    当客户端连接时做的事情
    如果方法返回False,表示服务器拒绝客户端的socketio连接,
    :param environ: dict
    :return:
    """
    # print('sid={}'.format(sid))
    # print('environ={}'.format(environ))

    timestamp = time.time()
    sio.emit('notify', {
        'msg': 'Hello, this is notify event',
        'timestamp': timestamp
    })
    # send -> event 'message'
    sio.send({'msg': 'Hello, this is message event', 'timestamp': timestamp})

    # 解析environ字典,取出查询字符串中传递的token
    request = Request(environ)
    token = request.args.get('token')

    # print('token=>{}'.format(token))

    # 验证token,获取用户身份
    if token:
        payload = verify_jwt(token, JWT_SECRET)
        # print('payload->{}'.format(payload))
        if payload is not None:
            user_id = payload['user_id']

            # 将用户添加到专属房间,房间编号为用户id,方便flask web那边的业务可以直接给user_id对应的房间发送消息
            sio.enter_room(sid, str(user_id))
            return
    return False
Exemple #2
0
def on_connect(sid, environ):
    # 连接后的客户端信息进行输出
    print('sid=={},environ=={}'.format(sid, environ))
    # 连接后,默认回复的消息内容
    msg_data = {'message': 'hello!!', 'time_stamp': int(time.time() * 1000)}
    # 发送消息给客户端
    sio.emit('message', data=msg_data, room=sid)
Exemple #3
0
def connect(sid, data):
    print('sendMessage')
    print(data)
    #查找数据库自己的id
    sql0 = 'select * from user where sid = "%s"' % sid
    res0 = fnSql(sql0)
    id = res0[0][0]
    data['sendid'] = id

    #查询目标ID是否已经上线
    sql1 = 'select islogin,sid from user where id="%s"' % data['destid']

    res1 = fnSql(sql1)
    if res1[0][0] == '1':
        sql2 = 'insert into message (sendid,destid,type,content,time,isRead) values ("%s","%s","%s","%s","%s","%s")' % (
            id, data['destid'], data['type'], data['content'], data['time'], 1)
        fnSql(sql2)
        # 查询发送方的信息
        sql3 = 'select * from user where id = "%s"' % id
        print(sql3)
        data['info'] = fnSql(sql3)[0]
        sio.emit('sendMessage', data, room=res1[0][1])
    else:
        #将未读消息插入数据库,下次用户登陆时,接受的消息中未读的消息
        sql2 = 'insert into message (sendid,destid,type,content,time,isRead) values ("%s","%s","%s","%s","%s","%s")' % (
            id, data['destid'], data['type'], data['content'], data['time'], 0)
        fnSql(sql2)
Exemple #4
0
Fichier : chat.py Projet : Wjun0/nh
def on_chat(sid, data):

    # 接收数据
    print("用户发送的数据: %s" % data)

    response = data

    # 将AI的回复返回给客户端
    sio.emit('chat', response, room=sid)
Exemple #5
0
def on_connect(sid, environ):
    """
    与客户端建立好连接后被执行
    """
    print('sid={}'.format(sid))
    print('environ={}'.format(environ))

    msg_data = {'msg': 'hello', 'timestamp': round(time.time() * 1000)}

    sio.emit('message', msg_data, room=sid)
Exemple #6
0
def on_connect(sid, environ):
    """
    与客户端建立好连接后执行
    :param sid:string sid 是socketio为当前连接客户端生成的识别io
    :param environ: dict 在连接握手时客户端发送过来的握手数据(HTTP报文解析之后的字典)
    :return:
    """
    # sio,emit中需要传参:事件类型,消息数据,接收人
    data = {'msg': 'hello', 'timestamp': round(time.time() * 1000)}

    # 与前端约定好,聊天内容数据都定义为message类型
    sio.emit('message', data, room=sid)
def on_notify(sid, data):
    """
    收到客户端notify事件消息的时候执行
    :param sid:
    :param data:
    :return:
    """
    print('data->{}'.format(data))
    timestamp = time.time()
    sio.emit('notify', {
        'msg': 'I have received your msg: {}'.format(data),
        'timestamp': timestamp
    })
Exemple #8
0
def on_connect(sid, environ):
    """
    与客户端建立好连接后被执行
    :param sid: string sid是socketio为当前连接客户端生成的识别id
    :param environ: dict 在连接握手时客户端发送的握手数据(HTTP报文解析之后的字典)
    """
    # sio.emit(消息事件类型, 消息数据内容, 接收人)

    # 与前端约定好, 聊天的内容 数据格式
    data = {'msg': 'hello', 'timestamp': round(time.time() * 1000)}

    # 与前端约定好,聊天的内容数据都定义为message类型
    sio.emit('message', data, room=sid)
Exemple #9
0
def on_connect(sid, environ):
    """
    在客户端连接之后被执行
    :return:
    """
    print('sid={}'.format(sid))
    print('environ={}'.format(environ))

    # 向客户端发送事件消息
    msg_data = {
        'msg': 'hello',
        'timestamp': round(time.time()*1000)
    }
    sio.emit('message', msg_data, room=sid)
Exemple #10
0
def connect(sid, data):
    print('updateFriends')
    print(data)
    #通过sid查找用户id
    sql0 = 'select * from user where sid = "%s"' % sid
    res0 = fnSql(sql0)
    #通过用户id,查找好友
    sql1 = 'SELECT *  from user WHERE id in (SELECT user2id from friendrelation WHERE user1id="%s")' % res0[
        0][0]
    res1 = fnSql(sql1)
    #通过用户id,查找相关性
    sql2 = 'SELECT * from friendrelation WHERE user1id = "%s";' % res0[0][0]
    res2 = fnSql(sql2)
    #通过用户id,查找好友组
    sql3 = 'select * from friend_group where userid = "%s"' % res0[0][0]
    res3 = fnSql(sql3)

    data = {'res1': list(res1), 'res2': list(res2), 'res3': list(res3)}
    sio.emit('updateFriends', data, room=sid)
Exemple #11
0
def connect(sid, data):
    #服务器接收登录消息,登录data = {username:xxxxx,password:xxxxx(未加密)}
    print(data)
    sql = 'select username,password,imgheader,sid,id from user where username="******";' % data[
        'username']
    sqlres = fnSql(sql)

    if len(sqlres) > 0:
        #返回来的数据是元祖,((username,password),)
        md5password = hashlib.md5(bytes(M_md5num.encode('utf-8')))  # 双重加密的加密参数
        md5password.update(bytes(data['password'].encode('utf-8')))

        data['password'] = md5password.hexdigest()
        if sqlres[0][1] == data['password']:
            sio.emit('login', list(sqlres[0]), room=sid)
            sql = 'update user set islogin=1,sid="%s" where username = "******";' % (
                sid, data['username'])
            fnSql(sql)

            #查询未读的消息发送给用户
            #sqlmessage = 'select * from message where destid = "%s" and not isRead="1"'% sqlres[0][4];
            # sqlmessage1 = 'select username,imgheader from user where id = "%s"'% sqlmessage[0][1];
            sqlweidu = 'select u.username,u.imgheader,m.* from user as u inner join message as m on u.id=m.sendid where m.destid= "%s" and not isRead="1";' % sqlres[
                0][4]
            #print(sqlmessage)
            resMessage = fnSql(sqlweidu)
            #print(resMessage)

            sio.emit('loginweidu', list(resMessage), room=sid)

        else:
            sio.emit('login', 'fail', room=sid)
    else:
        sio.emit('login', 'fail', room=sid)

    #判断是否账号和密码是否正确

    #如果密码未加密,那么就对密码加密

    #通过数据库查询语句,查找username的数据库密码

    # if 加密密码== 数据库密码:
    #登录成功
    #数据库里用户信息里面他的是否在线字段要修改为真,sid的值要更新
    # else:
    #登录失败
    #密码或者用户名不正确,可以再次尝试,或者是重新注册。
    #没有这个用户,可以尝试注册
    #密码不正确

    print('login')
    print(data)
Exemple #12
0
def connect(sid, data):
    # print('register')
    #用户发送注册信息,data={ username:xxx,password:xxxx}

    sql = 'select * from user where username="******";' % data['username']

    sqlres = fnSql(sql)
    if len(sqlres) > 0:
        print('注册失败')
        print(sqlres)
        sio.emit('login', 'fail', room=sid)
    else:
        md5password = hashlib.md5(bytes(M_md5num.encode('utf-8')))  #双重加密的加密参数
        md5password.update(bytes(data['password'].encode('utf-8')))

        data['password'] = md5password.hexdigest()
        sql = 'insert into user (username,password,imgheader) values ("%s","%s","%s")' % (
            data['username'], data['password'], M_userImgheader)
        fnSql(sql)
        print('插入成功')
        sio.emit('register', 'success', room=sid)
Exemple #13
0
 def run(self):
     while True:
         try:
             artist, title = self.queue.get(True)
             if not self.queue.empty():
                 self.queue.task_done()
                 continue
             sio.emit('song_data', {
                 'artist': artist,
                 'title': title,
                 'lyrics': 'Loading...'
             })
             print 'Thread!', artist, title
             lyrics = Lyrics.get(artist, title)
             sio.emit('song_data', {
                 'artist': artist,
                 'title': title,
                 'lyrics': lyrics
             })
             self.queue.task_done()
         except Queue.Empty:
             continue
def subscription_loop():
    bestblockhash = None
    mempool = []

    while True:
        data = General().info()
        if "result" in data:
            if "bestblockhash" in data["result"]:
                if data["result"]["bestblockhash"] != bestblockhash:
                    bestblockhash = data["result"]["bestblockhash"]

                    sio.emit("block.update",
                             utils.response({
                                 "height": data["result"]["blocks"],
                                 "hash": bestblockhash
                             }),
                             room="blocks")

                    updates = Block().inputs(bestblockhash)
                    for address in updates:
                        mempool = list(set(mempool) - set(updates[address]))

                        sio.emit("address.update",
                                 utils.response({
                                     "address":
                                     address,
                                     "tx":
                                     updates[address],
                                     "height":
                                     data["result"]["blocks"],
                                     "hash":
                                     bestblockhash
                                 }),
                                 room=address)

                data = General().mempool()
                temp_mempool = []

                if not data["error"]:
                    updates = Transaction.addresses(data["result"]["tx"])
                    for address in updates:
                        updates[address] = list(
                            set(updates[address]) - set(mempool))
                        temp_mempool += updates[address]

                        if len(updates[address]) > 0:
                            sio.emit("address.update",
                                     utils.response({
                                         "address": address,
                                         "tx": updates[address],
                                         "height": None,
                                         "hash": None
                                     }),
                                     room=address)

                mempool = list(set(mempool + temp_mempool))

        sio.sleep(0)
Exemple #15
0
def scores():
    """
    Updates the players' scores in a room
    """

    payload = request.get_json()

    name = payload.get('name')
    score = payload.get('score')
    room_id = payload.get('roomID')

    game_room = game_rooms.get_room(room_id)

    # Get player in room and update score
    player = game_room.get_player(name)
    player.set_score(score)

    # If all players have sent, announce winner to all
    if game_room.has_game_ended():
        sleep(1)
        sio.emit("gameEnd", game_room.get_connected_players(), room=room_id)

    return dict(status="success")
Exemple #16
0
def init():
    bestblockhash = None

    while True:
        data = General().info()
        if data['result']['bestblockhash'] != bestblockhash:
            bestblockhash = data['result']['bestblockhash']
            sio.emit('block.update',
                     utils.response({
                         'height': data['result']['blocks'],
                         'hash': bestblockhash
                     }),
                     room='blocks')

            updates = Block().inputs(bestblockhash)
            for address in updates:
                mempool = list(set(state.mempool) - set(updates[address]))
                if address in state.rooms:
                    sio.emit('address.update',
                             utils.response({
                                 'address': address,
                                 'tx': updates[address],
                                 'height': data['result']['blocks'],
                                 'hash': bestblockhash
                             }),
                             room=address)

        data = General().mempool()
        updates = Transaction().addresses(data['result']['tx'])
        temp_mempool = []
        for address in updates:
            updates[address] = list(set(updates[address]) - set(mempool))
            temp_mempool += updates[address]
            if address in state.rooms:
                if len(updates[address]) > 0:
                    sio.emit('address.update',
                             utils.response({
                                 'address': address,
                                 'tx': updates[address],
                                 'height': None,
                                 'hash': None
                             }),
                             room=address)

        mempool = list(set(mempool + temp_mempool))
Exemple #17
0
def connect_handler(sid, environ):
    print('Connection request')
    sio.emit("start",data="欢迎连接",room=sid)
    sio.enter_room(sid,room="house")
Exemple #18
0
def connect(sid, data):
    print('addfriend')
    print(data)

    #通过用户名查找是否有这个用户
    sql = 'select * from user where username="******";' % data['friendname']
    res = fnSql(sql)[0]
    #查找是否已经是好友
    #查找自己的信息

    sql1 = 'select * from user where sid = "%s"' % sid

    selfid = fnSql(sql1)[0][0]

    #查找关系表里面是否自己跟好友已经建立起联系
    sql2 = 'select * from friendrelation where user1id="%s" and user2id="%s"' % (
        selfid, res[0])
    print(sql2)
    res2 = fnSql(sql2)
    print(res)
    print(res2)

    if len(res) > 0 and len(res2) == 0:

        #判断好友组表里这个userid有没有这个组

        sql4 = 'select * from friend_group where userid="%s" and user_group = "%s"; ' % (
            selfid, data['groupname'])
        #插入数据到好友组里面
        res4 = fnSql(sql4)
        if len(res4) == 0:

            sql3 = 'insert into friend_group (userid,user_group) values (%s,"%s");' % (
                selfid, data['groupname'])

            #再给朋友和自己建立起联系
            sql5 = 'insert into friend_group (userid,user_group) values (%s,"%s");' % (
                res[0], data['groupname'])
            print(sql3)
            print(sql5)
            res3 = fnSql(sql3)
            res5 = fnSql(sql5)

            #建立起真正的好友关系
            #先查组ID
            sql6 = 'select * from friend_group where userid = "%s" and user_group = "%s"; ' % (
                selfid, data['groupname'])
            sql7 = 'select * from friend_group where userid = "%s" and user_group = "%s"; ' % (
                res[0], data['groupname'])

            groupid1 = fnSql(sql6)[0][0]

            groupid2 = fnSql(sql7)[0][0]
            #真正给表插入数据

            sql8 = 'insert into friendrelation (user1id,user2id,friend_group_id) values ("%s","%s","%s")' % (
                selfid, res[0], groupid1)
            sql9 = 'insert into friendrelation (user1id,user2id,friend_group_id) values ("%s","%s","%s")' % (
                res[0], selfid, groupid2)
            fnSql(sql8)
            fnSql(sql9)

            #查询两个用户的好友数据让其更新
            sio.emit('updateFriends', 'success', room=sid)
Exemple #19
0
def on_chat(sid, data):
    print("接收到前端发来的数据:%s" % data)
    # TODO 通过gprc将消息内容发送给AI聊天系统
    response = 'AI回复: 请稍等..'
    # 发消息给对应的客户端
    sio.emit('chat', response, room=sid)
Exemple #20
0
def the_msg(sid, msg):
    print(msg)
    sio.send(data="该sid所在所有房间号:{}".format(sio.rooms(sid)))
    sio.emit("chat", data="hello", room=sid)  # 发给用户
    # sio.send(data="house 房间群发消息", room="house", skip_sid=sid)
    sio.send(data="house 房间群发消息", room="house")  # 发给房间里的每一个sid