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)
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 })
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)
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)
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)
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' })
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() })
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 })
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})
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 组聊发送消息收到和收不到交替现象
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)
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)
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 })
def onQuit(self): packSendData(self.udp_socket, server_addr, { 'event': 'offline', 'nickname': self.own_nickname }) sys.exit()