我在通过Django通道从websocket保存数据时遇到问题。每当通道接收到玩家的数据时,它将数据添加到队列列表中,一旦队列列表被填充,它将为玩家创建一个房间并发送回玩家以告诉他们要连接哪个房间。>
但是这里的问题是,该过程将停留在模型创建部分,并且不会从那里继续进行。我曾尝试使用Google搜索,但似乎找不到任何可帮助我解决此问题的东西。
代码如下: users.py
class GameLobbyConsumer(AsyncWebsocketConsumer):
room_name = ""
room_group_name = ""
queue_list = []
player_list = []
async def connect(self):
# Connecting to matchmaking lobby
try:
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
except Exception as e:
print(e)
async def disconnect(self, code):
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
async def receive(self, text_data=None, bytes_data=None):
player_info_json = json.loads(text_data)
player_info_dict = dict(player_info_json)
key_verification_list = ["player_id", "name"]
if list(player_info_dict.keys()) != key_verification_list:
await self.close()
response_data: dict = await self.check_queue_list(player_data=player_info_json)
if not response_data["status"]:
room_size = response_data["queue_size"]
await self.channel_layer.group_send(
self.room_group_name,
{
"type": "notification",
"message": f"Still looking for match, {room_size}/4 players currently"
}
)
else:
players = response_data["players"]
room_id = response_data["room_id"]
await self.channel_layer.group_send(
self.room_group_name,
{
"type": "room_found",
"players": players,
"game_room": room_id
}
)
async def notification(self, event):
await self.send(text_data=json.dumps({
"notification": event["message"],
"debug": event["message"]
}))
async def room_found(self, event):
player_list = event["players"]
game_room = event["game_room"]
await self.send(text_data=json.dumps({
"players": player_list,
"game_room": game_room,
"debug": f"Game Room - {game_room} has been created"
}))
@database_sync_to_async
def check_queue_list(self, player_data):
# Check if the player has already registered for matchmaking
if player_data not in self.queue_list and len(self.queue_list) < 4:
self.queue_list.append(player_data)
print("Player is added to the queue list")
if len(self.queue_list) == 4:
print("Full house")
player_list = []
for data in self.queue_list:
player_list.append(f"{data['player_id']},{data['name']}")
self.queue_list.clear()
game_session, created = GameSession.objects.get_or_create(players=player_data)
print("Game Session created")
response = {
"status": True,
"room_id": game_session.room_id,
"players": game_session.players
}
return response
# Lobby does not have enough players yet
response = {
"status": False,
"queue_size": len(self.queue_list)
}
return response
预先感谢您的任何建议。
编辑: 经过几天和几个小时的调试,我不认为这可能是因为模型本身的功能会导致问题。
这是问题函数
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if not self.room_id:
self.room_id = self.game_id
self.save()
我删除该功能后,其他所有功能均正常工作