extends Channel signal on_match_update(msg: TowerPlacedMessage) signal on_invalid_placing(msg: InvalidPlacementMessage) signal on_money_update(msg: PlayerMoneyMessage) signal on_hitpoints_update(msg: PlayerHitpointsMessage) 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, PlayerMoneyMessage, PlayerHitpointsMessage, ], ) ) match msg.get_message_id(): TowerPlacedMessage.MESSAGE_ID: on_match_update.emit(msg) InvalidPlacementMessage.MESSAGE_ID: on_invalid_placing.emit(msg) PlayerMoneyMessage.MESSAGE_ID: on_money_update.emit(msg) PlayerHitpointsMessage.MESSAGE_ID: on_hitpoints_update.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))