web-dev-qa-db-ja.com

Django外部チャネルからのチャネルを使用してメッセージを送信する

Django channels 2.1.5 for websocketsを使用するオンラインゲームを構築しています。

クライアントとサーバー間の接続を構築し、コンシューマークラス内でのみそれらの間でデータを送信することもできます。

from channels.generic.websocket import WebsocketConsumer
import json
from . import controller

class GameConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()
        print("Wohooo .. Connected to client!")
        self.render()
        controller.startTurn()

    def render(self, type="render", message=None):
        self.send(controller.renderMap(type, message))

    def disconnect(self, close_code):
        print("WebSocket connection is lost...")

    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        controller.handleRecieved(text_data)
...

今、私がしたいのは、別のモジュールから関数render-これはコンシューマクラス内にあります-を呼び出すことです

私はこれを試しました:

from .. import consumer

def sendDeployments(owner, armies):
    type = "renderDeployments"
    message = owner + " has " + str(armies) + " to deploy"
    dummyConsumer = consumer.GameConsumer()
    consumer.GameConsumer.render(type, message)

しかし、クラスの外部から「self」パラメーターを使用できないため、失敗しました。

誰かが私の目標を達成する方法を考えることができますか?

Ps:このとき、同期は気にしません。

8
Ahmed Hammad

切断機能(チャネル2.3.0を使用)の正しいコードは次のとおりです。

class GameConsumer(WebsocketConsumer):
    ....

    def disconnect(self, close_code):
        self.channel_layer.group_discard(self.channel_name, 'render_updates_group')
0
riu