Django channels, wysłanie wiadomości do grupy

0

Cześć,
w swojej aplikacji zdecydowałem się na skorzystanie z djnago channels. Wykorzystuję tę bibliotkę do obsługi web socketów. Jednak mam problem, nie mogę wysłać wiadomości go utworzonej grupy jednocześnie mogę wysłać wiadomość do łączącego się użytkownika. Kod mniej więcej wygląda tak:

class waiting(WebsocketConsumer):
    def connect(self):
        self.channel_layer.group_add(
            'my_group_name',
            self.channel_name
        )

        if <condition>:
            self.channel_layer.group_send( # To nie daje żadnego efektu, jestem penwny że warunek jest spełniany
                'my_group_name',
                {
                    'message' : 'succes'
                }
            )

        self.accept()
        self.send(json.dumps({'message' : 'message'})) # Ta widomość dochodzi

    def disconnect(self, close_code):
        self.channel_layer.group_discard(
            'my_group_name',
            self.channel_name
        )

Widać w tym jakiś błąd? Przekopałem już kilka tutoriali, sprawdziłem w dokumentacji i nie wiedzę żadnego błędu.

0

Hej,

Jaka wersja django_channels?

0
Tomasz Kozłowski napisał(a):

Hej,

Jaka wersja django_channels?

channels == 2.3.1 i Django 2.2.6.

0

Niestety nie mam doświadczenia z wersją 2.x ponieważ wciąż używam wersji 1.x

Próbowałeś przenieść wywołanie metody self.accept() nad kodem do wysłania wiadomości? Poza tym ta metoda nie powinna być wykonana jako pierwsza?

0

Tak próbowałem, spróbowałem chyba każdej kombinacji z tym związanej.

0

Dobra, udało mi się to rozwiązać, jako że sam nie lubię trafiać na pytania bez odpowiedzi to proszę:

class waiting(WebsocketConsumer):
    def connect(self):
        self.channel_layer.group_add(
            'my_group_name',
            self.channel_name
        )

        if <condition>:
            await self.channel_layer.group_send(
                self.room_group_name,
                {
                    'type': 'message',
                    'message': 'message'
                }
            )

        self.accept()

    def disconnect(self, close_code):
        self.channel_layer.group_discard(
            'my_group_name',
            self.channel_name
        )

    def message(self, event):
        message = event['message']

        await self.send(text_data=json.dumps({
            'message': message
        }))

Akurat to rozwiązanie udało mi się znaleźć trochę przez przypadek - dostałem zupełnie inny błąd który naprowadził mnie na poprawne rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1