У меня есть два класса, один из которых запускается, когда я получаю веб-крючок, другой - когда я получаю соединение с веб-сокетом
application = ProtocolTypeRouter({
'websocket': backEndConsumer,
'http': frontEndConsumer,
]),
Сначала я хочу, чтобы мой сервер ожидал соединения с веб-сокетом, чтобы он мог установить sh соединение с моим устройством. Но затем я хочу, чтобы мой webhook передавал данные и инициировал отправку websocket.
в моем frontEndConsumer:
class frontEndConsumer(AsyncHttpConsumer):
async def http_request(self, request): #request is already a json object
print(myapp.consumers.scope)
myapp.consumers.backEndConsumer.websocket_test(myapp.consumers.scope)
body = request.get('body') # json object with body that has a bytes inside
body = json.loads(body.decode()) # decode changes body from byte to string, and changes string to json object
# make response
fulfillmentText = "server got command correctly"
fulfillmentText = {'fulfillmentText': fulfillmentText}
fulfillmentText = json.dumps(fulfillmentText).encode('utf-8')
await self.send_response(200, fulfillmentText,
headers=[(b"Content-Type", b"text/plain"),])
в моем backEndConsumer:
scope = None
class backEndConsumer(AsyncJsonWebsocketConsumer):
groups = ["broadcast"]
async def websocket_connect(self, type):
# Called on connection.
# To accept the connection call:
await self.accept()
global scope
scope = self.scope
async def websocket_disconnect(self, close_code):
await self.close()
# Called when the socket closes
async def websocket_receive(self, text_data=None, bytes_data=None):
# Called with either text_data or bytes_data for each frame
# You can call:
await self.send("return counter: " + str(myapp.webhook.counter))
async def websocket_test(self):
await self.send("Hello world!")
async def websocket_send(self, text_data=None, bytes_data=None):
await self.send("command to embedded")
в моем http_request Я хочу использовать websocket_test (), но когда я запускаю его без каких-либо переменных, он говорит мне, что я скучаю по себе. Поэтому я сделал глобальную область видимости и добавил в websocket_test (scope). код выполняется, но я ничего не получаю при подключении к веб-сокету.