extends RefCounted class_name _BaseSnapshotSerializer var _identity_server: _NetworkIdentityServer var _schemas: _NetworkSchema static var _default_filter := func(subject: Object): return true static var _logger := NetfoxLogger._for_netfox("DenseSnapshotSerializer") func _init(p_schemas: _NetworkSchema, p_identity_server: _NetworkIdentityServer = null): assert(p_schemas != null, "Missing schemas!") # Intentionally storing reference, so it can be modified from the outside # e.g. RollbackSynchronizerServer adds a property _schemas = p_schemas _identity_server = p_identity_server func _write_property(node: Node, property: NodePath, value: Variant, buffer: StreamPeerBuffer) -> void: _schemas.encode(node, property, value, buffer) func _read_property(node: Node, property: NodePath, buffer: StreamPeerBuffer) -> Variant: return _schemas.decode(node, property, buffer) func _write_identifier(subject: Object, peer: int, buffer: StreamPeerBuffer) -> Error: var netref := NetworkSchemas._netref() var identifier := _get_identity_server()._get_identifier_of(subject) if not identifier: _logger.error("Can't synchronize %s, identifier missing!", [subject]) return ERR_DOES_NOT_EXIST var idref := identifier.reference_for(peer) netref.encode(idref, buffer) return OK func _get_identity_server() -> _NetworkIdentityServer: if not _identity_server: _identity_server = NetworkIdentityServer return _identity_server