Beispiel #1
0
    def _handle_private_send_file(self, session: Session, request):
        p_user = self.user_repository.find_by_username(request['p_username'])

        if p_user is None:
            session.send_response({
                'FOR': 'FILE-PRIVATE-SEND',
                'status': 'rejected',
                'message': 'user not exist'
            })
            return

        session.send_response({'FOR': 'FILE-PRIVATE-SEND', 'status': 'ready'})

        file_entity: FileEntity = self._handle_send_file(session, request)

        message = {
            'text': '[' + request['file_name'] + '], file_code: ' +
            file_entity.file_code,
            'from_user': session.user.username
        }

        p_user.add_to_inbox(session.user.username, message)
        session.user.add_to_inbox(p_user.username, message)
        self.user_repository.save(p_user)
        self.user_repository.save(session.user)

        message['FOR'] = 'NOTIF'
        target_session: Session = SessionManager.get_by_username(
            p_user.username)
        if target_session is not None:
            target_session.send_response(message)

        session.send_response(message)
Beispiel #2
0
    def _handle_send_file(self, session: Session, request):

        p_user = self.user_repository.find_by_username(request['p_username'])

        if p_user is None:
            session.send_response({
                'FOR': 'FILE-PRIVATE-SEND',
                'status': 'rejected',
                'message': 'user not exist'
            })
            return

        session.send_response({
            'FOR': 'FILE-PRIVATE-SEND',
            'status': 'ready'
        })

        unique_code = str(uuid.uuid4())[1:7]
        file_path = 'storage/'+unique_code + '-' + request['file_name']
        fd = open(file_path, 'wb+', 0)

        max_size = request['file_size']
        received = 0

        conn = session.connection
        while received < max_size:
            data = conn.recv(1024)
            received += len(data)
            fd.write(data)

        fd.close()

        file_entity = FileEntity()
        file_entity.owner = session.user.username
        file_entity.file_path = file_path
        file_entity.file_code = unique_code

        self.file_repository.save(file_entity)

        message = {
            'text': '[' + request['file_name'] + '], file_code: ' + unique_code,
            'from_user': session.user.username
        }

        p_user.add_to_inbox(session.user.username, message)
        session.user.add_to_inbox(p_user.username, message)
        self.user_repository.save(p_user)
        self.user_repository.save(session.user)

        message['FOR'] = 'NOTIF'
        target_session: Session = SessionManager.get_by_username(p_user.username)
        if target_session is not None:
            target_session.send_response(message)

        session.send_response(message)
Beispiel #3
0
    def _handle_group_send_file(self, session: Session, request):
        group_entity: GroupEntity = self.group_repository.find_by_code(
            request['code'])

        if session.user.username in group_entity.members:
            pass
        else:
            session.send_response({
                'FOR':
                'FILE-GROUP-SEND',
                'status':
                'failed',
                'message':
                'You are not a member of the group!'
            })
            return

        session.send_response({'FOR': 'FILE-GROUP-SEND', 'status': 'ready'})

        file_entity: FileEntity = self._handle_send_file(session, request)

        message = {
            'text': '[' + request['file_name'] + '], file_code: ' +
            file_entity.file_code,
            'from_user': session.user.username
        }

        group_entity.inbox.append(message)
        self.group_repository.save(group_entity)

        message['FOR'] = 'NOTIF'
        message['from_group'] = group_entity.group_name

        members = group_entity.members
        for member in members:
            if member == session.user.username:
                continue
            member_session: Session = SessionManager.get_by_username(member)
            if member_session is not None:
                member_session.send_response(message)
                print('send to ' + member_session.user.username)

        session.send_response({'FOR': 'MSG-GROUP-SEND', 'status': 'success'})
Beispiel #4
0
    def _msg_private_send_handler(self, session: Session, request):
        target_username = request['p_username']
        msg = request['message']

        target_session: Session = SessionManager.get_by_username(
            target_username)
        target_user = self.user_repository.find_by_username(target_username)

        if target_session is not None:
            target_session.send_response({
                'FOR': 'NOTIF',
                'from_user': session.user.username,
                'text': request['message']
            })
            session.send_response({
                'FOR': request['COMMAND'],
                'status': 'success'
            })
        else:
            if target_user is not None:
                session.send_response({
                    'FOR': request['COMMAND'],
                    'status': 'success'
                })
            else:
                session.send_response({
                    'FOR': request['COMMAND'],
                    'status': 'failed',
                    'message': 'user not found'
                })

        if target_user is not None:
            message = dict()
            message['from_user'] = session.user.username
            message['text'] = request['message']

            # simpan message di 2 inbox
            session.user.add_to_inbox(target_user.username, message)
            self.user_repository.save(session.user)

            target_user.add_to_inbox(session.user.username, message)
            self.user_repository.save(target_user)
Beispiel #5
0
    def _msg_group_send_handler(self, session: Session, request):

        group_entity: GroupEntity = self.group_repository.find_by_code(request['code'])

        if session.user.username in group_entity.members:
            pass
        else:
            session.send_response({
                'FOR': 'MSG-GROUP-SEND',
                'status': 'failed',
                'message': 'You are not a member of the group!'
            })
            return

        members = group_entity.members
        for member in members:
            if member == session.user.username:
                continue
            member_session: Session = SessionManager.get_by_username(member)
            if member_session is not None:
                member_session.send_response({
                    'FOR': 'NOTIF',
                    'from_group': group_entity.group_name,
                    'from_user': session.user.username,
                    'text': request['message']
                })
                print('send to '+member_session.user.username)

        group_entity.inbox.append({
            'from_user': session.user.username,
            'text': request['message']
        })

        session.send_response({
            'FOR': 'MSG-GROUP-SEND',
            'status': 'success'
        })

        self.group_repository.save(group_entity)