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:このとき、同期は気にしません。
切断機能(チャネル2.3.0を使用)の正しいコードは次のとおりです。
class GameConsumer(WebsocketConsumer):
....
def disconnect(self, close_code):
self.channel_layer.group_discard(self.channel_name, 'render_updates_group')