extends Channel signal on_match_update(msg: TowerPlacedMessage) signal on_invalid_placing(msg: InvalidPlacementMessage) func get_channel_location() -> String: return "match" func _process(_delta: float) -> void: self.socket.poll() if self.socket.get_ready_state() != WebSocketPeer.STATE_OPEN: return while self.socket.get_available_packet_count(): var msg: Message = ( Message . deserialize( self.socket.get_packet().get_string_from_utf8(), [TowerPlacedMessage, InvalidPlacementMessage], ) ) match msg.get_message_id(): TowerPlacedMessage.MESSAGE_ID: on_match_update.emit(msg) InvalidPlacementMessage.MESSAGE_ID: on_invalid_placing.emit(msg) _: continue func send_request_place(x: int, y: int) -> void: if self.socket.get_ready_state() != WebSocketPeer.STATE_OPEN: return var msg := RequestTowerPlacingMessage.new() msg.x = x msg.y = y self.socket.send_text(Message.serialize(msg))