def testJoin(self): owner = None user = User(1234, "username", "password") roomName = "general" chatroom = Chatroom(roomName, owner) chatroom.join(user)
def sendInvitation(self): gname = self.groupNameInput.text creatorID = WIApp.clientInfo.getID() if len(gname) == 0 or not gname.isalpha(): popup = Popup(title='Invalid Group Name', content=Label(text="Group name must be alphabet!"), auto_dismiss=True, size_hint=(.7, .2), background='pictures/backgroundPopup.png') popup.open() return None if len(self.contactContainer.children) == 0: popup = Popup(title='ERROR', content=Label(text="There is no client in server!"), auto_dismiss=True, size_hint=(.7, .2), background='pictures/backgroundPopup.png') popup.open() return None if WIApp.chatroomCollector.isExist(gname, creatorID): popup = Popup(title='Invalid Group Name', content=Label(text="This name already exist!"), auto_dismiss=True, size_hint=(.7, .2), background='pictures/backgroundPopup.png') popup.open() return None receivedAddrs = [] for invc in self.contactContainer.children: if invc.isSelected() == True: receivedAddrs.append(invc.idButton.text) inviteObj = Invitation(receivedAddrs, WIApp.clientInfo, self.groupNameInput.text) task = Task("Invite to group", inviteObj) # Create widget # gname = self.groupNameInput.text group = Chatroom(gname, WIApp.clientInfo.getID(), rType="group") group.addMemberID( inviteObj.getOwnerInfo().getID()) ## Attach id of sender WIApp.chatroomCollector.addNewChatroom(group) groupWidget = GroupChatComponent(gname, inviteObj.getOwnerInfo().getID(), inviteObj.getOwnerInfo().getName()) groupContainer = WIApp.mainUIScreen.screenSlider.contactScreen.groupContainer groupContainer.add_widget(groupWidget) WIApp.clientSocket.sendTask(task)
def testGetMessagesByTimeEmpty(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName, owner) messages = chatroom.getMessagesByTime(messageTime - 1, user) self.assertMessageListEquals(messages[1],[]) self.assertEqual(messages[0], -1)
def testNoOwner(self): owner = None user = User(1234, "username", "password") roomName = "general" chatroom = Chatroom(roomName, owner) try: chatroom.banUser(owner, user) self.fail() except NotOwnerException: pass
def testAddMessageFromOwner(self): owner = User("ownername", 123,"password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName,owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) messages = chatroom.getMessagesByIndex(-1, owner) self.assertMessageListEquals(messages[1], [Message(owner,messageText,messageTime)])
def testBanUserNotOwner(self): owner = User("ownername", 123, "password") user1 = User("user1name", 1234, "password") user2 = User("user2name", 12345, "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName, owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) messages = chatroom.getMessagesByIndex(-1, user1) self.assertMessageListEquals(messages[1], [Message(owner, messageText, messageTime)]) #Only owner should be able to ban users try: chatroom.banUser(user1, user2) self.fail() except NotOwnerException: pass messages = chatroom.getMessagesByIndex(-1, user2) self.assertMessageListEquals(messages[1], [Message(owner, messageText, messageTime)])
def __init__(self): self.chatrooms = { self.DEFAULT_CHATROOM: Chatroom(self.DEFAULT_CHATROOM, None) } self.dbHandler = dbHandler self.userRE = re.compile('^[a-zA-Z0-9]{1,20}$') self.passwordRE = self.userRE self.chatroomRE = self.userRE
def testGetMessagesByTimeBanned(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageTime = int(time.time()) messages = [] for i in xrange(100): messages.append(Message(user,"text" + str(i), messageTime + i)) chatroom = Chatroom(roomName, owner) # populate message list for message in messages: chatroom.addMessage(message) chatroom.banUser(owner, user) #Get Messages should fail try: messages = chatroom.getMessagesByTime(messageTime + 50, user) self.fail() except UserBannedException: pass
def testAddMessageFromBannedUser(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName,owner) message = Message(user, messageText, messageTime) chatroom.addMessage(message) messages = chatroom.getMessagesByIndex(-1, owner) self.assertEqual(messages[0], 0) messages = messages[1] self.assertEqual(len(messages), 1) receivedMessage = messages[0] self.assertEqual(receivedMessage.user.name, user.name) self.assertEqual(receivedMessage.text, messageText) self.assertEqual(receivedMessage.time, messageTime)
def addChatroom(self, ownerID, chatroomName): try: chatroom = self.__getChatroom(chatroomName) raise DuplicateChatroomException except ChatroomDoesNotExistException: pass self.__formatChatroomName(chatroomName) owner = self.__getUserByID(ownerID) self.chatrooms[chatroomName] = Chatroom(chatroomName, owner)
def testGetMessagesByTime(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageTime = int(time.time()) messages = [] for i in xrange(100): messages.append(Message(user,"text" + str(i), messageTime + i)) chatroom = Chatroom(roomName, owner) #populate message list for message in messages: chatroom.addMessage(message) #Get from before list receivedMessages = chatroom.getMessagesByTime(messageTime - 1, user) self.assertMessageListEquals(receivedMessages[1], messages) self.assertEqual(receivedMessages[0], 99) #Get with time = first time receivedMessages = chatroom.getMessagesByTime(messageTime, user) self.assertMessageListEquals(receivedMessages[1], messages) self.assertEqual(receivedMessages[0], 99) #Get from middle of list receivedMessages = chatroom.getMessagesByTime(messageTime + 50, user) self.assertMessageListEquals(receivedMessages[1], messages[50:]) self.assertEqual(receivedMessages[0], 99) #Get from end of list receivedMessages = chatroom.getMessagesByTime(messageTime + 99, user) self.assertMessageListEquals(receivedMessages[1], messages[-1:]) self.assertEqual(receivedMessages[0], 99) #Get from beyond end of list receivedMessages = chatroom.getMessagesByTime(messageTime + 100, user) self.assertMessageListEquals(receivedMessages[1], []) self.assertEqual(receivedMessages[0], 99)
def testJoinBanned(self): owner = User("ownername", 123, "password") user = User(1234, "username", "password") roomName = "general" chatroom = Chatroom(roomName, owner) chatroom.banUser(owner, user) try: chatroom.join(user) self.fail() except UserBannedException: pass
def testUnbanUserNotOwner(self): owner = User("ownername", 123, "password") user1 = User("user1name", 1234, "password") user2 = User("user2name", 12345, "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName,owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) chatroom.banUser(owner, user2) try: chatroom.unbanUser(user1, user2) self.fail() except NotOwnerException: pass try: messages = chatroom.getMessagesByIndex(-1, user2) self.fail() except UserBannedException: pass
def testbanUserTwice(self): owner = User(123, "ownername","password") user = User(1234, "username","password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName,owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) chatroom.banUser(owner, user) chatroom.banUser(owner, user) try: messages = chatroom.getMessagesByIndex(-1, user) self.fail() except UserBannedException: pass
def testGetMessageByIndexBannedUser(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName,owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) messages = chatroom.getMessagesByIndex(-1, user) # user is not banned yet, should be able to see chat self.assertMessageListEquals(messages[1], [Message(owner, messageText, messageTime)]) chatroom.banUser(owner, user) # user is banned, should result in an exception try: messages = chatroom.getMessagesByIndex(-1, user) self.fail() except UserBannedException: pass
def testUnbanUserNotBanned(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageText = "123" messageTime = int(time.time()) chatroom = Chatroom(roomName, owner) message = Message(owner, messageText, messageTime) chatroom.addMessage(message) try: chatroom.unbanUser(owner, user) self.fail() except UserNotBannedException: pass
def responseInvitation(self, gname, creatorID, creatorName, answer, root): inv = Invitation([creatorID], WIApp.clientInfo, gname, answer) task = Task("Response Invitation", inv) WIApp.clientSocket.sendTask(task) if answer == "accept": # Create a groupchat widget groupWidget = GroupChatComponent(gname, creatorID, creatorName) groupContainer = WIApp.mainUIScreen.screenSlider.contactScreen.groupContainer groupContainer.add_widget(groupWidget) groupChatroom = Chatroom(gname, creatorID, rType="group") groupChatroom.addMemberID(creatorID) groupChatroom.addMemberID(WIApp.clientInfo.getID()) WIApp.chatroomCollector.addNewChatroom(groupChatroom) self.requestContainer.remove_widget( root) # Remove the request component
def updateMessage(self, task): msg = task.getData() targetName = msg.getOwnerName() targetID = msg.getOwnerID() WIApp.clientTargetID = targetID currentRoom = WIApp.chatroomCollector.getRoomByMemberID( [WIApp.clientInfo.getID(), targetID]) if currentRoom not in WIApp.chatroomCollector.getChatroomList(): # Create a new room roomName = WIApp.username + " and " + targetName newChatroom = Chatroom(roomName, rType="single") newChatroom.addMemberID(WIApp.clientInfo.getID()) newChatroom.addMemberID(targetID) WIApp.chatroomCollector.addNewChatroom(newChatroom) if WIApp.currentChatroom == None: WIApp.currentChatroom = WIApp.chatroomCollector.getRoomByMemberID( [WIApp.clientInfo.getID(), targetID]) # Got the message while talking to another chatroom twice = False for room in WIApp.chatroomCollector.getChatroomList(): if (set(room.getMemberIDList()) == set(msg.getReceiverAddr()) and not (WIApp.clientInfo.getID() == msg.getOwnerID())): room.addMessage(msg) # If got any message while talking in the selected chatroom if set(room.getMemberIDList()) == set( WIApp.currentChatroom.getMemberIDList()) and not twice: if msg.getOwnerID() != WIApp.clientInfo.getID(): messageBox = MessageBoxPartner(msg.getOwnerName(), msg.getText(), msg.getTimeCreated()) elif msg.getOwnerID() == WIApp.clientInfo.getID(): messageBox = MessageBoxOwner("YOU", msg.getText(), msg.getTimeCreated()) self.chatContainer.add_widget(messageBox) twice = True WIApp.mainUIScreen.updateHistoryType_2(msg)
def setClientTarget(self, targetID, targetName): WIApp.clientTargetName = targetName WIApp.clientTargetID = targetID WIApp.chatroomScreen.roomName.text = WIApp.username + " and " + targetName currentRoom = WIApp.chatroomCollector.getRoomByMemberID( [WIApp.clientInfo.getID(), targetID]) if currentRoom not in WIApp.chatroomCollector.getChatroomList(): roomName = WIApp.username + " and " + targetName newChatroom = Chatroom(roomName, rType="single") newChatroom.addMemberID(WIApp.clientInfo.getID()) newChatroom.addMemberID(targetID) WIApp.chatroomCollector.addNewChatroom(newChatroom) # Choose the current chatroom to load and save the history chat WIApp.currentChatroom = WIApp.chatroomCollector.getRoomByMemberID( [WIApp.clientInfo.getID(), targetID]) ## Load private chat WIApp.chatroomScreen.loadDataChatroom(WIApp.currentChatroom)
s.bind(('127.0.0.1', 9999)) s.listen(5) # 调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量 print('Waiting for connection...') # def tcplink(sock, addr): # print('Accept new connection from %s:%s...' % addr) # sock.send(str('欢迎你进入python聊天开发的行业!').encode()) # 连接建立后,服务器发送一条欢迎消息 # while True: # data = sock.recv(1024) # if not data or data.decode('utf-8') == 'exit': # 判断接受的数据是否为空 # break # sock.send(('你好,你刚刚给我说了: %s!' % data.decode('utf-8')).encode('utf-8')) # sock.close() nameList = ['小明', '小红', '小刚','小华','小李','小军','老李'] count = 0 chatroom = Chatroom.Chatroom() t = Thread(target=chatroom.toChat) # 在新线程中创建一个聊天室: t.start() while True: # 接受一个新连接: sock, addr = s.accept() user = User.User(nameList[count],sock) #实例化一个用户类 chatroom.addUser(user) if chatroom.getUserCount() == 0: t.join() print('exit server') break count += 1
def testGetMessageByIndexWithIndex(self): owner = User(123, "ownername", "password") user = User(1234, "username", "password") roomName = "general" messageTime = int(time.time()) message0 = Message(user, "text0", messageTime) messageTime += 1 message1 = Message(user, "text1", messageTime) messageTime += 1 message2 = Message(user, "text2", messageTime) messageTime += 1 message3 = Message(user, "text3", messageTime) messageTime += 1 message4 = Message(user, "text4", messageTime) messageTime += 1 message5 = Message(user, "text5", messageTime) messageTime += 1 chatroom = Chatroom(roomName, owner) chatroom.addMessage(message0) chatroom.addMessage(message1) chatroom.addMessage(message2) chatroom.addMessage(message3) chatroom.addMessage(message4) chatroom.addMessage(message5) #Get from middle of list messages = chatroom.getMessagesByIndex(2, user) self.assertEqual(messages[0], 5) messages = messages[1] self.assertMessageListEquals(messages,[message3, message4, message5]) #Get from end of list messages = chatroom.getMessagesByIndex(5, user) self.assertEqual(messages[0], 5) messages = messages[1] self.assertMessageListEquals(messages, []) #Get from beyond end of list messages = chatroom.getMessagesByIndex(6, user) self.assertEqual(messages[0], 5) messages = messages[1] self.assertMessageListEquals(messages, [])