Esempio n. 1
0
def index(request):
    if request.method == "GET":
        lastSeenId = int(request.GET.get('lastSeenId', '0'))
        messages = Message.objects.all().filter(
            id__gt=lastSeenId).order_by('id')

        POPMessages = map(
            lambda m: {
                'id': m.id,
                'sender': m.sender,
                'body': m.body
            }, messages[0:1000])
        return JsonResponse({'messages': list(POPMessages)})
    if request.method == "POST":
        sender = request.POST.get('sender', None)
        body = request.POST.get('body', None)
        if sender is None or body is None:
            return JsonResponse("Sender and Body are required fields",
                                status=400)
        message = Message(sender=sender, body=body)
        message.save()

        # Limit total messages
        messages = Message.objects.all().order_by('id')
        count = messages.count()
        diff = count - settings.CHAT_MAX_MESSAGES
        if diff > 0:
            for i in range(diff):
                message = messages[0]
                message.delete()

        return JsonResponse({'status': 'Ok'})
Esempio n. 2
0
def msg_consumer(message):
    # Save to model
    #room = message.content['room']

    data = json.loads(message.content['message'])
    username = data.get('username')
    msg = data.get('message')
    user = User.objects.filter(username=username).first()
    print('msg=> ', message.content)

    message_to_return = json.loads(message.content['message'])

    if data.get('action') == 'create':
        msg_obj = Message()
        msg_obj.sender_user = user
        msg_obj.message = msg
        msg_obj.save()
        message_to_return["id"] = msg_obj.id
        message_to_return["creation_date"] = datetime.datetime.strftime(
            msg_obj.creation_date, '%Y-%m-%d %H:%M:%S')

    if data.get('action') == 'delete':
        msg_obj = Message.objects.filter(id=data.get('id')).first()
        msg_obj.delete()

    # Broadcast to listening sockets
    message_to_return["action"] = data.get('action')

    Group('chat').send({'text': json.dumps(message_to_return)})
Esempio n. 3
0
 async def command(self, cmd):
     """ Run chat command """
     app = self.request.app
     app.logger.debug(f'Chat command {cmd}')
     if cmd.startswith('/kill'):
         # unconnect user from room
         try:
             target = cmd.split(' ')[1]
             peer = app.wslist[self.room.id][target]
             await self.disconnect(target, peer, silent=True)
             app.logger.debug(f'User {target} killed')
         except KeyError:
             pass
     elif cmd == '/clear':
         # drop all room messages
         count = await app.objects.execute(
             Message.delete().where(Message.room == self.room))
         app.logger.debug(f'Removed {count} messages')
         for peer in app.wslist[self.room.id].values():
             peer.send_json({'cmd': 'empty'})
     elif cmd == '/help':
         return {
             'text':
             dedent('''\
             - /help - display this msg
             - /kill {username} - remove user from room
             - /clear - empty all messages in room
             ''')
         }
     else:
         return {'text': 'wrong cmd {cmd}'}