Example #1
0
 def broadCast(self):
     sql = 'select ip,port from user where isOnline = %s;'
     addr = self.mysqlhelper.read_all(sql, ['在线'])
     self.insertMessageHistory(self.data_from_client)
     for temp in addr:
         packSendData(self.udp_socket, (temp[0], int(temp[1])),
                      self.data_from_client)
Example #2
0
 def alterOwnInfo(self):
     data = self.data_from_client
     changed_words = data.get('changed_words')
     if changed_words == 'nickName':
         sql = 'update user set nickName = %s where nickName = %s;'
     elif changed_words == 'trueName':
         sql = 'update user set trueName = %s where nickName = %s;'
     elif changed_words == 'gender':
         sql = 'update user set gender = %s where nickName = %s;'
     elif changed_words == 'department':
         sql = 'update user set department = %s where nickName = %s;'
     elif changed_words == 'position':
         sql = 'update user set position = %s where nickName = %s;'
     elif changed_words == 'introduce':
         sql = 'update user set introduce = %s where nickName = %s;'
     elif changed_words == 'email':
         sql = 'update user set email = %s where nickName = %s;'
     elif changed_words == 'phone':
         sql = 'update user set phone = %s where nickName = %s;'
     res = self.mysqlhelper.execute(
         sql, [data.get('data'), data.get('own_nickname')])
     status = ''
     if res == 0:
         status = '修改失败'
     elif res == 1:
         status = '修改成功'
     packSendData(
         self.udp_socket, self.client_addr, {
             'event': 'alter_own_info',
             'own_nickname': data.get('own_nickname'),
             'status': status
         })
Example #3
0
    def secretChat(self):
        '''
        功能:
            1. 判断peer_nickname是否在线
                在线获取address
                不在线,回复own_nickname,对方不在线
            2. 向message_history写入聊天记录
            3. 向peer_nickname转发信息
        '''
        sql = 'select ip,port from user where nickName = %s;'
        addr = self.mysqlhelper.read_all(
            sql, [self.data_from_client.get('peer_nickname')])

        addr = (addr[0][0], int(addr[0][1]))  # addr是嵌套的元组,addr[0]才是有效地址
        if addr[0][0] == '' and addr[0][1] == '':
            data = {
                'event':
                'secret_chat',
                'peer_nickname':
                self.data_from_client.get('peer_nickname'),
                'data':
                '消息发送失败,' + self.data_from_client.get('peer_nickname') + '不在线!'
            }
            packSendData(self.udp_socket, self.client_addr, data)
        else:
            self.insertMessageHistory(self.data_from_client)
            packSendData(self.udp_socket, addr, self.data_from_client)
Example #4
0
    def __init__(self, udp_socket, own_nickname, parent=None):
        super(CenterWidget, self).__init__(parent)
        self.udp_socket = udp_socket
        self.own_nickname = own_nickname

        packSendData(self.udp_socket, server_addr,
                     {'event': 'get_all_users_info'})
        data, addr = self.udp_socket.recvfrom(1024)
        datafromserver = json.loads(data)

        hlay = QVBoxLayout()
        self.tree = QTreeWidget()  # 设置列数
        self.tree.setColumnCount(2)
        self.tree.setHeaderLabels(['昵称', '姓名', '状态'])  # 设置头的标题
        temp = self.loads(datafromserver.get('data'))
        str = '在线人数:' + repr(temp[0]) + '  离线人数:' + repr(
            temp[1]) + '  总人数:' + repr(temp[2])
        self.lab = QLabel(str)
        hlay.addWidget(self.lab)
        hlay.addWidget(self.tree)

        self.setLayout(hlay)

        self.tree.clicked.connect(self.onItemClick)
        self.tree.activated.connect(self.onItemClick)
Example #5
0
 def getHistory(self):
     sql = 'select nickNameSend,nickNameRecv,sendTime,message ' \
           'from messagehistory where nickNameSend = %s or nickNameRecv = %s;'
     data = self.mysqlhelper.read_all(sql, [
         self.data_from_client.get('own_nickname'),
         self.data_from_client.get('own_nickname')
     ])
     packSendData(self.udp_socket, self.client_addr, data)
Example #6
0
    def getOwnInfo(self):
        sql = 'select nickName,trueName,gender,department,position,introduce,email,phone ' \
              'from user where nickName = %s;'
        data = self.mysqlhelper.read_all(
            sql, [self.data_from_client.get('own_nickname')])

        packSendData(self.udp_socket, self.client_addr, {
            'data': data,
            'event': 'get_own_info'
        })
Example #7
0
 def onCellChanged(self, row, column):
     changed_words = [
         'nickName', 'trueName', 'gender', 'department', 'position',
         'introduce', 'email', 'phone'
     ]
     packSendData(
         self.udp_socket, server_addr, {
             'event': 'alter_own_info',
             'own_nickname': self.own_nickname,
             'changed_words': changed_words[row],
             'data': self.table.item(row, 0).text()
         })
Example #8
0
 def userMessage(self, peer_nickname, data):
     '''
     发送消息
     1. 构造数据
     2. 发送数据
     '''
     packSendData(
         self.udp_socket, server_addr, {
             'event': 'offline',
             'nickname': self.nickname,
             'peer_nickname': peer_nickname,
             'data': data
         })
Example #9
0
    def __init__(self,udp_socket,own_nickname,parent = None):
        super(ViewChatHistory,self).__init__(parent)
        self.udp_socket = udp_socket
        self.own_nickname = own_nickname
        self.setWindowTitle('查看聊天历史')

        # 现象:此处要先创建接收线程、再发送数据
        #      若先发送数据,再创建接收线程,client会自动退出
        # 原因:
        self.recv_thread = ProcessRecv(self.udp_socket)
        self.recv_thread.start()
        self.recv_thread.dataRecved.connect(self.recvMessage)

        packSendData(self.udp_socket, server_addr, {'event': 'get_history', 'own_nickname': self.own_nickname})
Example #10
0
    def sendMessage(self):
        data = {
            'event': 'broadcast',
            'own_nickname': self.own_nickname,
            'peer_nickname': 'broadcast',
            'data': self.input_text.toPlainText()
        }
        self.input_text.clear()
        self.input_text.focusWidget()
        print('data=', data)
        packSendData(self.udp_socket, server_addr, data)


# TODO 组聊发送消息收到和收不到交替现象
Example #11
0
 def sendMessage(self):
     if self.isSecretChat:
         flag = 'secret_chat'
     else:
         flag = 'group_chat'
     data = {
         'event': flag,
         'own_nickname': self.own_nickname,
         'peer_nickname': self.peer_nickname,
         'data': self.input_text.toPlainText()
     }
     self.input_text.clear()
     self.input_text.focusWidget()
     print('data=', data)
     packSendData(self.udp_socket, server_addr, data)
Example #12
0
 def groupChat(self):  #TODO 后期要实现消息离线发送功能
     '''
     功能:
         1. 获取peer_nickname的在线成员
         2. 插入聊天记录
         2. 获取peer_nickname的在线成员的addr
         3. 获取peer_nickname的在线成员的转发消息
     '''
     sql = 'select ip,port from user where isOnline = %s and department = %s;'
     addr = self.mysqlhelper.read_all(
         sql, ['在线', self.data_from_client.get('peer_nickname')])
     self.insertMessageHistory(self.data_from_client)
     for temp in addr:
         packSendData(self.udp_socket, (temp[0], int(temp[1])),
                      self.data_from_client)
Example #13
0
    def __init__(self, udp_socket, own_nickname, parent=None):
        super(ViewOwnInfo, self).__init__(parent)
        self.udp_socket = udp_socket
        self.own_nickname = own_nickname
        self.setWindowTitle('个人信息')
        self.setUI()

        self.recv_thread = ProcessRecv(self.udp_socket)
        self.recv_thread.start()
        self.recv_thread.dataRecved.connect(self.recvMessage)

        packSendData(self.udp_socket, server_addr, {
            'event': 'get_own_info',
            'own_nickname': self.own_nickname
        })
Example #14
0
 def onQuit(self):
     packSendData(self.udp_socket, server_addr, {
         'event': 'offline',
         'nickname': self.own_nickname
     })
     sys.exit()