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)
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)
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'})
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)
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)