Exemple #1
0
def recv(con, name):
    """
    功能: 接收用户发来的数据,并对其进行相应的处理
    说明:
        info 为用户发送过来的字符串处理后生成的tuple,第一个参数name是用户名,第二个参数是一个dict对象,不同键值对应不同操作
        info 的第二个参数中key-value对中对应关系为
            'mess'-- 用户向好友发送消息,value为一个tuple,它的第一个参数为消息内容,第二个参数为信息的目的好友的name
            'add' -- 添加一个好友的请求,value为待添加好友的name
            'del' -- 删除一个好友的请求,value为待删除好友的name
            'find' -- 搜索用户,value为一个用户名的模糊信息
    """
    global user
    try:
        while 1:
            info = eval(
                con.recv(1024).decode("utf-8")
            )  # (name,{'mess':(message,user),'add':'user','del':'user','find':'user'})
            try:
                if "mess" in info[1] and info[1]["mess"][1] in user:
                    toUser = info[1]["mess"][1]
                    user[toUser].send(str((name, info[1]["mess"][0])).encode("utf-8"))
                elif "find" in info[1]:  # 搜索好友
                    res = str({"ulist": User.findUsers(info[1]["find"])})
                    con.send(res.encode("utf-8"))
                elif "add" in info[1]:
                    User.addUser(name, info[1]["add"])
                    con.send(str({"newUs": User.getUserNameList(name)}).encode("utf-8"))
                elif "del" in info[1]:
                    res = User.delFriend(name, info[1]["del"])
                    con.send(str({"del": res}).encode("utf-8"))
            except:
                print("解析异常!")
    except:
        print("用户 " + name + " 下线 !")
        con.close()
        user.pop(name)  # 弹出name