예제 #1
0
    def testJoin(self):
        owner = None
        user = User(1234, "username", "password")
        roomName = "general"
        chatroom = Chatroom(roomName, owner)

        chatroom.join(user)
예제 #2
0
파일: main.py 프로젝트: bas00445/WIChat
    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)
예제 #3
0
    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)
예제 #4
0
    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
예제 #5
0
    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)])
예제 #6
0
    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)])
예제 #7
0
 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
예제 #8
0
    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
예제 #9
0
    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)
예제 #10
0
    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)
예제 #11
0
    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)
예제 #12
0
    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
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
    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
예제 #16
0
    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
예제 #17
0
파일: main.py 프로젝트: bas00445/WIChat
    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
예제 #18
0
파일: main.py 프로젝트: bas00445/WIChat
    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)
예제 #19
0
파일: main.py 프로젝트: bas00445/WIChat
    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)
예제 #20
0
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
    
예제 #21
0
    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, [])