diff --git a/Cargo.lock b/Cargo.lock index 60fbaac65ab..aa7905f40c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7773,6 +7773,7 @@ dependencies = [ "insta", "itertools 0.12.1", "regex", + "serde_json", "spacetimedb-data-structures", "spacetimedb-lib 2.0.3", "spacetimedb-primitives 2.0.3", diff --git a/crates/cli/src/subcommands/generate.rs b/crates/cli/src/subcommands/generate.rs index 0e7c896d34c..f65e49e8b57 100644 --- a/crates/cli/src/subcommands/generate.rs +++ b/crates/cli/src/subcommands/generate.rs @@ -48,6 +48,7 @@ fn build_generate_config_schema(command: &clap::Command) -> Result clap::Command { .alias("module-name") .help("The module name that should be used for DLL export macros (required for lang unrealcpp)") ) + .arg( + Arg::new("module_prefix") + .long("module-prefix") + .help("The module prefix to use for generated types (only used with --lang unrealcpp)") + ) .arg( Arg::new("lang") .long("lang") @@ -285,6 +291,7 @@ pub struct GenerateRunConfig { pub lang: Language, pub namespace: String, pub module_name: Option, + pub module_prefix: Option, pub build_options: String, pub out_dir: PathBuf, pub include_private: bool, @@ -313,6 +320,7 @@ fn prepare_generate_run_configs<'a>( .get_one::("namespace")? .unwrap_or_else(|| "SpacetimeDB.Types".to_string()); let module_name = command_config.get_one::("unreal_module_name")?; + let module_prefix = command_config.get_one::("module_prefix")?; let build_options = command_config .get_one::("build_options")? .unwrap_or_else(String::new); @@ -371,6 +379,7 @@ fn prepare_generate_run_configs<'a>( lang, namespace, module_name, + module_prefix, build_options, out_dir, include_private, @@ -512,6 +521,7 @@ pub async fn run_prepared_generate_configs( unreal_cpp_lang = UnrealCpp { module_name: run.module_name.as_ref().unwrap(), uproject_dir: &run.out_dir, + module_prefix: run.module_prefix.as_deref().unwrap_or(""), }; &unreal_cpp_lang as &dyn Lang } diff --git a/crates/codegen/Cargo.toml b/crates/codegen/Cargo.toml index 54e0f589669..9d362a09ade 100644 --- a/crates/codegen/Cargo.toml +++ b/crates/codegen/Cargo.toml @@ -15,6 +15,7 @@ spacetimedb-schema.workspace = true anyhow.workspace = true convert_case.workspace = true itertools.workspace = true +serde_json.workspace = true [dev-dependencies] fs-err.workspace = true diff --git a/crates/codegen/src/UnrealCPP-README.md b/crates/codegen/src/UnrealCPP-README.md index 47520517b5f..121ba90f945 100644 --- a/crates/codegen/src/UnrealCPP-README.md +++ b/crates/codegen/src/UnrealCPP-README.md @@ -316,7 +316,7 @@ cargo run --bin spacetimedb-cli -- generate --lang unrealcpp --uproject-dir crat ### Parameters - `--lang unrealcpp`: Specifies the UnrealCPP code generator -- `--uproject-dir`: Directory containing Unreal's .uproject or .uplugin file +- `--uproject-dir`: Directory containing your Unreal project's `.uproject` file - `--module-path`: Path to your SpacetimeDB module source code - `--unreal-module-name`: **Required** - Name used for generated classes, API prefix and putting generated module bindings in the correct Module's Source @@ -331,6 +331,15 @@ The `--unreal-module-name` parameter is **mandatory** for UnrealCPP generation b **⚠️ IMPORTANT:** Without the module name, the generated code would not compile in Unreal Engine due to missing API macros and naming conflicts. +### Project Setup Behavior + +When generating into an Unreal project, the code generator also: + +1. Ensures the named module exists in the project's `Modules` array in the `.uproject` file. +2. Creates missing `Source//.Build.cs`, `Source//.cpp`, and `Source//.h` files. + +If the `.uproject` file is missing, unreadable, malformed, or has an invalid `Modules` field, generation fails immediately. + ## Implementation Details The Blueprint compatibility checking is implemented in the `is_blueprintable()` function, which recursively checks: @@ -344,4 +353,4 @@ All error messages follow a consistent format: - **Single type:** `"uint32 types are not Blueprint-compatible"` - **Multiple types:** `"uint32, uint64 types are not Blueprint-compatible"` -This makes it clear to developers exactly which types need to be changed for Blueprint compatibility. \ No newline at end of file +This makes it clear to developers exactly which types need to be changed for Blueprint compatibility. diff --git a/crates/codegen/src/unrealcpp.rs b/crates/codegen/src/unrealcpp.rs index c4b9fd81efb..d4d4e6abb3f 100644 --- a/crates/codegen/src/unrealcpp.rs +++ b/crates/codegen/src/unrealcpp.rs @@ -23,6 +23,7 @@ use std::path::Path; pub struct UnrealCpp<'opts> { pub module_name: &'opts str, pub uproject_dir: &'opts Path, + pub module_prefix: &'opts str, } // --------------------------------------------------------------------------- @@ -37,8 +38,9 @@ impl UnrealCpp<'_> { impl Lang for UnrealCpp<'_> { fn generate_table_file_from_schema(&self, module: &ModuleDef, table: &TableDef, schema: TableSchema) -> OutputFile { - let struct_name = type_ref_name(module, table.product_type_ref); - let table_pascal = table.name.deref().to_case(Case::Pascal); + let module_prefix = self.module_prefix; + let struct_name = type_ref_name(self.module_prefix, module, table.product_type_ref); + let table_pascal = format!("{module_prefix}{}", table.name.deref().to_case(Case::Pascal)); let self_header = table_pascal.clone() + "Table"; let mut output = UnrealCppAutogen::new( @@ -76,7 +78,8 @@ impl Lang for UnrealCpp<'_> { if let Some(col) = columns.as_singleton() { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, self.module_name).to_string(); + let field_type = + cpp_ty_fmt_with_module(self.module_prefix, module, f_ty, self.module_name).to_string(); let index_name = accessor_name.deref().to_case(Case::Pascal); let index_class_name = format!("U{table_pascal}{index_name}UniqueIndex"); let key_type = field_type.clone(); @@ -173,7 +176,8 @@ impl Lang for UnrealCpp<'_> { .map(|col| { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, self.module_name).to_string(); + let field_type = + cpp_ty_fmt_with_module(self.module_prefix, module, f_ty, self.module_name).to_string(); let param_type = format!("const {field_type}&"); (field_name, field_type, param_type, f_ty, f_name.deref().to_string()) @@ -326,22 +330,24 @@ impl Lang for UnrealCpp<'_> { writeln!(output, " // Table Events"); writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( "); writeln!(output, " FOn{table_pascal}Insert,"); - writeln!(output, " const FEventContext&, Context,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); writeln!(output, " const {row_struct}&, NewRow);"); writeln!(output); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( "); - writeln!(output, " FOn{table_pascal}Update,"); - writeln!(output, " const FEventContext&, Context,"); - writeln!(output, " const {row_struct}&, OldRow,"); - writeln!(output, " const {row_struct}&, NewRow);"); - writeln!(output); + if !table.is_event { + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( "); + writeln!(output, " FOn{table_pascal}Update,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); + writeln!(output, " const {row_struct}&, OldRow,"); + writeln!(output, " const {row_struct}&, NewRow);"); + writeln!(output); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( "); - writeln!(output, " FOn{table_pascal}Delete,"); - writeln!(output, " const FEventContext&, Context,"); - writeln!(output, " const {row_struct}&, DeletedRow);"); - writeln!(output); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( "); + writeln!(output, " FOn{table_pascal}Delete,"); + writeln!(output, " const F{module_prefix}EventContext&, Context,"); + writeln!(output, " const {row_struct}&, DeletedRow);"); + writeln!(output); + } writeln!( output, @@ -350,19 +356,21 @@ impl Lang for UnrealCpp<'_> { writeln!(output, " FOn{table_pascal}Insert OnInsert;"); writeln!(output); - writeln!( - output, - " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" - ); - writeln!(output, " FOn{table_pascal}Update OnUpdate;"); - writeln!(output); + if !table.is_event { + writeln!( + output, + " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" + ); + writeln!(output, " FOn{table_pascal}Update OnUpdate;"); + writeln!(output); - writeln!( - output, - " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" - ); - writeln!(output, " FOn{table_pascal}Delete OnDelete;"); - writeln!(output); + writeln!( + output, + " UPROPERTY(BlueprintAssignable, Category = \"SpacetimeDB Events\")" + ); + writeln!(output, " FOn{table_pascal}Delete OnDelete;"); + writeln!(output); + } writeln!(output, "private:"); writeln!(output, " const FString TableName = TEXT(\"{table_name}\");"); @@ -375,7 +383,7 @@ impl Lang for UnrealCpp<'_> { filename: format!( "Source/{}/Public/ModuleBindings/Tables/{}Table.g.h", self.module_name, - table.name.deref().to_case(Case::Pascal) //type_ref_name(module, table.product_type_ref) + format_args!("{module_prefix}{}", table.name.deref().to_case(Case::Pascal)) ), code: output.into_inner(), } @@ -395,29 +403,40 @@ impl Lang for UnrealCpp<'_> { ); let code: String = match &module.typespace_for_generate()[typ.ty] { AlgebraicTypeDef::PlainEnum(plain_enum) => autogen_cpp_enum(name, plain_enum), - AlgebraicTypeDef::Product(product_type_def) => { - autogen_cpp_struct(module, name, product_type_def, &self.get_api_macro(), self.module_name) - } - AlgebraicTypeDef::Sum(sum_type_def) => { - autogen_cpp_sum(module, name, sum_type_def, &self.get_api_macro(), self.module_name) - } + AlgebraicTypeDef::Product(product_type_def) => autogen_cpp_struct( + self.module_prefix, + module, + name, + product_type_def, + &self.get_api_macro(), + self.module_name, + ), + AlgebraicTypeDef::Sum(sum_type_def) => autogen_cpp_sum( + self.module_prefix, + module, + name, + sum_type_def, + &self.get_api_macro(), + self.module_name, + ), }; vec![OutputFile { filename, code }] } fn generate_reducer_file(&self, module: &ModuleDef, reducer: &ReducerDef) -> OutputFile { + let module_prefix = self.module_prefix; let reducer_snake = reducer.name.deref(); let pascal = reducer_snake.to_case(Case::Pascal); // Collect includes for parameter types let mut includes = HashSet::::new(); for (_param_name, param_type) in &reducer.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(self.module_prefix, module, param_type, &mut includes, self.module_name); } - // Add ReducerBase.g.h for UReducerBase definition - includes.insert("ModuleBindings/ReducerBase.g.h".to_string()); + // Add {module_prefix}ReducerBase.g.h for U{module_prefix}ReducerBase definition + includes.insert(format!("ModuleBindings/{module_prefix}ReducerBase.g.h")); // Convert to sorted vector let mut include_vec: Vec = includes.into_iter().collect(); @@ -441,8 +460,8 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter for (param_name, param_type) in &reducer.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); - let init_str = cpp_ty_init_fmt_impl(module, param_type); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(self.module_prefix, module, param_type); let field_decl = format!("{type_str} {param_pascal}{init_str}"); // Check if the type is blueprintable @@ -473,7 +492,8 @@ impl Lang for UnrealCpp<'_> { } first = false; let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); + let type_str = + cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); write!(header, "const {type_str}& In{param_pascal}"); } @@ -559,7 +579,7 @@ impl Lang for UnrealCpp<'_> { writeln!(header, "UCLASS(BlueprintType)"); writeln!( header, - "class {} U{pascal}Reducer : public UReducerBase", + "class {} U{pascal}Reducer : public U{module_prefix}ReducerBase", self.get_api_macro() ); writeln!(header, "{{"); @@ -570,8 +590,8 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter (for dispatching) for (param_name, param_type) in &reducer.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); - let init_str = cpp_ty_init_fmt_impl(module, param_type); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(self.module_prefix, module, param_type); let field_decl = format!("{type_str} {param_pascal}{init_str}"); // Check if the type is blueprintable @@ -613,9 +633,10 @@ impl Lang for UnrealCpp<'_> { // Collect includes for parameter types let mut includes = HashSet::::new(); for (_param_name, param_type) in &procedure.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(self.module_prefix, module, param_type, &mut includes, self.module_name); } collect_includes_for_type( + self.module_prefix, module, &procedure.return_type_for_generate, &mut includes, @@ -644,8 +665,8 @@ impl Lang for UnrealCpp<'_> { // Generate properties for each parameter for (param_name, param_type) in &procedure.params_for_generate.elements { let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); - let init_str = cpp_ty_init_fmt_impl(module, param_type); + let type_str = cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(self.module_prefix, module, param_type); let field_decl = format!("{type_str} {param_pascal}{init_str}"); // Check if the type is blueprintable @@ -676,7 +697,8 @@ impl Lang for UnrealCpp<'_> { } first = false; let param_pascal = param_name.deref().to_case(Case::Pascal); - let type_str = cpp_ty_fmt_with_module(module, param_type, self.module_name).to_string(); + let type_str = + cpp_ty_fmt_with_module(self.module_prefix, module, param_type, self.module_name).to_string(); write!(header, "const {type_str}& In{param_pascal}"); } @@ -766,10 +788,39 @@ impl Lang for UnrealCpp<'_> { } fn generate_global_files(&self, module: &ModuleDef, options: &CodegenOptions) -> Vec { + let module_prefix = self.module_prefix; let mut files: Vec = vec![]; + let source_dir = self.uproject_dir.join("Source").join(self.module_name); + let required_files = [ + ( + format!("{}.Build.cs", self.module_name), + generate_build_cs_content(self.module_name), + ), + ( + format!("{}.cpp", self.module_name), + generate_module_cpp_content(self.module_name), + ), + ( + format!("{}.h", self.module_name), + generate_module_h_content(self.module_name), + ), + ]; + + for (filename, content) in required_files { + let file_path = source_dir.join(&filename); + if !file_path.exists() { + files.push(OutputFile { + filename: format!("Source/{}/{}", self.module_name, filename), + code: content, + }); + } + } + + ensure_module_in_uproject(self.uproject_dir, self.module_name).unwrap_or_else(|err| panic!("{err}")); + // First, collect and generate all optional types - let (optional_types, result_types) = collect_wrapper_types(module, options.visibility); + let (optional_types, result_types) = collect_wrapper_types(self.module_prefix, module, options.visibility); for optional_name in optional_types { let module_name = &self.module_name; let module_name_pascal = module_name.to_case(Case::Pascal); @@ -804,40 +855,52 @@ impl Lang for UnrealCpp<'_> { includes.insert("Connection/DbConnectionBase.h".to_string()); includes.insert("Connection/DbConnectionBuilder.h".to_string()); includes.insert("Connection/Subscription.h".to_string()); - includes.insert("Connection/SetReducerFlags.h".to_string()); includes.insert("Connection/Callback.h".to_string()); - includes.insert("ModuleBindings/ReducerBase.g.h".to_string()); + includes.insert(format!("ModuleBindings/{module_prefix}ReducerBase.g.h")); includes.insert("Kismet/BlueprintFunctionLibrary.h".to_string()); // Include reducers for reducer in iter_reducers(module, options.visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); includes.insert(format!("ModuleBindings/Reducers/{reducer_pascal}.g.h")); } // Include procedures for procedure in iter_procedures(module, options.visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); includes.insert(format!("ModuleBindings/Procedures/{procedure_pascal}.g.h")); } // Collect includes for types used in delegates and contexts - // FSpacetimeDBIdentity is used in FOnConnectDelegate and context methods - collect_includes_for_type(module, &AlgebraicTypeUse::Identity, &mut includes, self.module_name); + // FSpacetimeDBIdentity is used in F{module_prefix}OnConnectDelegate and context methods + collect_includes_for_type( + self.module_prefix, + module, + &AlgebraicTypeUse::Identity, + &mut includes, + self.module_name, + ); // FSpacetimeDBConnectionId is used in context methods - collect_includes_for_type(module, &AlgebraicTypeUse::ConnectionId, &mut includes, self.module_name); + collect_includes_for_type( + self.module_prefix, + module, + &AlgebraicTypeUse::ConnectionId, + &mut includes, + self.module_name, + ); // Collect includes for all reducer parameter types for reducer in iter_reducers(module, options.visibility) { for (_param_name, param_type) in &reducer.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(self.module_prefix, module, param_type, &mut includes, self.module_name); } } // Collect includes for all procedure parameter types for procedure in iter_procedures(module, options.visibility) { for (_param_name, param_type) in &procedure.params_for_generate.elements { - collect_includes_for_type(module, param_type, &mut includes, self.module_name); + collect_includes_for_type(self.module_prefix, module, param_type, &mut includes, self.module_name); } collect_includes_for_type( + self.module_prefix, module, &procedure.return_type_for_generate, &mut includes, @@ -852,65 +915,56 @@ impl Lang for UnrealCpp<'_> { // Convert to string references let include_refs: Vec<&str> = include_vec.iter().map(|s| s.as_str()).collect(); - let mut client_h = UnrealCppAutogen::new(&include_refs, "SpacetimeDBClient", true); + let self_header = format!("{module_prefix}SpacetimeDBClient"); + let mut client_h = UnrealCppAutogen::new(&include_refs, &self_header, true); // Forward declarations writeln!(client_h, "// Forward declarations"); - writeln!(client_h, "class UDbConnection;"); - writeln!(client_h, "class URemoteTables;"); - writeln!(client_h, "class URemoteReducers;"); - writeln!(client_h, "class URemoteProcedures;"); - writeln!(client_h, "class USubscriptionBuilder;"); - writeln!(client_h, "class USubscriptionHandle;"); + writeln!(client_h, "class U{module_prefix}DbConnection;"); + writeln!(client_h, "class U{module_prefix}RemoteTables;"); + writeln!(client_h, "class U{module_prefix}RemoteReducers;"); + writeln!(client_h, "class U{module_prefix}RemoteProcedures;"); + writeln!(client_h, "class U{module_prefix}SubscriptionBuilder;"); + writeln!(client_h, "class U{module_prefix}SubscriptionHandle;"); writeln!(client_h); writeln!(client_h, "/** Forward declaration for tables */"); for (_, accessor_name, _) in iter_table_names_and_types(module, options.visibility) { - writeln!(client_h, "class U{}Table;", accessor_name.deref().to_case(Case::Pascal)); + writeln!( + client_h, + "class U{module_prefix}{}Table;", + accessor_name.deref().to_case(Case::Pascal) + ); } writeln!(client_h, "/***/"); writeln!(client_h); // Delegates first (as in manual) - generate_delegates(&mut client_h); + generate_delegates(&mut client_h, self.module_prefix); // Context structs generate_context_structs( &mut client_h, module, options.visibility, + self.module_prefix, &self.get_api_macro(), &self.module_name.to_case(Case::Pascal), ); - // SetReducerFlags class - inherits from USetReducerFlagsBase - writeln!(client_h, "UCLASS(BlueprintType)"); - writeln!( - client_h, - "class {} USetReducerFlags : public USetReducerFlagsBase", - self.get_api_macro() - ); - writeln!(client_h, "{{"); - writeln!(client_h, "\tGENERATED_BODY()"); - writeln!(client_h); - writeln!(client_h, "public:"); - - for reducer in iter_reducers(module, options.visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); - writeln!(client_h, "\tUFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(client_h, "\tvoid {reducer_pascal}(ECallReducerFlags Flag);"); - } - - writeln!(client_h); - writeln!(client_h, "}};"); - writeln!(client_h); - // RemoteTables class - generate_remote_tables_class(&mut client_h, module, options.visibility, &self.get_api_macro()); + generate_remote_tables_class( + &mut client_h, + self.module_prefix, + module, + options.visibility, + &self.get_api_macro(), + ); // RemoteReducers class generate_remote_reducers_class( &mut client_h, + self.module_prefix, module, options.visibility, &self.get_api_macro(), @@ -920,6 +974,7 @@ impl Lang for UnrealCpp<'_> { // RemoteProcedures class generate_remote_procedures_class( &mut client_h, + self.module_prefix, module, options.visibility, &self.get_api_macro(), @@ -927,45 +982,52 @@ impl Lang for UnrealCpp<'_> { ); // SubscriptionBuilder class - generate_subscription_builder_class(&mut client_h, &self.get_api_macro()); + generate_subscription_builder_class(&mut client_h, self.module_prefix, &self.get_api_macro()); // SubscriptionHandle class - generate_subscription_handle_class(&mut client_h, &self.get_api_macro()); + generate_subscription_handle_class(&mut client_h, self.module_prefix, &self.get_api_macro()); // DbConnectionBuilder class - generate_db_connection_builder_class(&mut client_h, &self.get_api_macro()); + generate_db_connection_builder_class(&mut client_h, self.module_prefix, &self.get_api_macro()); // Main DbConnection class - generate_db_connection_class(&mut client_h, module, &self.get_api_macro()); + generate_db_connection_class(&mut client_h, self.module_prefix, module, &self.get_api_macro()); // Generate the separate ReducerBase file - let mut reducer_base_header = UnrealCppAutogen::new(&[], "ReducerBase", false); + let reducer_base_header_name = format!("{module_prefix}ReducerBase"); + let mut reducer_base_header = UnrealCppAutogen::new(&[], &reducer_base_header_name, false); - // Generate the UReducerBase class + // Generate the U{module_prefix}ReducerBase class writeln!(reducer_base_header, "// Abstract Reducer base class"); writeln!(reducer_base_header, "UCLASS(Abstract, BlueprintType)"); writeln!( reducer_base_header, - "class {} UReducerBase : public UObject", + "class {} U{module_prefix}ReducerBase : public UObject", self.get_api_macro() ); writeln!(reducer_base_header, "{{"); writeln!(reducer_base_header, " GENERATED_BODY()"); writeln!(reducer_base_header); writeln!(reducer_base_header, "public:"); - writeln!(reducer_base_header, " virtual ~UReducerBase() = default;"); + writeln!( + reducer_base_header, + " virtual ~U{module_prefix}ReducerBase() = default;" + ); writeln!(reducer_base_header, "}};"); writeln!(reducer_base_header); files.push(OutputFile { - filename: format!("Source/{}/Public/ModuleBindings/ReducerBase.g.h", self.module_name), + filename: format!( + "Source/{}/Public/ModuleBindings/{module_prefix}ReducerBase.g.h", + self.module_name + ), code: reducer_base_header.into_inner(), }); files.push(OutputFile { filename: format!( - "Source/{}/Public/ModuleBindings/SpacetimeDBClient.g.h", - self.module_name + "Source/{}/Public/ModuleBindings/{module_prefix}SpacetimeDBClient.g.h", + self.module_name, ), code: client_h.into_inner(), }); @@ -975,13 +1037,14 @@ impl Lang for UnrealCpp<'_> { .map(|(_, accessor_name, _)| { format!( "ModuleBindings/Tables/{}Table.g.h", - accessor_name.deref().to_case(Case::Pascal) //type_ref_name(module, product_type_ref) + format_args!("{module_prefix}{}", accessor_name.deref().to_case(Case::Pascal)) ) }) .collect(); let table_includes_str: Vec<&str> = table_includes.iter().map(|s| s.as_str()).collect(); - let mut cpp_includes = vec!["ModuleBindings/SpacetimeDBClient.g.h"]; + let spacetime_include = format!("ModuleBindings/{module_prefix}SpacetimeDBClient.g.h"); + let mut cpp_includes = vec![spacetime_include.as_str()]; // Add additional includes from manual reference cpp_includes.extend_from_slice(&["DBCache/WithBsatn.h", "BSATN/UEBSATNHelpers.h"]); @@ -990,11 +1053,17 @@ impl Lang for UnrealCpp<'_> { cpp_includes.extend(table_includes_str); let mut client_cpp = UnrealCppAutogen::new_cpp(&cpp_includes); - generate_client_implementation(&mut client_cpp, module, options.visibility, self.module_name); + generate_client_implementation( + &mut client_cpp, + module, + options.visibility, + self.module_prefix, + self.module_name, + ); files.push(OutputFile { filename: format!( - "Source/{}/Private/ModuleBindings/SpacetimeDBClient.g.cpp", - self.module_name + "Source/{}/Private/ModuleBindings/{module_prefix}SpacetimeDBClient.g.cpp", + self.module_name, ), code: client_cpp.into_inner(), }); @@ -1004,11 +1073,11 @@ impl Lang for UnrealCpp<'_> { let schema = TableSchema::from_module_def(module, table, (), 0.into()) .validated() .expect("table schema should validate"); - let table_cpp_content = generate_table_cpp(module, table, self.module_name, &schema); + let table_cpp_content = generate_table_cpp(self.module_prefix, module, table, self.module_name, &schema); let table_cpp_filename = format!( "Source/{}/Private/ModuleBindings/Tables/{}Table.g.cpp", self.module_name, - table.name.deref().to_case(Case::Pascal) //type_ref_name(module, table.product_type_ref) + format_args!("{module_prefix}{}", table.name.deref().to_case(Case::Pascal)) ); files.push(OutputFile { filename: table_cpp_filename, @@ -1020,11 +1089,11 @@ impl Lang for UnrealCpp<'_> { let schema = TableSchema::from_view_def_for_codegen(module, view) .validated() .expect("Failed to generate table due to validation errors"); - let view_cpp_content = generate_table_cpp(module, &tbl, self.module_name, &schema); + let view_cpp_content = generate_table_cpp(self.module_prefix, module, &tbl, self.module_name, &schema); let view_cpp_filename = format!( "Source/{}/Private/ModuleBindings/Tables/{}Table.g.cpp", self.module_name, - view.name.deref().to_case(Case::Pascal) //type_ref_name(module, view.product_type_ref) + format_args!("{module_prefix}{}", view.name.deref().to_case(Case::Pascal)) ); files.push(OutputFile { filename: view_cpp_filename, @@ -1037,9 +1106,15 @@ impl Lang for UnrealCpp<'_> { } // Helper function to generate table .cpp implementation files -fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, schema: &TableSchema) -> String { - let table_pascal = table.name.deref().to_case(Case::Pascal); - let struct_name = type_ref_name(module, table.product_type_ref); +fn generate_table_cpp( + module_prefix: &str, + module: &ModuleDef, + table: &TableDef, + module_name: &str, + schema: &TableSchema, +) -> String { + let table_pascal = format!("{module_prefix}{}", table.name.deref().to_case(Case::Pascal)); + let struct_name = type_ref_name(module_prefix, module, table.product_type_ref); let row_struct = format!("F{struct_name}Type"); // Include the table header and other necessary headers @@ -1071,7 +1146,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s if let Some(col) = columns.as_singleton() { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let _field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, module_name).to_string(); + let field_type = cpp_ty_fmt_with_module(module_prefix, module, f_ty, module_name).to_string(); let index_name = accessor_name.deref().to_case(Case::Pascal); unique_indexes.push((index_name, field_type, f_name.deref().to_string())); } @@ -1086,7 +1161,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s .map(|col| { let (f_name, f_ty) = &product_type.unwrap().elements[col.idx()]; let field_name = f_name.deref().to_case(Case::Pascal); - let field_type = cpp_ty_fmt_with_module(module, f_ty, module_name).to_string(); + let field_type = cpp_ty_fmt_with_module(module_prefix, module, f_ty, module_name).to_string(); (field_name, field_type) }) .collect(); @@ -1172,24 +1247,38 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s "FTableAppliedDiff<{row_struct}> U{table_pascal}Table::Update(TArray> InsertsRef, TArray> DeletesRef)" ); writeln!(output, "{{"); - writeln!( - output, - " FTableAppliedDiff<{row_struct}> Diff = BaseUpdate<{row_struct}>(InsertsRef, DeletesRef, Data, TableName);" - ); + if table.is_event { + writeln!( + output, + " // Event tables are callback-only: do not persist rows in the local cache." + ); + writeln!(output, " FTableAppliedDiff<{row_struct}> Diff;"); + writeln!(output, " for (const FWithBsatn<{row_struct}>& Insert : InsertsRef)"); + writeln!(output, " {{"); + writeln!(output, " Diff.Inserts.Add(Insert.Bsatn, Insert.Row);"); + writeln!(output, " }}"); + } else { + writeln!( + output, + " FTableAppliedDiff<{row_struct}> Diff = BaseUpdate<{row_struct}>(InsertsRef, DeletesRef, Data, TableName);" + ); + } writeln!(output); - // Add DeriveUpdatesByPrimaryKey if table has a primary key - if let Some(pk) = schema.pk() { - let pk_field_name = pk.col_name.deref().to_case(Case::Pascal); - let pk_type = &product_type.unwrap().elements[pk.col_pos.idx()].1; - let pk_type_str = cpp_ty_fmt_with_module(module, pk_type, module_name).to_string(); - writeln!(output, " Diff.DeriveUpdatesByPrimaryKey<{pk_type_str}>("); - writeln!(output, " [](const {row_struct}& Row) "); - writeln!(output, " {{"); - writeln!(output, " return Row.{pk_field_name}; "); - writeln!(output, " }}"); - writeln!(output, " );"); - writeln!(output); + // Add DeriveUpdatesByPrimaryKey for persistent tables with a primary key. + if !table.is_event { + if let Some(pk) = schema.pk() { + let pk_field_name = pk.col_name.deref().to_case(Case::Pascal); + let pk_type = &product_type.unwrap().elements[pk.col_pos.idx()].1; + let pk_type_str = cpp_ty_fmt_with_module(module_prefix, module, pk_type, module_name).to_string(); + writeln!(output, " Diff.DeriveUpdatesByPrimaryKey<{pk_type_str}>("); + writeln!(output, " [](const {row_struct}& Row) "); + writeln!(output, " {{"); + writeln!(output, " return Row.{pk_field_name}; "); + writeln!(output, " }}"); + writeln!(output, " );"); + writeln!(output); + } } // Reset cache for indexes @@ -1226,7 +1315,7 @@ fn generate_table_cpp(module: &ModuleDef, table: &TableDef, module_name: &str, s // Helper functions for generating the consolidated SpacetimeDBClient file -fn generate_delegates(output: &mut UnrealCppAutogen) { +fn generate_delegates(output: &mut UnrealCppAutogen, module_prefix: &str) { writeln!( output, "// Delegates using the generated connection type. These wrap the base" @@ -1235,15 +1324,18 @@ fn generate_delegates(output: &mut UnrealCppAutogen) { output, "// delegates defined in the SDK so that projects can work directly with" ); - writeln!(output, "// UDbConnection without manual casting in user code."); + writeln!( + output, + "// U{module_prefix}DbConnection without manual casting in user code." + ); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_ThreeParams("); - writeln!(output, "\tFOnConnectDelegate,"); + writeln!(output, "\tF{module_prefix}OnConnectDelegate,"); writeln!(output, "\tUDbConnection*, Connection,"); writeln!(output, "\tFSpacetimeDBIdentity, Identity,"); writeln!(output, "\tconst FString&, Token);"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_TwoParams("); - writeln!(output, "\tFOnDisconnectDelegate,"); + writeln!(output, "\tF{module_prefix}OnDisconnectDelegate,"); writeln!(output, "\tUDbConnection*, Connection,"); writeln!(output, "\tconst FString&, Error);"); writeln!(output); @@ -1254,21 +1346,25 @@ fn generate_context_structs( output: &mut UnrealCppAutogen, module: &ModuleDef, visibility: CodegenVisibility, + module_prefix: &str, api_macro: &str, module_name: &str, ) { writeln!(output, "// Context classes for event handling"); writeln!(output); writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FContextBase"); + writeln!(output, "struct {api_macro} F{module_prefix}ContextBase"); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); writeln!( output, - "\tFContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {{}};" + "\tF{module_prefix}ContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {{}};" + ); + writeln!( + output, + "\tF{module_prefix}ContextBase(U{module_prefix}DbConnection* InConn);" ); - writeln!(output, "\tFContextBase(UDbConnection* InConn);"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); writeln!(output, "\tURemoteTables* Db;"); @@ -1277,9 +1373,6 @@ fn generate_context_structs( writeln!(output, "\tURemoteReducers* Reducers;"); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, "\tUSetReducerFlags* SetReducerFlags;"); - writeln!(output); - writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); writeln!(output, "\tURemoteProcedures* Procedures;"); writeln!(output); writeln!(output, "\tbool IsActive() const;"); @@ -1298,11 +1391,11 @@ fn generate_context_structs( writeln!(output, "}};"); writeln!(output); - // BPLib for FContextBase - Needed to allow inheritance in Blueprint + // BPLib for F{module_prefix}ContextBase - Needed to allow inheritance in Blueprint writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UContextBaseBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ContextBaseBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); @@ -1312,37 +1405,31 @@ fn generate_context_structs( writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic URemoteTables* GetDb(const FContextBase& Ctx) {{ return Ctx.Db; }}" - ); - writeln!(output); - writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); - writeln!( - output, - "\tstatic URemoteReducers* GetReducers(const FContextBase& Ctx) {{ return Ctx.Reducers; }}" + "\tstatic U{module_prefix}RemoteTables* GetDb(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Db; }}" ); writeln!(output); writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic USetReducerFlags* GetSetReducerFlags(const FContextBase& Ctx) {{ return Ctx.SetReducerFlags; }}" + "\tstatic U{module_prefix}RemoteReducers* GetReducers(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Reducers; }}" ); writeln!(output); writeln!( output, - "\tstatic URemoteProcedures* GetProcedures(const FContextBase& Ctx) {{ return Ctx.Procedures; }}" + "\tstatic U{module_prefix}RemoteProcedures* GetProcedures(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.Procedures; }}" ); writeln!(output); writeln!(output, "\tUFUNCTION(BlueprintPure, Category=\"SpacetimeDB\")"); writeln!( output, - "\tstatic bool IsActive(const FContextBase& Ctx) {{ return Ctx.IsActive(); }}" + "\tstatic bool IsActive(const F{module_prefix}ContextBase& Ctx) {{ return Ctx.IsActive(); }}" ); writeln!(output, "}};"); writeln!(output); - generate_reducer_bindings(output, module, visibility, api_macro, module_name); - generate_procedure_bindings(output, module, visibility, api_macro, module_name); + generate_reducer_bindings(output, module_prefix, module, visibility, api_macro, module_name); + generate_procedure_bindings(output, module_prefix, module, visibility, api_macro, module_name); // {}Event: union-like struct representing SpacetimeDB event messages writeln!(output, "/** Represents event with variant message data. */"); @@ -1356,7 +1443,10 @@ fn generate_context_structs( output, "\t/** Tagged union holding reducer call, unit events, or error string */" ); - writeln!(output, "\tTVariant MessageData;"); + writeln!( + output, + "\tTVariant MessageData;" + ); writeln!(output); writeln!(output, "\t/** Type tag indicating what this event represents */"); @@ -1369,11 +1459,14 @@ fn generate_context_structs( // === Static factory methods === writeln!(output, "\t/** === Static factory methods ===*/"); - writeln!(output, "\tstatic F{module_name}Event Reducer(const FReducer& Value)"); + writeln!( + output, + "\tstatic F{module_name}Event Reducer(const F{module_prefix}Reducer& Value)" + ); writeln!(output, "\t{{"); writeln!(output, "\t\tF{module_name}Event Obj;"); writeln!(output, "\t\tObj.Tag = ESpacetimeDBEventTag::Reducer;"); - writeln!(output, "\t\tObj.MessageData.Set(Value);"); + writeln!(output, "\t\tObj.MessageData.Set(Value);"); writeln!(output, "\t\treturn Obj;"); writeln!(output, "\t}}"); writeln!(output); @@ -1413,6 +1506,18 @@ fn generate_context_structs( writeln!(output, "\t}}"); writeln!(output); + writeln!( + output, + "\tstatic F{module_name}Event Transaction(const FSpacetimeDBUnit& Value)" + ); + writeln!(output, "\t{{"); + writeln!(output, "\t\tF{module_name}Event Obj;"); + writeln!(output, "\t\tObj.Tag = ESpacetimeDBEventTag::Transaction;"); + writeln!(output, "\t\tObj.MessageData.Set(Value);"); + writeln!(output, "\t\treturn Obj;"); + writeln!(output, "\t}}"); + writeln!(output); + writeln!( output, "\tstatic F{module_name}Event SubscribeError(const FString& Value)" @@ -1442,13 +1547,13 @@ fn generate_context_structs( output, "\tFORCEINLINE bool IsReducer() const {{ return Tag == ESpacetimeDBEventTag::Reducer; }}" ); - writeln!(output, "\tFORCEINLINE FReducer GetAsReducer() const"); + writeln!(output, "\tFORCEINLINE F{module_prefix}Reducer GetAsReducer() const"); writeln!(output, "\t{{"); writeln!( output, "\t\tensureMsgf(IsReducer(), TEXT(\"MessageData does not hold Reducer!\"));" ); - writeln!(output, "\t\treturn MessageData.Get();"); + writeln!(output, "\t\treturn MessageData.Get();"); writeln!(output, "\t}}"); writeln!(output); writeln!( @@ -1490,6 +1595,19 @@ fn generate_context_structs( writeln!(output, "\t\treturn MessageData.Get();"); writeln!(output, "\t}}"); writeln!(output); + writeln!( + output, + "\tFORCEINLINE bool IsTransaction() const {{ return Tag == ESpacetimeDBEventTag::Transaction; }}" + ); + writeln!(output, "\tFORCEINLINE FSpacetimeDBUnit GetAsTransaction() const"); + writeln!(output, "\t{{"); + writeln!( + output, + "\t\tensureMsgf(IsTransaction(), TEXT(\"MessageData does not hold Transaction!\"));" + ); + writeln!(output, "\t\treturn MessageData.Get();"); + writeln!(output, "\t}}"); + writeln!(output); writeln!( output, "\tFORCEINLINE bool IsSubscribeError() const {{ return Tag == ESpacetimeDBEventTag::SubscribeError; }}" @@ -1536,6 +1654,10 @@ fn generate_context_structs( output, "\t\tcase ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected();" ); + writeln!( + output, + "\t\tcase ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction();" + ); writeln!( output, "\t\tcase ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError();" @@ -1574,7 +1696,7 @@ fn generate_context_structs( ); writeln!( output, - " static F{module_name}Event Reducer(const FReducer& InValue)" + " static F{module_name}Event Reducer(const F{module_prefix}Reducer& InValue)" ); writeln!(output, " {{"); writeln!(output, " return F{module_name}Event::Reducer(InValue);"); @@ -1626,6 +1748,20 @@ fn generate_context_structs( writeln!(output, " }}"); writeln!(output); + // Transaction + writeln!( + output, + " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB|{module_name}Event\")" + ); + writeln!( + output, + " static F{module_name}Event Transaction(const FSpacetimeDBUnit& InValue)" + ); + writeln!(output, " {{"); + writeln!(output, " return F{module_name}Event::Transaction(InValue);"); + writeln!(output, " }}"); + writeln!(output); + // SubscribeError writeln!( output, @@ -1663,6 +1799,7 @@ fn generate_context_structs( "SubscribeApplied", "UnsubscribeApplied", "Disconnected", + "Transaction", "SubscribeError", "UnknownTransaction", ] { @@ -1684,7 +1821,7 @@ fn generate_context_structs( ); writeln!( output, - " static FReducer GetAsReducer(const F{module_name}Event& Event)" + " static F{module_prefix}Reducer GetAsReducer(const F{module_name}Event& Event)" ); writeln!(output, " {{"); writeln!(output, " return Event.GetAsReducer();"); @@ -1730,6 +1867,19 @@ fn generate_context_structs( writeln!(output, " }}"); writeln!(output); + writeln!( + output, + " UFUNCTION(BlueprintPure, Category = \"SpacetimeDB|{module_name}Event\")" + ); + writeln!( + output, + " static FSpacetimeDBUnit GetAsTransaction(const F{module_name}Event& Event)" + ); + writeln!(output, " {{"); + writeln!(output, " return Event.GetAsTransaction();"); + writeln!(output, " }}"); + writeln!(output); + writeln!( output, " UFUNCTION(BlueprintPure, Category = \"SpacetimeDB|{module_name}Event\")" @@ -1759,17 +1909,20 @@ fn generate_context_structs( writeln!(output, "}};"); writeln!(output); - // FEventContext, FReducerEventContext, FErrorContext, FSubscriptionEventContext + // F{module_prefix}EventContext, F{module_prefix}ReducerEventContext, F{module_prefix}ErrorContext, F{module_prefix}SubscriptionEventContext writeln!(output); writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FEventContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}EventContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFEventContext() = default;"); + writeln!(output, "\tF{module_prefix}EventContext() = default;"); writeln!( output, - "\tFEventContext(UDbConnection* InConn, const F{module_name}Event& InEvent) : FContextBase(InConn), Event(InEvent) {{}}" + "\tF{module_prefix}EventContext(U{module_prefix}DbConnection* InConn, const F{module_name}Event& InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}" ); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); @@ -1777,47 +1930,53 @@ fn generate_context_structs( writeln!(output, "}};"); writeln!(output); - // FReducerEventContext + // F{module_prefix}ReducerEventContext writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FReducerEventContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}ReducerEventContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFReducerEventContext() = default;"); - writeln!(output, "\tFReducerEventContext(UDbConnection* InConn, F{module_name}ReducerEvent InEvent) : FContextBase(InConn), Event(InEvent) {{}}"); + writeln!(output, "\tF{module_prefix}ReducerEventContext() = default;"); + writeln!(output, "\tF{module_prefix}ReducerEventContext(U{module_prefix}DbConnection* InConn, F{module_name}ReducerEvent InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}"); writeln!(output, "\t"); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\") "); writeln!(output, "\tF{module_name}ReducerEvent Event;"); writeln!(output, "}};"); writeln!(output); - // FProcedureEventContext + // F{module_prefix}ProcedureEventContext writeln!(output, "USTRUCT(BlueprintType)"); writeln!( output, - "struct {api_macro} FProcedureEventContext : public FContextBase" + "struct {api_macro} F{module_prefix}ProcedureEventContext : public F{module_prefix}ContextBase" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFProcedureEventContext() = default;"); - writeln!(output, "\tFProcedureEventContext(UDbConnection* InConn, F{module_name}ProcedureEvent InEvent) : FContextBase(InConn), Event(InEvent) {{}}"); + writeln!(output, "\tF{module_prefix}ProcedureEventContext() = default;"); + writeln!(output, "\tF{module_prefix}ProcedureEventContext(U{module_prefix}DbConnection* InConn, F{module_name}ProcedureEvent InEvent) : F{module_prefix}ContextBase(InConn), Event(InEvent) {{}}"); writeln!(output, "\t"); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\") "); writeln!(output, "\tF{module_name}ProcedureEvent Event;"); writeln!(output, "}};"); writeln!(output); - // FErrorContext + // F{module_prefix}ErrorContext writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FErrorContext : public FContextBase"); + writeln!( + output, + "struct {api_macro} F{module_prefix}ErrorContext : public F{module_prefix}ContextBase" + ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFErrorContext() = default;"); + writeln!(output, "\tF{module_prefix}ErrorContext() = default;"); writeln!( output, - "\tFErrorContext(UDbConnection* InConn, const FString& InError) : FContextBase(InConn), Error(InError) {{}}" + "\tF{module_prefix}ErrorContext(U{module_prefix}DbConnection* InConn, const FString& InError) : F{module_prefix}ContextBase(InConn), Error(InError) {{}}" ); writeln!(output); writeln!(output, "\tUPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); @@ -1826,35 +1985,36 @@ fn generate_context_structs( writeln!(output, "}};"); writeln!(output); - // FSubscriptionEventContext + // F{module_prefix}SubscriptionEventContext writeln!(output, "USTRUCT(BlueprintType)"); writeln!( output, - "struct {api_macro} FSubscriptionEventContext : public FContextBase" + "struct {api_macro} F{module_prefix}SubscriptionEventContext : public F{module_prefix}ContextBase" ); writeln!(output, "{{"); writeln!(output, "\tGENERATED_BODY()"); writeln!(output); - writeln!(output, "\tFSubscriptionEventContext() = default;"); + writeln!(output, "\tF{module_prefix}SubscriptionEventContext() = default;"); writeln!( output, - "\tFSubscriptionEventContext(UDbConnection* InConn) : FContextBase(InConn) {{}}" + "\tF{module_prefix}SubscriptionEventContext(U{module_prefix}DbConnection* InConn) : F{module_prefix}ContextBase(InConn) {{}}" ); writeln!(output); writeln!(output, "}};"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_OneParam("); - writeln!(output, "\tFOnSubscriptionApplied,"); + writeln!(output, "\tF{module_prefix}OnSubscriptionApplied,"); writeln!(output, "\tFSubscriptionEventContext, Context);"); writeln!(output); writeln!(output, "DECLARE_DYNAMIC_DELEGATE_OneParam("); - writeln!(output, "\tFOnSubscriptionError,"); + writeln!(output, "\tF{module_prefix}OnSubscriptionError,"); writeln!(output, "\tFErrorContext, Context);"); writeln!(output); } fn generate_reducer_bindings( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, api_macro: &str, @@ -1865,12 +2025,12 @@ fn generate_reducer_bindings( // Per-module typed Reducer tagged union + typed Event // --------------------------------------------------------------------- writeln!(output, "UENUM(BlueprintType, Category = \"SpacetimeDB\")"); - writeln!(output, "enum class EReducerTag : uint8"); + writeln!(output, "enum class E{module_prefix}ReducerTag : uint8"); writeln!(output, "{{"); { let mut first = true; for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); if !first { writeln!(output, ","); } else { @@ -1887,21 +2047,24 @@ fn generate_reducer_bindings( writeln!(output, "}};"); writeln!(output); - // FReducer: tagged union over reducer args, with optional metadata + // F{module_prefix}Reducer: tagged union over reducer args, with optional metadata writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FReducer"); + writeln!(output, "struct {api_macro} F{module_prefix}Reducer"); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, " EReducerTag Tag = static_cast(0);"); + writeln!( + output, + " E{module_prefix}ReducerTag Tag = static_cast(0);" + ); writeln!(output); write!(output, " TVariant<"); { let mut first = true; for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); if !first { write!(output, ", "); } else { @@ -1924,14 +2087,17 @@ fn generate_reducer_bindings( // Static constructors, Is*, GetAs* for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); writeln!( output, - " static FReducer {reducer_pascal}(const F{reducer_pascal}Args& Value)" + " static F{module_prefix}Reducer {reducer_pascal}(const F{reducer_pascal}Args& Value)" ); writeln!(output, " {{"); - writeln!(output, " FReducer Out;"); - writeln!(output, " Out.Tag = EReducerTag::{reducer_pascal};"); + writeln!(output, " F{module_prefix}Reducer Out;"); + writeln!( + output, + " Out.Tag = E{module_prefix}ReducerTag::{reducer_pascal};" + ); writeln!(output, " Out.Data.Set(Value);"); writeln!(output, " Out.ReducerName = TEXT(\"{}\");", reducer.name.deref()); writeln!(output, " return Out;"); @@ -1939,7 +2105,7 @@ fn generate_reducer_bindings( writeln!(output); writeln!( output, - " FORCEINLINE bool Is{reducer_pascal}() const {{ return Tag == EReducerTag::{reducer_pascal}; }}" + " FORCEINLINE bool Is{reducer_pascal}() const {{ return Tag == E{module_prefix}ReducerTag::{reducer_pascal}; }}" ); writeln!( output, @@ -1954,21 +2120,24 @@ fn generate_reducer_bindings( writeln!(output, " }}"); writeln!(output); } - writeln!(output, " FORCEINLINE bool operator==(const FReducer& Other) const"); + writeln!( + output, + " FORCEINLINE bool operator==(const F{module_prefix}Reducer& Other) const" + ); writeln!(output, " {{"); writeln!(output, " if (Tag != Other.Tag || ReducerId != Other.ReducerId || RequestId != Other.RequestId || ReducerName != Other.ReducerName) return false;"); writeln!(output, " switch (Tag)"); writeln!(output, " {{"); for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); - writeln!(output, " case EReducerTag::{reducer_pascal}:"); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); + writeln!(output, " case E{module_prefix}ReducerTag::{reducer_pascal}:"); writeln!( output, " return GetAs{reducer_pascal}() == Other.GetAs{reducer_pascal}();" ); } if reducer_count == 0 { - writeln!(output, " case EReducerTag::None:"); + writeln!(output, " case E{module_prefix}ReducerTag::None:"); writeln!(output, " return true;"); } @@ -1977,16 +2146,16 @@ fn generate_reducer_bindings( writeln!(output, " }}"); writeln!( output, - " FORCEINLINE bool operator!=(const FReducer& Other) const {{ return !(*this == Other); }}" + " FORCEINLINE bool operator!=(const F{module_prefix}Reducer& Other) const {{ return !(*this == Other); }}" ); writeln!(output, "}};"); writeln!(output); - // BPLib for FReducer + // BPLib for F{module_prefix}Reducer writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UReducerBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ReducerBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -1994,7 +2163,7 @@ fn generate_reducer_bindings( writeln!(output, "private:"); for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); // ---- Static constructors ---- writeln!(output); writeln!( @@ -2003,9 +2172,12 @@ fn generate_reducer_bindings( ); writeln!( output, - " static FReducer {reducer_pascal}(const F{reducer_pascal}Args& Value) {{" + " static F{module_prefix}Reducer {reducer_pascal}(const F{reducer_pascal}Args& Value) {{" + ); + writeln!( + output, + " return F{module_prefix}Reducer::{reducer_pascal}(Value);" ); - writeln!(output, " return FReducer::{reducer_pascal}(Value);"); writeln!(output, " }}"); writeln!(output); @@ -2016,7 +2188,7 @@ fn generate_reducer_bindings( ); writeln!( output, - " static bool Is{reducer_pascal}(const FReducer& Reducer) {{ return Reducer.Is{reducer_pascal}(); }}" + " static bool Is{reducer_pascal}(const F{module_prefix}Reducer& Reducer) {{ return Reducer.Is{reducer_pascal}(); }}" ); writeln!(output); @@ -2027,7 +2199,7 @@ fn generate_reducer_bindings( ); writeln!( output, - " static F{reducer_pascal}Args GetAs{reducer_pascal}(const FReducer& Reducer) {{" + " static F{reducer_pascal}Args GetAs{reducer_pascal}(const F{module_prefix}Reducer& Reducer) {{" ); writeln!(output, " return Reducer.GetAs{reducer_pascal}();"); writeln!(output, " }}"); @@ -2119,6 +2291,7 @@ fn generate_reducer_bindings( fn generate_procedure_bindings( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, api_macro: &str, @@ -2130,12 +2303,12 @@ fn generate_procedure_bindings( // Per-module typed Procedure tagged union + typed Event // --------------------------------------------------------------------- writeln!(output, "UENUM(BlueprintType, Category = \"SpacetimeDB\")"); - writeln!(output, "enum class EProcedureTag : uint8"); + writeln!(output, "enum class E{module_prefix}ProcedureTag : uint8"); writeln!(output, "{{"); { let mut first = true; for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); if !first { writeln!(output, ","); } else { @@ -2148,21 +2321,24 @@ fn generate_procedure_bindings( writeln!(output, "}};"); writeln!(output); - // FProcedure: tagged union over procedure args, with optional metadata + // F{module_prefix}Procedure: tagged union over procedure args, with optional metadata writeln!(output, "USTRUCT(BlueprintType)"); - writeln!(output, "struct {api_macro} FProcedure"); + writeln!(output, "struct {api_macro} F{module_prefix}Procedure"); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category = \"SpacetimeDB\")"); - writeln!(output, " EProcedureTag Tag = static_cast(0);"); + writeln!( + output, + " E{module_prefix}ProcedureTag Tag = static_cast(0);" + ); writeln!(output); write!(output, " TVariant<"); { let mut first = true; for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); if !first { write!(output, ", "); } else { @@ -2182,14 +2358,17 @@ fn generate_procedure_bindings( // Static constructors, Is*, GetAs* for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); writeln!( output, - " static FProcedure {procedure_pascal}(const F{procedure_pascal}Args& Value)" + " static F{module_prefix}Procedure {procedure_pascal}(const F{procedure_pascal}Args& Value)" ); writeln!(output, " {{"); - writeln!(output, " FProcedure Out;"); - writeln!(output, " Out.Tag = EProcedureTag::{procedure_pascal};"); + writeln!(output, " F{module_prefix}Procedure Out;"); + writeln!( + output, + " Out.Tag = E{module_prefix}ProcedureTag::{procedure_pascal};" + ); writeln!(output, " Out.Data.Set(Value);"); writeln!( output, @@ -2201,7 +2380,7 @@ fn generate_procedure_bindings( writeln!(output); writeln!( output, - " FORCEINLINE bool Is{procedure_pascal}() const {{ return Tag == EProcedureTag::{procedure_pascal}; }}" + " FORCEINLINE bool Is{procedure_pascal}() const {{ return Tag == E{module_prefix}ProcedureTag::{procedure_pascal}; }}" ); writeln!( output, @@ -2216,14 +2395,17 @@ fn generate_procedure_bindings( writeln!(output, " }}"); writeln!(output); } - writeln!(output, " FORCEINLINE bool operator==(const FProcedure& Other) const"); + writeln!( + output, + " FORCEINLINE bool operator==(const F{module_prefix}Procedure& Other) const" + ); writeln!(output, " {{"); writeln!(output, " if (Tag != Other.Tag || ProcedureId != Other.ProcedureId || RequestId != Other.RequestId || ProcedureName != Other.ProcedureName) return false;"); writeln!(output, " switch (Tag)"); writeln!(output, " {{"); for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); - writeln!(output, " case EProcedureTag::{procedure_pascal}:"); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); + writeln!(output, " case E{module_prefix}ProcedureTag::{procedure_pascal}:"); writeln!( output, " return GetAs{procedure_pascal}() == Other.GetAs{procedure_pascal}();" @@ -2234,16 +2416,16 @@ fn generate_procedure_bindings( writeln!(output, " }}"); writeln!( output, - " FORCEINLINE bool operator!=(const FProcedure& Other) const {{ return !(*this == Other); }}" + " FORCEINLINE bool operator!=(const F{module_prefix}Procedure& Other) const {{ return !(*this == Other); }}" ); writeln!(output, "}};"); writeln!(output); - // BPLib for FProcedure + // BPLib for F{module_prefix}Procedure writeln!(output, "UCLASS()"); writeln!( output, - "class {api_macro} UProcedureBpLib : public UBlueprintFunctionLibrary" + "class {api_macro} U{module_prefix}ProcedureBpLib : public UBlueprintFunctionLibrary" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -2251,7 +2433,7 @@ fn generate_procedure_bindings( writeln!(output, "private:"); for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); // ---- Static constructors ---- writeln!(output); writeln!( @@ -2260,9 +2442,12 @@ fn generate_procedure_bindings( ); writeln!( output, - " static FProcedure {procedure_pascal}(const F{procedure_pascal}Args& Value) {{" + " static F{module_prefix}Procedure {procedure_pascal}(const F{procedure_pascal}Args& Value) {{" + ); + writeln!( + output, + " return F{module_prefix}Procedure::{procedure_pascal}(Value);" ); - writeln!(output, " return FProcedure::{procedure_pascal}(Value);"); writeln!(output, " }}"); writeln!(output); @@ -2273,7 +2458,7 @@ fn generate_procedure_bindings( ); writeln!( output, - " static bool Is{procedure_pascal}(const FProcedure& Procedure) {{ return Procedure.Is{procedure_pascal}(); }}" + " static bool Is{procedure_pascal}(const F{module_prefix}Procedure& Procedure) {{ return Procedure.Is{procedure_pascal}(); }}" ); writeln!(output); @@ -2284,7 +2469,7 @@ fn generate_procedure_bindings( ); writeln!( output, - " static F{procedure_pascal}Args GetAs{procedure_pascal}(const FProcedure& Procedure) {{" + " static F{procedure_pascal}Args GetAs{procedure_pascal}(const F{module_prefix}Procedure& Procedure) {{" ); writeln!(output, " return Procedure.GetAs{procedure_pascal}();"); writeln!(output, " }}"); @@ -2370,13 +2555,17 @@ fn generate_procedure_bindings( fn generate_remote_tables_class( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, api_macro: &str, ) { writeln!(output, "// RemoteTables class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteTables : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteTables : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2389,7 +2578,7 @@ fn generate_remote_tables_class( writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); writeln!( output, - " U{}Table* {};", + " U{module_prefix}{}Table* {};", accessor_name.deref().to_case(Case::Pascal), accessor_name.deref().to_case(Case::Pascal) ); @@ -2402,6 +2591,7 @@ fn generate_remote_tables_class( fn generate_remote_reducers_class( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, api_macro: &str, @@ -2409,7 +2599,10 @@ fn generate_remote_reducers_class( ) { writeln!(output, "// RemoteReducers class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteReducers : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteReducers : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2418,7 +2611,7 @@ fn generate_remote_reducers_class( // Generate reducer events and call methods for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); // Generate delegate for reducer event let param_count = reducer.params_for_generate.elements.len() + 1; // +1 for context @@ -2431,19 +2624,19 @@ fn generate_remote_reducers_class( // For more than 9 params, use a struct to wrap the arguments writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams("); writeln!(output, " F{reducer_pascal}Handler,"); - writeln!(output, " const FReducerEventContext&, Context,"); + writeln!(output, " const F{module_prefix}ReducerEventContext&, Context,"); writeln!(output, " const F{reducer_pascal}Args&, Args"); writeln!(output, " );"); // For delegates using args struct, check the actual delegate parameters: - // 1. FReducerEventContext (always blueprintable) + // 1. F{module_prefix}ReducerEventContext (always blueprintable) // 2. F{Reducer}Args struct (always blueprintable as a USTRUCT) // So delegates with args struct are always blueprintable // But functions still need to check individual parameters for (_, param_type) in &reducer.params_for_generate.elements { if !is_type_blueprintable_for_delegates(module, param_type) { - let type_str = cpp_ty_fmt_with_module(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string(); non_blueprintable_types_for_function.push(type_str); } } @@ -2464,12 +2657,13 @@ fn generate_remote_reducers_class( write!( output, - " {delegate_macro}(\n F{reducer_pascal}Handler,\n const FReducerEventContext&, Context" + " {delegate_macro}(\n F{reducer_pascal}Handler,\n const F{module_prefix}ReducerEventContext&, Context" ); for (param_name, param_type) in &reducer.params_for_generate.elements { // Use Blueprint-compatible types for delegates - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); // Collect non-blueprintable types for both delegate and function if !is_type_blueprintable_for_delegates(module, param_type) { @@ -2534,9 +2728,9 @@ fn generate_remote_reducers_class( // For UFUNCTION parameters, use Blueprint-compatible types let type_str = if non_blueprintable_types_for_function.is_empty() { - cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string() + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string() } else { - cpp_ty_fmt_with_module(module, param_type, module_name).to_string() + cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string() }; if should_pass_by_value_in_delegate(module, param_type) { @@ -2563,14 +2757,14 @@ fn generate_remote_reducers_class( // Generate invoke method (UObject version - kept for backwards compatibility) write!( output, - " bool Invoke{reducer_pascal}(const FReducerEventContext& Context, const U{reducer_pascal}Reducer* Args);" + " bool Invoke{reducer_pascal}(const F{module_prefix}ReducerEventContext& Context, const U{reducer_pascal}Reducer* Args);" ); writeln!(output); // Generate invoke method (FArgs version - zero allocation, used internally) write!( output, - " bool Invoke{reducer_pascal}WithArgs(const FReducerEventContext& Context, const F{reducer_pascal}Args& Args);" + " bool Invoke{reducer_pascal}WithArgs(const F{module_prefix}ReducerEventContext& Context, const F{reducer_pascal}Args& Args);" ); writeln!(output); writeln!(output); @@ -2578,7 +2772,7 @@ fn generate_remote_reducers_class( // Internal error handling writeln!(output, " // Internal error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const F{module_prefix}ReducerEventContext&, Context, const FString&, Error);"); writeln!( output, " FInternalOnUnhandledReducerError InternalOnUnhandledReducerError;" @@ -2587,32 +2781,30 @@ fn generate_remote_reducers_class( writeln!(output, "private:"); writeln!(output); - writeln!(output, " friend UDbConnection;"); + writeln!(output, " friend U{module_prefix}DbConnection;"); writeln!(output); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); - writeln!(output); - writeln!(output, " UPROPERTY()"); - writeln!(output, " USetReducerFlags* SetCallReducerFlags;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output, "}};"); writeln!(output); } fn generate_remote_procedures_class( output: &mut UnrealCppAutogen, + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, api_macro: &str, module_name: &str, ) { for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); let blueprintable_type_for_return = is_type_blueprintable_for_delegates(module, &procedure.return_type_for_generate); // In generate_remote_procedures_class, before the existing event delegate generation: let return_type_str = - cpp_ty_fmt_with_module(module, &procedure.return_type_for_generate, module_name).to_string(); + cpp_ty_fmt_with_module(module_prefix, module, &procedure.return_type_for_generate, module_name).to_string(); let return_type_ref = if return_type_str.starts_with('F') && return_type_str != "FSpacetimeDBUnit" { format!("const {}&", return_type_str) } else { @@ -2625,7 +2817,7 @@ fn generate_remote_procedures_class( "// NOTE: Procedure {procedure_pascal} has non-Blueprint-compatible return type: {return_type_str}" ); writeln!(output, "DECLARE_DELEGATE_ThreeParams(FOn{procedure_pascal}Complete,"); - writeln!(output, " const FProcedureEventContext&, /*Context*/"); + writeln!(output, " const F{module_prefix}ProcedureEventContext&, /*Context*/"); writeln!(output, " {return_type_ref}, /*Result,*/"); writeln!(output, " bool /*bSuccess*/);"); writeln!(output); @@ -2634,7 +2826,7 @@ fn generate_remote_procedures_class( output, "DECLARE_DYNAMIC_DELEGATE_ThreeParams(FOn{procedure_pascal}Complete," ); - writeln!(output, " const FProcedureEventContext&, Context,"); + writeln!(output, " const F{module_prefix}ProcedureEventContext&, Context,"); writeln!(output, " {}, Result,", return_type_ref); writeln!(output, " bool, bSuccess);"); writeln!(output); @@ -2643,7 +2835,10 @@ fn generate_remote_procedures_class( writeln!(output, "// RemoteProcedures class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} URemoteProcedures : public UObject"); + writeln!( + output, + "class {api_macro} U{module_prefix}RemoteProcedures : public UObject" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); @@ -2652,13 +2847,13 @@ fn generate_remote_procedures_class( // Generate procedure events and call methods for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); let mut non_blueprintable_types_for_function = Vec::new(); for (_, param_type) in &procedure.params_for_generate.elements { if !is_type_blueprintable_for_delegates(module, param_type) { - let type_str = cpp_ty_fmt_with_module(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string(); non_blueprintable_types_for_function.push(type_str); } } @@ -2689,9 +2884,9 @@ fn generate_remote_procedures_class( // For UFUNCTION parameters, use Blueprint-compatible types let type_str = if non_blueprintable_types_for_function.is_empty() { - cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string() + cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string() } else { - cpp_ty_fmt_with_module(module, param_type, module_name).to_string() + cpp_ty_fmt_with_module(module_prefix, module, param_type, module_name).to_string() }; if should_pass_by_value_in_delegate(module, param_type) { @@ -2723,7 +2918,7 @@ fn generate_remote_procedures_class( // Internal error handling writeln!(output, " // Internal error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const F{module_prefix}ProcedureEventContext&, Context, const FString&, Error);"); writeln!( output, " FInternalOnUnhandledProcedureError InternalOnUnhandledProcedureError;" @@ -2732,20 +2927,20 @@ fn generate_remote_procedures_class( writeln!(output, "private:"); writeln!(output); - writeln!(output, " friend UDbConnection;"); + writeln!(output, " friend U{module_prefix}DbConnection;"); writeln!(output); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output, "}};"); writeln!(output); } -fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "// SubscriptionBuilder class"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} USubscriptionBuilder : public USubscriptionBuilderBase" + "class {api_macro} U{module_prefix}SubscriptionBuilder : public USubscriptionBuilderBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); @@ -2755,19 +2950,19 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " USubscriptionBuilder* OnApplied(FOnSubscriptionApplied Callback);" + " U{module_prefix}SubscriptionBuilder* OnApplied(F{module_prefix}OnSubscriptionApplied Callback);" ); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " USubscriptionBuilder* OnError(FOnSubscriptionError Callback);" + " U{module_prefix}SubscriptionBuilder* OnError(F{module_prefix}OnSubscriptionError Callback);" ); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")"); writeln!( output, - " USubscriptionHandle* Subscribe(const TArray& SQL);" + " U{module_prefix}SubscriptionHandle* Subscribe(const TArray& SQL);" ); writeln!(output); writeln!( @@ -2775,54 +2970,66 @@ fn generate_subscription_builder_class(output: &mut UnrealCppAutogen, api_macro: " /** Convenience for subscribing to all rows from all tables */" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " USubscriptionHandle* SubscribeToAllTables();"); + writeln!( + output, + " U{module_prefix}SubscriptionHandle* SubscribeToAllTables();" + ); writeln!(output); writeln!(output); - writeln!(output, " friend class UDbConnection;"); + writeln!(output, " friend class U{module_prefix}DbConnection;"); writeln!(output, " friend class UDbConnectionBase;"); writeln!(output); writeln!(output, "protected:"); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!( output, " // Delegates stored so Subscribe() can bind forwarding callbacks" ); - writeln!(output, " FOnSubscriptionApplied OnAppliedDelegateInternal;"); - writeln!(output, " FOnSubscriptionError OnErrorDelegateInternal;"); + writeln!( + output, + " F{module_prefix}OnSubscriptionApplied OnAppliedDelegateInternal;" + ); + writeln!( + output, + " F{module_prefix}OnSubscriptionError OnErrorDelegateInternal;" + ); writeln!(output, "}};"); writeln!(output); } -fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "// SubscriptionHandle class"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} USubscriptionHandle : public USubscriptionHandleBase" + "class {api_macro} U{module_prefix}SubscriptionHandle : public USubscriptionHandleBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!(output); - writeln!(output, " USubscriptionHandle() {{}};"); + writeln!(output, " U{module_prefix}SubscriptionHandle() {{}};"); writeln!(output); - writeln!(output, " explicit USubscriptionHandle(UDbConnection* InConn);"); + writeln!( + output, + " explicit U{module_prefix}SubscriptionHandle(U{module_prefix}DbConnection* InConn);" + ); writeln!(output); - writeln!(output, " friend class USubscriptionBuilder;"); + writeln!(output, " friend class U{module_prefix}SubscriptionBuilder;"); writeln!(output); writeln!(output, "private:"); writeln!(output, " UPROPERTY()"); - writeln!(output, " class UDbConnection* Conn;"); + writeln!(output, " class U{module_prefix}DbConnection* Conn;"); writeln!(output); writeln!( output, " // Delegates that expose subscription events with connection aware contexts" ); - writeln!(output, " FOnSubscriptionApplied OnAppliedDelegate;"); - writeln!(output, " FOnSubscriptionError OnErrorDelegate;"); + writeln!(output, " F{module_prefix}OnSubscriptionApplied OnAppliedDelegate;"); + writeln!(output, " F{module_prefix}OnSubscriptionError OnErrorDelegate;"); writeln!(output); writeln!(output, " UFUNCTION()"); writeln!( @@ -2836,50 +3043,56 @@ fn generate_subscription_handle_class(output: &mut UnrealCppAutogen, api_macro: writeln!(output); } -fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, api_macro: &str) { +fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, module_prefix: &str, api_macro: &str) { writeln!(output, "/*"); writeln!(output, " @Note: Child class of UDbConnectionBuilderBase."); writeln!(output, "*/"); writeln!(output, "UCLASS(BlueprintType)"); writeln!( output, - "class {api_macro} UDbConnectionBuilder : public UDbConnectionBuilderBase" + "class {api_macro} U{module_prefix}DbConnectionBuilder : public UDbConnectionBuilderBase" ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output, "public:"); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnectionBuilder* WithUri(const FString& InUri);"); + writeln!( + output, + " U{module_prefix}DbConnectionBuilder* WithUri(const FString& InUri);" + ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* WithDatabaseName(const FString& InName);" + " U{module_prefix}DbConnectionBuilder* WithDatabaseName(const FString& InName);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnectionBuilder* WithToken(const FString& InToken);"); + writeln!( + output, + " U{module_prefix}DbConnectionBuilder* WithToken(const FString& InToken);" + ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression);" + " U{module_prefix}DbConnectionBuilder* WithCompression(const ESpacetimeDBCompression& InCompression);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnConnect(FOnConnectDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnConnect(F{module_prefix}OnConnectDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnConnectError(FOnConnectErrorDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); writeln!( output, - " UDbConnectionBuilder* OnDisconnect(FOnDisconnectDelegate Callback);" + " U{module_prefix}DbConnectionBuilder* OnDisconnect(F{module_prefix}OnDisconnectDelegate Callback);" ); writeln!(output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\")"); - writeln!(output, " UDbConnection* Build();"); + writeln!(output, " U{module_prefix}DbConnection* Build();"); writeln!(output); writeln!(output, "private:"); writeln!(output); @@ -2887,62 +3100,76 @@ fn generate_db_connection_builder_class(output: &mut UnrealCppAutogen, api_macro output, " // Stored delegates which will be forwarded when the connection events occur." ); - writeln!(output, " FOnConnectDelegate OnConnectDelegateInternal;"); - writeln!(output, " FOnDisconnectDelegate OnDisconnectDelegateInternal;"); + writeln!( + output, + " F{module_prefix}OnConnectDelegate OnConnectDelegateInternal;" + ); + writeln!( + output, + " F{module_prefix}OnDisconnectDelegate OnDisconnectDelegateInternal;" + ); writeln!(output, "}};"); writeln!(output); } -fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleDef, api_macro: &str) { +fn generate_db_connection_class( + output: &mut UnrealCppAutogen, + module_prefix: &str, + _module: &ModuleDef, + api_macro: &str, +) { writeln!(output, "// Main DbConnection class"); writeln!(output, "UCLASS(BlueprintType)"); - writeln!(output, "class {api_macro} UDbConnection : public UDbConnectionBase"); + writeln!( + output, + "class {api_macro} U{module_prefix}DbConnection : public UDbConnectionBase" + ); writeln!(output, "{{"); writeln!(output, " GENERATED_BODY()"); writeln!(output); writeln!(output, "public:"); writeln!( output, - " explicit UDbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());" + " explicit U{module_prefix}DbConnection(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());" ); writeln!(output); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteTables* Db;"); - writeln!(output); - writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteReducers* Reducers;"); + writeln!(output, " U{module_prefix}RemoteTables* Db;"); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " USetReducerFlags* SetReducerFlags;"); + writeln!(output, " U{module_prefix}RemoteReducers* Reducers;"); writeln!(output); writeln!(output, " UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")"); - writeln!(output, " URemoteProcedures* Procedures;"); + writeln!(output, " U{module_prefix}RemoteProcedures* Procedures;"); writeln!(output); writeln!( output, " // Delegates that allow users to bind with the concrete connection type." ); - writeln!(output, " FOnConnectDelegate OnConnectDelegate;"); - writeln!(output, " FOnDisconnectDelegate OnDisconnectDelegate;"); + writeln!(output, " F{module_prefix}OnConnectDelegate OnConnectDelegate;"); + writeln!(output, " F{module_prefix}OnDisconnectDelegate OnDisconnectDelegate;"); writeln!(output); writeln!(output, " UFUNCTION(BlueprintCallable, Category=\"SpacetimeDB\")"); - writeln!(output, " USubscriptionBuilder* SubscriptionBuilder();"); + writeln!( + output, + " U{module_prefix}SubscriptionBuilder* SubscriptionBuilder();" + ); writeln!(output); writeln!(output, " /** Static entry point for constructing a connection. */"); writeln!( output, " UFUNCTION(BlueprintCallable, Category = \"SpacetimeDB\", DisplayName = \"SpacetimeDB Builder\")" ); - writeln!(output, " static UDbConnectionBuilder* Builder();"); + writeln!(output, " static U{module_prefix}DbConnectionBuilder* Builder();"); writeln!(output); writeln!(output, " // Error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledReducerError, const F{module_prefix}ReducerEventContext&, Context, const FString&, Error);"); writeln!(output, " UPROPERTY(BlueprintAssignable, Category=\"SpacetimeDB\")"); writeln!(output, " FOnUnhandledReducerError OnUnhandledReducerError;"); writeln!(output); writeln!(output, " // Error handling"); - writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error);"); + writeln!(output, " DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const F{module_prefix}ProcedureEventContext&, Context, const FString&, Error);"); writeln!(output, " UPROPERTY(BlueprintAssignable, Category=\"SpacetimeDB\")"); writeln!(output, " FOnUnhandledProcedureError OnUnhandledProcedureError;"); writeln!(output); @@ -2963,13 +3190,13 @@ fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleD writeln!(output, " UFUNCTION()"); writeln!( output, - " void OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error);" + " void OnUnhandledReducerErrorHandler(const F{module_prefix}ReducerEventContext& Context, const FString& Error);" ); writeln!(output); writeln!(output, " UFUNCTION()"); writeln!( output, - " void OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error);" + " void OnUnhandledProcedureErrorHandler(const F{module_prefix}ProcedureEventContext& Context, const FString& Error);" ); writeln!(output); writeln!( @@ -3000,6 +3227,31 @@ fn generate_db_connection_class(output: &mut UnrealCppAutogen, _module: &ModuleD output, " virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override;" ); + writeln!(output); + writeln!(output, " friend class U{module_prefix}RemoteReducers;"); + writeln!(output); + writeln!( + output, + " // Internal reducer correlation helpers (request_id -> typed reducer)" + ); + writeln!( + output, + " void RegisterPendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer Reducer);" + ); + writeln!( + output, + " bool TryGetPendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer& OutReducer) const;" + ); + writeln!( + output, + " bool TryTakePendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer& OutReducer);" + ); + writeln!(output); + writeln!(output, "private:"); + writeln!( + output, + " TMap PendingTypedReducers;" + ); writeln!(output, "}};"); writeln!(output); } @@ -3008,70 +3260,40 @@ fn generate_client_implementation( output: &mut UnrealCppAutogen, module: &ModuleDef, visibility: CodegenVisibility, + module_prefix: &str, module_name: &str, ) { - // Helper: Decode reducer args into FReducer from either event types - writeln!(output, "static FReducer DecodeReducer(const FReducerEvent& Event)"); - writeln!(output, "{{"); + // U{module_prefix}DbConnection constructor writeln!( output, - " const FString& ReducerName = Event.ReducerCall.ReducerName;" - ); - writeln!(output); - - for reducer in iter_reducers(module, visibility) { - let reducer_name = reducer.name.deref(); - let reducer_pascal = reducer_name.to_case(Case::Pascal); - - writeln!(output, " if (ReducerName == TEXT(\"{reducer_name}\"))"); - writeln!(output, " {{"); - writeln!( - output, - " F{reducer_pascal}Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args);" - ); - writeln!(output, " return FReducer::{reducer_pascal}(Args);"); - writeln!(output, " }}"); - writeln!(output); - } - - writeln!(output, " return FReducer();"); - writeln!(output, "}}"); - writeln!(output); - - // UDbConnection constructor - writeln!( - output, - "UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)" + "U{module_prefix}DbConnection::U{module_prefix}DbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)" ); writeln!(output, "{{"); - writeln!(output, "\tSetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"SetReducerFlags\"));"); - writeln!(output); writeln!( output, - "\tDb = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteTables\"));" + "\tDb = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteTables\"));" ); writeln!(output, "\tDb->Initialize();"); writeln!(output, "\t"); writeln!( output, - "\tReducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteReducers\"));" + "\tReducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteReducers\"));" ); - writeln!(output, "\tReducers->SetCallReducerFlags = SetReducerFlags;"); writeln!(output, "\tReducers->Conn = this;"); writeln!(output); writeln!( output, - "\tProcedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteProcedures\"));" + "\tProcedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT(\"RemoteProcedures\"));" ); writeln!(output, "\tProcedures->Conn = this;"); writeln!(output); for (name, accessor_name, product_type_ref) in iter_table_names_and_types(module, visibility) { - let struct_name = type_ref_name(module, product_type_ref); + let struct_name = type_ref_name(module_prefix, module, product_type_ref); let accessor = accessor_name.deref(); writeln!( output, - "\tRegisterTable(TEXT(\"{}\"), Db->{});", + "\tRegisterTable(TEXT(\"{}\"), Db->{});", struct_name, accessor.to_case(Case::Pascal), name.deref(), @@ -3081,51 +3303,59 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!(output); - // FContextBase constructor - writeln!(output, "FContextBase::FContextBase(UDbConnection* InConn)"); + // F{module_prefix}ContextBase constructor + writeln!( + output, + "F{module_prefix}ContextBase::F{module_prefix}ContextBase(U{module_prefix}DbConnection* InConn)" + ); writeln!(output, "{{"); writeln!(output, "\tDb = InConn->Db;"); writeln!(output, "\tReducers = InConn->Reducers;"); - writeln!(output, "\tSetReducerFlags = InConn->SetReducerFlags;"); writeln!(output, "\tProcedures = InConn->Procedures;"); writeln!(output, "\tConn = InConn;"); writeln!(output, "}}"); - // FContextBase methods - writeln!(output, "bool FContextBase::IsActive() const"); + // F{module_prefix}ContextBase methods + writeln!(output, "bool F{module_prefix}ContextBase::IsActive() const"); writeln!(output, "{{"); writeln!(output, "\treturn Conn->IsActive();"); writeln!(output, "}}"); - writeln!(output, "void FContextBase::Disconnect()"); + writeln!(output, "void F{module_prefix}ContextBase::Disconnect()"); writeln!(output, "{{"); writeln!(output, "\tConn->Disconnect();"); writeln!(output, "}}"); - writeln!(output, "USubscriptionBuilder* FContextBase::SubscriptionBuilder()"); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* F{module_prefix}ContextBase::SubscriptionBuilder()" + ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->SubscriptionBuilder();"); writeln!(output, "}}"); writeln!( output, - "bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const" + "bool F{module_prefix}ContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const" ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->TryGetIdentity(OutIdentity);"); writeln!(output, "}}"); - writeln!(output, "FSpacetimeDBConnectionId FContextBase::GetConnectionId() const"); + writeln!( + output, + "FSpacetimeDBConnectionId F{module_prefix}ContextBase::GetConnectionId() const" + ); writeln!(output, "{{"); writeln!(output, "\treturn Conn->GetConnectionId();"); writeln!(output, "}}"); writeln!(output); - // URemoteTables Initialize method - writeln!(output, "void URemoteTables::Initialize()"); + // U{module_prefix}RemoteTables Initialize method + writeln!(output, "void U{module_prefix}RemoteTables::Initialize()"); writeln!(output, "{{"); writeln!(output); writeln!(output, "\t/** Creating tables */"); for (_, accessor_name, _) in iter_table_names_and_types(module, visibility) { writeln!( output, - "\t{} = NewObject(this);", + "\t{} = NewObject(this);", accessor_name.deref().to_case(Case::Pascal), accessor_name.deref().to_case(Case::Pascal) ); @@ -3144,24 +3374,11 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!(output); - // USetReducerFlags methods - for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); - writeln!( - output, - "void USetReducerFlags::{reducer_pascal}(ECallReducerFlags Flag)" - ); - writeln!(output, "{{"); - writeln!(output, "\tFlagMap.Add(\"{reducer_pascal}\", Flag);"); - writeln!(output, "}}"); - } - writeln!(output); - - generate_remote_reducer_calls(output, module, visibility, module_name); - generate_remote_procedure_calls(output, module, visibility, module_name); + generate_remote_reducer_calls(output, module, visibility, module_prefix, module_name); + generate_remote_procedure_calls(output, module, visibility, module_prefix, module_name); // Hook up error handling - writeln!(output, "void UDbConnection::PostInitProperties()"); + writeln!(output, "void U{module_prefix}DbConnection::PostInitProperties()"); writeln!(output, "{{"); writeln!(output, " Super::PostInitProperties();"); writeln!(output, " "); @@ -3171,7 +3388,7 @@ fn generate_client_implementation( ); writeln!(output, " if (Reducers)"); writeln!(output, " {{"); - writeln!(output, " Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &UDbConnection::OnUnhandledReducerErrorHandler);"); + writeln!(output, " Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &U{module_prefix}DbConnection::OnUnhandledReducerErrorHandler);"); writeln!(output, " }}"); writeln!(output); writeln!( @@ -3180,7 +3397,7 @@ fn generate_client_implementation( ); writeln!(output, " if (Procedures)"); writeln!(output, " {{"); - writeln!(output, " Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &UDbConnection::OnUnhandledProcedureErrorHandler);"); + writeln!(output, " Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &U{module_prefix}DbConnection::OnUnhandledProcedureErrorHandler);"); writeln!(output, " }}"); writeln!(output, "}}"); writeln!(output); @@ -3189,7 +3406,7 @@ fn generate_client_implementation( writeln!(output, "UFUNCTION()"); writeln!( output, - "void UDbConnection::OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error)" + "void U{module_prefix}DbConnection::OnUnhandledReducerErrorHandler(const F{module_prefix}ReducerEventContext& Context, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, " if (OnUnhandledReducerError.IsBound())"); @@ -3203,7 +3420,7 @@ fn generate_client_implementation( writeln!(output, "UFUNCTION()"); writeln!( output, - "void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error)" + "void U{module_prefix}DbConnection::OnUnhandledProcedureErrorHandler(const F{module_prefix}ProcedureEventContext& Context, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, " if (OnUnhandledProcedureError.IsBound())"); @@ -3213,14 +3430,72 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!(output); + writeln!( + output, + "void U{module_prefix}DbConnection::RegisterPendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer Reducer)" + ); + writeln!(output, "{{"); + writeln!(output, " Reducer.RequestId = RequestId;"); + writeln!(output, " PendingTypedReducers.Add(RequestId, MoveTemp(Reducer));"); + writeln!(output, "}}"); + writeln!(output); + writeln!( + output, + "bool U{module_prefix}DbConnection::TryGetPendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer& OutReducer) const" + ); + writeln!(output, "{{"); + writeln!( + output, + " if (const F{module_prefix}Reducer* Found = PendingTypedReducers.Find(RequestId))" + ); + writeln!(output, " {{"); + writeln!(output, " OutReducer = *Found;"); + writeln!(output, " return true;"); + writeln!(output, " }}"); + writeln!(output, " return false;"); + writeln!(output, "}}"); + writeln!(output); + writeln!( + output, + "bool U{module_prefix}DbConnection::TryTakePendingTypedReducer(uint32 RequestId, F{module_prefix}Reducer& OutReducer)" + ); + writeln!(output, "{{"); + writeln!( + output, + " if (F{module_prefix}Reducer* Found = PendingTypedReducers.Find(RequestId))" + ); + writeln!(output, " {{"); + writeln!(output, " OutReducer = *Found;"); + writeln!(output, " PendingTypedReducers.Remove(RequestId);"); + writeln!(output, " return true;"); + writeln!(output, " }}"); + writeln!(output, " return false;"); + writeln!(output, "}}"); + writeln!(output); + // ReducerEvent method implementation - writeln!(output, "void UDbConnection::ReducerEvent(const FReducerEvent& Event)"); + writeln!( + output, + "void U{module_prefix}DbConnection::ReducerEvent(const FReducerEvent& Event)" + ); writeln!(output, "{{"); writeln!(output, " if (!Reducers) {{ return; }}"); writeln!(output); - // Decode reducer call args - writeln!(output, " FReducer DecodedReducer = DecodeReducer(Event);"); + writeln!(output, " F{module_prefix}Reducer DecodedReducer;"); + writeln!( + output, + " if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer))" + ); + writeln!(output, " {{"); + writeln!( + output, + " const FString ErrorMessage = FString::Printf(TEXT(\"Reducer result for unknown request_id %u\"), Event.RequestId);" + ); + writeln!(output, " UE_LOG(LogTemp, Error, TEXT(\"%s\"), *ErrorMessage);"); + writeln!(output, " ReducerEventFailed(Event, ErrorMessage);"); + writeln!(output, " return;"); + writeln!(output, " }}"); writeln!(output); let module_name_pascal = module_name.to_case(Case::Pascal); @@ -3237,18 +3512,21 @@ fn generate_client_implementation( writeln!(output, " ReducerEvent.Reducer = DecodedReducer;"); writeln!(output); - writeln!(output, " FReducerEventContext Context(this, ReducerEvent);"); + writeln!( + output, + " F{module_prefix}ReducerEventContext Context(this, ReducerEvent);" + ); writeln!(output); - writeln!(output, " // Use hardcoded string matching for reducer dispatching"); + writeln!(output, " // Dispatch by typed reducer metadata"); writeln!( output, - " const FString& ReducerName = Event.ReducerCall.ReducerName;" + " const FString& ReducerName = ReducerEvent.Reducer.ReducerName;" ); writeln!(output); for reducer in iter_reducers(module, visibility) { let reducer_name = reducer.name.deref(); - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); writeln!(output, " if (ReducerName == TEXT(\"{reducer_name}\"))"); writeln!(output, " {{"); writeln!( @@ -3276,7 +3554,7 @@ fn generate_client_implementation( // ReducerEventFailed method implementation writeln!( output, - "void UDbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage)" + "void U{module_prefix}DbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage)" ); writeln!(output, "{{"); writeln!(output, " if (!Reducers) {{ return; }}"); @@ -3294,7 +3572,10 @@ fn generate_client_implementation( writeln!(output, " ReducerEvent.Timestamp = Event.Timestamp;"); writeln!(output); - writeln!(output, " FReducerEventContext Context(this, ReducerEvent);"); + writeln!( + output, + " F{module_prefix}ReducerEventContext Context(this, ReducerEvent);" + ); writeln!(output); writeln!(output, " if (Reducers->InternalOnUnhandledReducerError.IsBound())"); writeln!(output, " {{"); @@ -3309,7 +3590,7 @@ fn generate_client_implementation( // ProcedureEventFailed method implementation writeln!( output, - "void UDbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage)" + "void U{module_prefix}DbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage)" ); writeln!(output, "{{"); writeln!(output, " if (!Procedures) {{ return; }}"); @@ -3324,7 +3605,10 @@ fn generate_client_implementation( writeln!(output, " ProcedureEvent.Timestamp = Event.Timestamp;"); writeln!(output); - writeln!(output, " FProcedureEventContext Context(this, ProcedureEvent);"); + writeln!( + output, + " F{module_prefix}ProcedureEventContext Context(this, ProcedureEvent);" + ); writeln!(output); writeln!( output, @@ -3340,23 +3624,29 @@ fn generate_client_implementation( writeln!(output); // Additional methods from manual reference - writeln!(output, "UDbConnectionBuilder* UDbConnection::Builder()"); + writeln!( + output, + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnection::Builder()" + ); writeln!(output, "{{"); - writeln!(output, "\treturn NewObject();"); + writeln!(output, "\treturn NewObject();"); writeln!(output, "}}"); writeln!(output, "// Added for creating subscriptions"); - writeln!(output, "USubscriptionBuilder* UDbConnection::SubscriptionBuilder()"); + writeln!( + output, + "U{module_prefix}SubscriptionBuilder* U{module_prefix}DbConnection::SubscriptionBuilder()" + ); writeln!(output, "{{"); writeln!( output, - "\tUSubscriptionBuilder* Builder = NewObject(this);" + "\tU{module_prefix}SubscriptionBuilder* Builder = NewObject(this);" ); writeln!(output, "\tBuilder->Conn = this;"); writeln!(output, "\treturn Builder;"); writeln!(output, "}}"); writeln!( output, - "USubscriptionBuilder* USubscriptionBuilder::OnApplied(FOnSubscriptionApplied Callback)" + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::OnApplied(F{module_prefix}OnSubscriptionApplied Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnAppliedDelegateInternal = Callback;"); @@ -3364,7 +3654,7 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!( output, - "USubscriptionBuilder* USubscriptionBuilder::OnError(FOnSubscriptionError Callback)" + "U{module_prefix}SubscriptionBuilder* U{module_prefix}SubscriptionBuilder::OnError(F{module_prefix}OnSubscriptionError Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnErrorDelegateInternal = Callback;"); @@ -3372,12 +3662,12 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!( output, - "USubscriptionHandle* USubscriptionBuilder::Subscribe(const TArray& SQL)" + "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::Subscribe(const TArray& SQL)" ); writeln!(output, "{{"); writeln!( output, - "\tUSubscriptionHandle* Handle = NewObject();" + "\tU{module_prefix}SubscriptionHandle* Handle = NewObject();" ); writeln!(output); writeln!(output, "\t// Store user callbacks on the handle"); @@ -3406,7 +3696,7 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!( output, - "USubscriptionHandle* USubscriptionBuilder::SubscribeToAllTables()" + "U{module_prefix}SubscriptionHandle* U{module_prefix}SubscriptionBuilder::SubscribeToAllTables()" ); writeln!(output, "{{"); writeln!(output, "\treturn Subscribe({{ \"SELECT * FROM * \" }});"); @@ -3414,7 +3704,7 @@ fn generate_client_implementation( writeln!(output); writeln!( output, - "USubscriptionHandle::USubscriptionHandle(UDbConnection* InConn)" + "U{module_prefix}SubscriptionHandle::U{module_prefix}SubscriptionHandle(U{module_prefix}DbConnection* InConn)" ); writeln!(output, "{{"); writeln!(output, "\tConn = InConn;"); @@ -3422,7 +3712,7 @@ fn generate_client_implementation( writeln!(output); writeln!( output, - "void USubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx)" + "void U{module_prefix}SubscriptionHandle::ForwardOnApplied(const FSubscriptionEventContextBase& BaseCtx)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnAppliedDelegate.IsBound())"); @@ -3434,7 +3724,7 @@ fn generate_client_implementation( writeln!(output); writeln!( output, - "void USubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx)" + "void U{module_prefix}SubscriptionHandle::ForwardOnError(const FErrorContextBase& BaseCtx)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnErrorDelegate.IsBound())"); @@ -3448,41 +3738,47 @@ fn generate_client_implementation( writeln!(output, "// Cast from parent to child class"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithUri(const FString& InUri)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithUri(const FString& InUri)" ); writeln!(output, "{{"); - writeln!(output, "\treturn Cast(WithUriBase(InUri));"); + writeln!( + output, + "\treturn Cast(WithUriBase(InUri));" + ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithDatabaseName(const FString& InName)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithDatabaseName(const FString& InName)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(WithDatabaseNameBase(InName));" + "\treturn Cast(WithDatabaseNameBase(InName));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithToken(const FString& InToken)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithToken(const FString& InToken)" ); writeln!(output, "{{"); - writeln!(output, "\treturn Cast(WithTokenBase(InToken));"); + writeln!( + output, + "\treturn Cast(WithTokenBase(InToken));" + ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::WithCompression(const ESpacetimeDBCompression& InCompression)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(WithCompressionBase(InCompression));" + "\treturn Cast(WithCompressionBase(InCompression));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnConnect(FOnConnectDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnConnect(F{module_prefix}OnConnectDelegate Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnConnectDelegateInternal = Callback;"); @@ -3490,25 +3786,31 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnConnectError(FOnConnectErrorDelegate Callback)" ); writeln!(output, "{{"); writeln!( output, - "\treturn Cast(OnConnectErrorBase(Callback));" + "\treturn Cast(OnConnectErrorBase(Callback));" ); writeln!(output, "}}"); writeln!( output, - "UDbConnectionBuilder* UDbConnectionBuilder::OnDisconnect(FOnDisconnectDelegate Callback)" + "U{module_prefix}DbConnectionBuilder* U{module_prefix}DbConnectionBuilder::OnDisconnect(F{module_prefix}OnDisconnectDelegate Callback)" ); writeln!(output, "{{"); writeln!(output, "\tOnDisconnectDelegateInternal = Callback;"); writeln!(output, "\treturn this;"); writeln!(output, "}}"); - writeln!(output, "UDbConnection* UDbConnectionBuilder::Build()"); + writeln!( + output, + "U{module_prefix}DbConnection* U{module_prefix}DbConnectionBuilder::Build()" + ); writeln!(output, "{{"); - writeln!(output, "\tUDbConnection* Connection = NewObject();"); + writeln!( + output, + "\tU{module_prefix}DbConnection* Connection = NewObject();" + ); writeln!(output); writeln!(output, "\t// Store delegates on the connection for later use"); writeln!(output, "\tConnection->OnConnectDelegate = OnConnectDelegateInternal;"); @@ -3534,9 +3836,12 @@ fn generate_client_implementation( writeln!(output, "\tConnection->SetOnDisconnectDelegate(BaseDisconnect);"); writeln!(output, "\tOnDisconnectBase(BaseDisconnect);"); writeln!(output); - writeln!(output, "\treturn Cast(BuildConnection(Connection));"); + writeln!( + output, + "\treturn Cast(BuildConnection(Connection));" + ); writeln!(output, "}}"); - writeln!(output, "void UDbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken)"); + writeln!(output, "void U{module_prefix}DbConnection::ForwardOnConnect(UDbConnectionBase* BaseConnection, FSpacetimeDBIdentity InIdentity, const FString& InToken)"); writeln!(output, "{{"); writeln!(output, "\tif (OnConnectDelegate.IsBound())"); writeln!(output, "\t{{"); @@ -3545,7 +3850,7 @@ fn generate_client_implementation( writeln!(output, "}}"); writeln!( output, - "void UDbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error)" + "void U{module_prefix}DbConnection::ForwardOnDisconnect(UDbConnectionBase* BaseConnection, const FString& Error)" ); writeln!(output, "{{"); writeln!(output, "\tif (OnDisconnectDelegate.IsBound())"); @@ -3558,7 +3863,7 @@ fn generate_client_implementation( writeln!( output, - "void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event)" + "void U{module_prefix}DbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event)" ); writeln!(output, "{{"); @@ -3575,7 +3880,22 @@ fn generate_client_implementation( writeln!(output, " case ESpacetimeDBEventTag::Reducer:"); writeln!(output, " {{"); writeln!(output, " FReducerEvent ReducerEvent = Event.GetAsReducer();"); - writeln!(output, " FReducer Reducer = DecodeReducer(ReducerEvent);"); + writeln!(output, " F{module_prefix}Reducer Reducer;"); + writeln!( + output, + " if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer))" + ); + writeln!(output, " {{"); + writeln!( + output, + " UE_LOG(LogTemp, Warning, TEXT(\"Missing typed reducer for request_id %u while building table-update event context; using UnknownTransaction event\"), ReducerEvent.RequestId);" + ); + writeln!( + output, + " BaseEvent = F{module_name_pascal}Event::UnknownTransaction(FSpacetimeDBUnit());" + ); + writeln!(output, " break;"); + writeln!(output, " }}"); writeln!( output, " BaseEvent = F{module_name_pascal}Event::Reducer(Reducer);" @@ -3609,6 +3929,14 @@ fn generate_client_implementation( writeln!(output, " break;"); writeln!(output); + writeln!(output, " case ESpacetimeDBEventTag::Transaction:"); + writeln!( + output, + " BaseEvent = F{module_name_pascal}Event::Transaction(Event.GetAsTransaction());" + ); + writeln!(output, " break;"); + writeln!(output); + writeln!(output, " case ESpacetimeDBEventTag::SubscribeError:"); writeln!( output, @@ -3631,7 +3959,7 @@ fn generate_client_implementation( writeln!(output); // Wrap in EventContext - writeln!(output, " FEventContext Context(this, BaseEvent);"); + writeln!(output, " F{module_prefix}EventContext Context(this, BaseEvent);"); writeln!( output, " // Populate typed reducer args for convenience in table handlers" @@ -3648,15 +3976,16 @@ fn generate_remote_reducer_calls( output: &mut UnrealCppAutogen, module: &ModuleDef, visibility: CodegenVisibility, + module_prefix: &str, module_name: &str, ) { // Reducer implementations for reducer in iter_reducers(module, visibility) { - let reducer_pascal = reducer.name.deref().to_case(Case::Pascal); + let reducer_pascal = format!("{module_prefix}{}", reducer.name.deref().to_case(Case::Pascal)); let reducer_snake = reducer.name.deref(); // Call method implementation - write!(output, "void URemoteReducers::{reducer_pascal}("); + write!(output, "void U{module_prefix}RemoteReducers::{reducer_pascal}("); let mut first = true; for (param_name, param_type) in &reducer.params_for_generate.elements { if !first { @@ -3664,9 +3993,9 @@ fn generate_remote_reducer_calls( } first = false; // Use Blueprint-compatible types (same as UFUNCTION and delegates) - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); if should_pass_by_value_in_delegate(module, param_type) { - // Primitives use const by-value in URemoteReducers methods (same as UFUNCTION) + // Primitives use const by-value in U{module_prefix}RemoteReducers methods (same as UFUNCTION) write!( output, "const {} {}", @@ -3696,15 +4025,17 @@ fn generate_remote_reducer_calls( writeln!(output); // Call reducer using typed helper to hide serialization if reducer.params_for_generate.elements.is_empty() { + writeln!(output, "\tF{reducer_pascal}Args ReducerArgs;"); writeln!( output, - "\tConn->CallReducerTyped(TEXT(\"{reducer_snake}\"), F{reducer_pascal}Args(), SetCallReducerFlags);" + "\tconst uint32 RequestId = Conn->CallReducerTyped(TEXT(\"{reducer_snake}\"), ReducerArgs);" ); - } else { - write!( + writeln!( output, - "\tConn->CallReducerTyped(TEXT(\"{reducer_snake}\"), F{reducer_pascal}Args(" + "\tif (RequestId != 0) {{ Conn->RegisterPendingTypedReducer(RequestId, F{module_prefix}Reducer::{reducer_pascal}(ReducerArgs)); }}" ); + } else { + write!(output, "\tF{reducer_pascal}Args ReducerArgs("); let mut first = true; for (param_name, _) in &reducer.params_for_generate.elements { if !first { @@ -3714,7 +4045,15 @@ fn generate_remote_reducer_calls( let param_pascal = param_name.deref().to_case(Case::Pascal); write!(output, "{param_pascal}"); } - writeln!(output, "), SetCallReducerFlags);"); + writeln!(output, ");"); + writeln!( + output, + "\tconst uint32 RequestId = Conn->CallReducerTyped(TEXT(\"{reducer_snake}\"), ReducerArgs);" + ); + writeln!( + output, + "\tif (RequestId != 0) {{ Conn->RegisterPendingTypedReducer(RequestId, F{module_prefix}Reducer::{reducer_pascal}(ReducerArgs)); }}" + ); } writeln!(output, "}}"); writeln!(output); @@ -3722,7 +4061,7 @@ fn generate_remote_reducer_calls( // Invoke method implementation write!( output, - "bool URemoteReducers::Invoke{reducer_pascal}(const FReducerEventContext& Context, const U{reducer_pascal}Reducer* Args)" + "bool U{module_prefix}RemoteReducers::Invoke{reducer_pascal}(const F{module_prefix}ReducerEventContext& Context, const U{reducer_pascal}Reducer* Args)" ); writeln!(output); writeln!(output, "{{"); @@ -3774,7 +4113,7 @@ fn generate_remote_reducer_calls( // InvokeWithArgs method implementation (zero allocation version) write!( output, - "bool URemoteReducers::Invoke{reducer_pascal}WithArgs(const FReducerEventContext& Context, const F{reducer_pascal}Args& Args)" + "bool U{module_prefix}RemoteReducers::Invoke{reducer_pascal}WithArgs(const F{module_prefix}ReducerEventContext& Context, const F{reducer_pascal}Args& Args)" ); writeln!(output); writeln!(output, "{{"); @@ -3815,15 +4154,16 @@ fn generate_remote_procedure_calls( output: &mut UnrealCppAutogen, module: &ModuleDef, visibility: CodegenVisibility, + module_prefix: &str, module_name: &str, ) { // Procedure implementations for procedure in iter_procedures(module, visibility) { - let procedure_pascal = procedure.name.deref().to_case(Case::Pascal); + let procedure_pascal = format!("{module_prefix}{}", procedure.name.deref().to_case(Case::Pascal)); let procedure_snake = procedure.name.deref(); // Call method implementation - write!(output, "void URemoteProcedures::{procedure_pascal}("); + write!(output, "void U{module_prefix}RemoteProcedures::{procedure_pascal}("); let mut first = true; for (param_name, param_type) in &procedure.params_for_generate.elements { if !first { @@ -3831,9 +4171,9 @@ fn generate_remote_procedure_calls( } first = false; // Use Blueprint-compatible types (same as UFUNCTION and delegates) - let type_str = cpp_ty_fmt_blueprint_compatible(module, param_type, module_name).to_string(); + let type_str = cpp_ty_fmt_blueprint_compatible(module_prefix, module, param_type, module_name).to_string(); if should_pass_by_value_in_delegate(module, param_type) { - // Primitives use const by-value in URemoteProcedures methods (same as UFUNCTION) + // Primitives use const by-value in U{module_prefix}RemoteProcedures methods (same as UFUNCTION) write!( output, "const {} {}", @@ -3867,7 +4207,7 @@ fn generate_remote_procedure_calls( // Get the actual return type for this procedure let return_type_str = - cpp_ty_fmt_with_module(module, &procedure.return_type_for_generate, module_name).to_string(); + cpp_ty_fmt_with_module(module_prefix, module, &procedure.return_type_for_generate, module_name).to_string(); writeln!(output, " FOnProcedureCompleteDelegate Wrapper;"); writeln!(output, " Wrapper.BindLambda("); @@ -3889,7 +4229,7 @@ fn generate_remote_procedure_calls( writeln!(output, " F{module_name}ProcedureEvent ProcedureEvent = F{module_name}ProcedureEvent(Event.GetAsProcedure());"); writeln!( output, - " FProcedureEventContext Context = FProcedureEventContext(Conn, ProcedureEvent);" + " F{module_prefix}ProcedureEventContext Context = F{module_prefix}ProcedureEventContext(Conn, ProcedureEvent);" ); writeln!(output, " // Fire the user's typed delegate"); writeln!( @@ -3982,6 +4322,7 @@ impl UnrealCppAutogen { // Unified helper function to collect special wrapper types (optionals and results) fn collect_wrapper_types( + module_prefix: &str, module: &ModuleDef, visibility: CodegenVisibility, ) -> (HashSet, HashSet<(String, String)>) { @@ -3990,6 +4331,7 @@ fn collect_wrapper_types( // Helper function to recursively collect from a type fn collect_from_type( + module_prefix: &str, module: &ModuleDef, ty: &AlgebraicTypeUse, optional_types: &mut HashSet, @@ -3998,34 +4340,34 @@ fn collect_wrapper_types( match ty { AlgebraicTypeUse::Option(inner) => { // Generate the optional type name - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); optional_types.insert(optional_name); // Recursively collect from inner type - collect_from_type(module, inner, optional_types, result_types); + collect_from_type(module_prefix, module, inner, optional_types, result_types); } AlgebraicTypeUse::Result { ok_ty, err_ty } => { // Generate the result type name components - let ok_name = get_type_name_for_result(module, ok_ty); - let err_name = get_type_name_for_result(module, err_ty); + let ok_name = get_type_name_for_result(module_prefix, module, ok_ty); + let err_name = get_type_name_for_result(module_prefix, module, err_ty); result_types.insert((ok_name, err_name)); // Recursively collect from both inner types - collect_from_type(module, ok_ty, optional_types, result_types); - collect_from_type(module, err_ty, optional_types, result_types); + collect_from_type(module_prefix, module, ok_ty, optional_types, result_types); + collect_from_type(module_prefix, module, err_ty, optional_types, result_types); } AlgebraicTypeUse::Array(elem) => { - collect_from_type(module, elem, optional_types, result_types); + collect_from_type(module_prefix, module, elem, optional_types, result_types); } AlgebraicTypeUse::Ref(r) => { // Check if the referenced type contains optionals or results match &module.typespace_for_generate()[*r] { AlgebraicTypeDef::Product(product) => { for (_, field_ty) in &product.elements { - collect_from_type(module, field_ty, optional_types, result_types); + collect_from_type(module_prefix, module, field_ty, optional_types, result_types); } } AlgebraicTypeDef::Sum(sum) => { for (_, variant_ty) in &sum.variants { - collect_from_type(module, variant_ty, optional_types, result_types); + collect_from_type(module_prefix, module, variant_ty, optional_types, result_types); } } _ => {} @@ -4039,7 +4381,7 @@ fn collect_wrapper_types( for (_, _, product_type_ref) in iter_table_names_and_types(module, visibility) { let product_type = module.typespace_for_generate()[product_type_ref].as_product().unwrap(); for (_, field_ty) in &product_type.elements { - collect_from_type(module, field_ty, &mut optional_types, &mut result_types); + collect_from_type(module_prefix, module, field_ty, &mut optional_types, &mut result_types); } } @@ -4048,12 +4390,18 @@ fn collect_wrapper_types( match &module.typespace_for_generate()[typ.ty] { AlgebraicTypeDef::Product(product) => { for (_, field_ty) in &product.elements { - collect_from_type(module, field_ty, &mut optional_types, &mut result_types); + collect_from_type(module_prefix, module, field_ty, &mut optional_types, &mut result_types); } } AlgebraicTypeDef::Sum(sum) => { for (_, variant_ty) in &sum.variants { - collect_from_type(module, variant_ty, &mut optional_types, &mut result_types); + collect_from_type( + module_prefix, + module, + variant_ty, + &mut optional_types, + &mut result_types, + ); } } _ => {} @@ -4063,16 +4411,17 @@ fn collect_wrapper_types( // Collect from reducer parameters for reducer in iter_reducers(module, visibility) { for (_, param_ty) in &reducer.params_for_generate.elements { - collect_from_type(module, param_ty, &mut optional_types, &mut result_types); + collect_from_type(module_prefix, module, param_ty, &mut optional_types, &mut result_types); } } // Collect from procedure parameters and return types for procedure in iter_procedures(module, visibility) { for (_, param_ty) in &procedure.params_for_generate.elements { - collect_from_type(module, param_ty, &mut optional_types, &mut result_types); + collect_from_type(module_prefix, module, param_ty, &mut optional_types, &mut result_types); } collect_from_type( + module_prefix, module, &procedure.return_type_for_generate, &mut optional_types, @@ -4138,7 +4487,7 @@ fn get_cpp_type_for_array_element(elem_type_str: &str, module: &ModuleDef, modul } // Helper function to get array element type name for optional array types -fn get_array_element_type_name(module: &ModuleDef, elem: &AlgebraicTypeUse) -> String { +fn get_array_element_type_name(module_prefix: &str, module: &ModuleDef, elem: &AlgebraicTypeUse) -> String { match elem { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => "Bool".to_string(), @@ -4164,21 +4513,21 @@ fn get_array_element_type_name(module: &ModuleDef, elem: &AlgebraicTypeUse) -> S AlgebraicTypeUse::TimeDuration => "TimeDuration".to_string(), AlgebraicTypeUse::Uuid => "Uuid".to_string(), AlgebraicTypeUse::ScheduleAt => "ScheduleAt".to_string(), - AlgebraicTypeUse::Ref(r) => type_ref_name(module, *r), + AlgebraicTypeUse::Ref(r) => type_ref_name(module_prefix, module, *r), AlgebraicTypeUse::Option(nested_inner) => { // Handle optional elements in arrays like Vec> - get_optional_type_name(module, nested_inner) + get_optional_type_name(module_prefix, module, nested_inner) } AlgebraicTypeUse::Result { ok_ty, err_ty } => { // Handle result elements in arrays like Vec> - get_result_type_name(module, ok_ty, err_ty) + get_result_type_name(module_prefix, module, ok_ty, err_ty) } _ => "Unknown".to_string(), } } // Get the name for an optional type (e.g., "OptionalString", "OptionalInt32") -fn get_optional_type_name(module: &ModuleDef, inner: &AlgebraicTypeUse) -> String { +fn get_optional_type_name(module_prefix: &str, module: &ModuleDef, inner: &AlgebraicTypeUse) -> String { match inner { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => "OptionalBool".to_string(), @@ -4206,20 +4555,20 @@ fn get_optional_type_name(module: &ModuleDef, inner: &AlgebraicTypeUse) -> Strin AlgebraicTypeUse::ScheduleAt => "OptionalScheduleAt".to_string(), AlgebraicTypeUse::Array(elem) => { // Generate specific optional array types based on element type - let elem_name = get_array_element_type_name(module, elem); + let elem_name = get_array_element_type_name(module_prefix, module, elem); format!("OptionalVec{elem_name}") } AlgebraicTypeUse::Ref(r) => { - let type_name = type_ref_name(module, *r); + let type_name = type_ref_name(module_prefix, module, *r); format!("Optional{type_name}") } AlgebraicTypeUse::Option(nested_inner) => { // Handle nested optionals like Option> - let inner_optional_name = get_optional_type_name(module, nested_inner); + let inner_optional_name = get_optional_type_name(module_prefix, module, nested_inner); format!("Optional{inner_optional_name}") } AlgebraicTypeUse::Result { ok_ty, err_ty } => { - let result_name = get_result_type_name(module, ok_ty, err_ty); + let result_name = get_result_type_name(module_prefix, module, ok_ty, err_ty); format!("Optional{result_name}") } _ => "OptionalUnknown".to_string(), @@ -4417,7 +4766,7 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s "// NOTE: {cpp_inner_type} field not exposed to Blueprint due to non-blueprintable elements" ); } - writeln!(output, "{cpp_inner_type} Value;"); + writeln!(output, "{cpp_inner_type} Value = {{}};"); writeln!(output); // Constructors @@ -4490,14 +4839,19 @@ fn generate_optional_type(optional_name: &str, module: &ModuleDef, api_macro: &s } // Get the name for a result type (e.g., "ResultStringString", "ResultInt32String") -fn get_result_type_name(module: &ModuleDef, ok_ty: &AlgebraicTypeUse, err_ty: &AlgebraicTypeUse) -> String { - let ok_name = get_type_name_for_result(module, ok_ty); - let err_name = get_type_name_for_result(module, err_ty); +fn get_result_type_name( + module_prefix: &str, + module: &ModuleDef, + ok_ty: &AlgebraicTypeUse, + err_ty: &AlgebraicTypeUse, +) -> String { + let ok_name = get_type_name_for_result(module_prefix, module, ok_ty); + let err_name = get_type_name_for_result(module_prefix, module, err_ty); format!("Result{ok_name}{err_name}") } // Helper function to get the type name component for result types -fn get_type_name_for_result(module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { +fn get_type_name_for_result(module_prefix: &str, module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { match ty { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => "Bool".to_string(), @@ -4526,18 +4880,18 @@ fn get_type_name_for_result(module: &ModuleDef, ty: &AlgebraicTypeUse) -> String AlgebraicTypeUse::Unit => "Unit".to_string(), AlgebraicTypeUse::Array(elem) => { // Generate specific array types based on element type - let elem_name = get_array_element_type_name(module, elem); + let elem_name = get_array_element_type_name(module_prefix, module, elem); format!("Vec{elem_name}") } - AlgebraicTypeUse::Ref(r) => type_ref_name(module, *r), + AlgebraicTypeUse::Ref(r) => type_ref_name(module_prefix, module, *r), AlgebraicTypeUse::Option(inner) => { // Handle optional types like Option - let inner_name = get_type_name_for_result(module, inner); + let inner_name = get_type_name_for_result(module_prefix, module, inner); format!("Optional{inner_name}") } AlgebraicTypeUse::Result { ok_ty, err_ty } => { // Handle nested results like Result, bool> - get_result_type_name(module, ok_ty, err_ty) + get_result_type_name(module_prefix, module, ok_ty, err_ty) } AlgebraicTypeUse::Never => "Never".to_string(), } @@ -4594,7 +4948,7 @@ fn generate_result_type( "// NOTE: {cpp_ok_type} field not exposed to Blueprint due to non-blueprintable type" ); } - writeln!(output, "{cpp_ok_type} OkValue;"); + writeln!(output, "{cpp_ok_type} OkValue = {{}};"); writeln!(output); // The err value @@ -4607,7 +4961,7 @@ fn generate_result_type( "// NOTE: {cpp_err_type} field not exposed to Blueprint due to non-blueprintable type" ); } - writeln!(output, "{cpp_err_type} ErrValue;"); + writeln!(output, "{cpp_err_type} ErrValue = {{}};"); writeln!(output); // Constructors @@ -4737,6 +5091,7 @@ fn generate_result_type( } fn autogen_cpp_struct( + module_prefix: &str, module: &ModuleDef, name: &str, // Changed to &str product_type: &ProductTypeDef, @@ -4746,7 +5101,7 @@ fn autogen_cpp_struct( let mut headers = HashSet::::new(); for (_, field_ty) in product_type { - collect_includes_for_type(module, field_ty, &mut headers, module_name); + collect_includes_for_type(module_prefix, module, field_ty, &mut headers, module_name); } // Convert to `Vec<&str>` so UnrealCppAutogen::new works @@ -4766,8 +5121,8 @@ fn autogen_cpp_struct( for (orig_name, ty) in product_type.into_iter() { let field_name = orig_name.deref().to_case(Case::Pascal); - let ty_str = cpp_ty_fmt_with_module(module, ty, module_name).to_string(); - let init_str = cpp_ty_init_fmt_impl(module, ty); + let ty_str = cpp_ty_fmt_with_module(module_prefix, module, ty, module_name).to_string(); + let init_str = cpp_ty_init_fmt_impl(module_prefix, module, ty); let field_decl = format!("{ty_str} {field_name}{init_str}"); // Check if the type is blueprintable @@ -5048,6 +5403,7 @@ fn autogen_cpp_enum(name: &str, enum_type: &PlainEnumTypeDef) -> String { } fn autogen_cpp_sum( + module_prefix: &str, module: &ModuleDef, name: &str, sum_type: &SumTypeDef, @@ -5061,7 +5417,7 @@ fn autogen_cpp_sum( /* ------------------------------------------------------------------ */ let mut includes = HashSet::::new(); for (_, alg_ty) in &sum_type.variants { - collect_includes_for_type(module, alg_ty, &mut includes, module_name); + collect_includes_for_type(module_prefix, module, alg_ty, &mut includes, module_name); } includes.insert("Kismet/BlueprintFunctionLibrary.h".to_string()); @@ -5085,7 +5441,7 @@ fn autogen_cpp_sum( let comma = if ix + 1 == sum_type.variants.len() { "" } else { "," }; writeln!(output, " {}{}", variant.to_case(Case::Pascal), comma); - let variant_cpp_type = cpp_ty_fmt_with_module(module, _variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, _variant_type, module_name).to_string(); variant_type.insert(variant_cpp_type); } writeln!(output, "}};\n"); @@ -5121,7 +5477,7 @@ fn autogen_cpp_sum( /* 4a. Static factories per variant -------------------------------- */ for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); let param_type = format!("const {variant_cpp_type}& "); writeln!(output, " static F{name}Type {pas}({param_type}Value)\n {{"); @@ -5138,7 +5494,7 @@ fn autogen_cpp_sum( /* 4b. Get/Is helpers ---------------------------------------------- */ for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); // Is* writeln!( @@ -5258,7 +5614,7 @@ fn autogen_cpp_sum( let variant_count = sum_type.variants.len(); for (idx, (variant_name, variant_type)) in sum_type.variants.iter().enumerate() { let variant_pascal = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); if idx < variant_count - 1 { writeln!(output, " {variant_pascal}, {variant_cpp_type},"); @@ -5282,7 +5638,7 @@ fn autogen_cpp_sum( for (variant_name, variant_type) in &sum_type.variants { let pas = variant_name.to_case(Case::Pascal); - let variant_cpp_type = cpp_ty_fmt_with_module(module, variant_type, module_name).to_string(); + let variant_cpp_type = cpp_ty_fmt_with_module(module_prefix, module, variant_type, module_name).to_string(); // ctor functions if is_blueprintable(module, variant_type) { @@ -5355,40 +5711,44 @@ impl IdentifierCasing for Identifier { } fn cpp_ty_fmt_with_module<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { - cpp_ty_fmt_impl(module, ty, module_name) + cpp_ty_fmt_impl(module_prefix, module, ty, module_name) } fn cpp_ty_fmt_blueprint_compatible<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { - cpp_ty_fmt_blueprint_impl(module, ty, module_name) + cpp_ty_fmt_blueprint_impl(module_prefix, module, ty, module_name) } fn cpp_ty_fmt_blueprint_impl<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, ) -> impl fmt::Display + 'a { fmt_fn(move |f| match ty { AlgebraicTypeUse::Array(elem) => { - let elem_type = cpp_ty_fmt_with_module(module, elem, module_name).to_string(); + let elem_type = cpp_ty_fmt_with_module(module_prefix, module, elem, module_name).to_string(); write!(f, "TArray<{elem_type}>") } // For all other types, use the regular implementation _ => { - let display_obj = cpp_ty_fmt_with_module(module, ty, module_name); + let display_obj = cpp_ty_fmt_with_module(module_prefix, module, ty, module_name); write!(f, "{display_obj}") } }) } fn cpp_ty_fmt_impl<'a>( + module_prefix: &'a str, module: &'a ModuleDef, ty: &'a AlgebraicTypeUse, module_name: &'a str, @@ -5418,7 +5778,7 @@ fn cpp_ty_fmt_impl<'a>( } AlgebraicTypeUse::Array(elem) => { - let elem_type = cpp_ty_fmt_impl(module, elem, module_name).to_string(); + let elem_type = cpp_ty_fmt_impl(module_prefix, module, elem, module_name).to_string(); write!(f, "TArray<{elem_type}>") } @@ -5433,7 +5793,7 @@ fn cpp_ty_fmt_impl<'a>( // --------- references to user-defined types --------- AlgebraicTypeUse::Ref(r) => { - let scoped = type_ref_name(module, *r); // PascalCase + let scoped = type_ref_name(module_prefix, module, *r); // PascalCase match &module.typespace_for_generate()[*r] { AlgebraicTypeDef::PlainEnum(_) => write!(f, "E{scoped}Type"), // enum → EFooType AlgebraicTypeDef::Product(_) => write!(f, "F{scoped}Type"), // struct/record → FFooType @@ -5443,7 +5803,7 @@ fn cpp_ty_fmt_impl<'a>( // Options use the generated optional types AlgebraicTypeUse::Option(inner) => { - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); if module_name.is_empty() { write!(f, "F{optional_name}") } else { @@ -5454,8 +5814,8 @@ fn cpp_ty_fmt_impl<'a>( // Result use the generated result types AlgebraicTypeUse::Result { ok_ty, err_ty } => { - let ok_name = get_type_name_for_result(module, ok_ty); - let err_name = get_type_name_for_result(module, err_ty); + let ok_name = get_type_name_for_result(module_prefix, module, ok_ty); + let err_name = get_type_name_for_result(module_prefix, module, err_ty); let module_name_pascal = module_name.to_case(Case::Pascal); write!(f, "F{module_name_pascal}Result{ok_name}{err_name}") @@ -5470,7 +5830,7 @@ fn cpp_ty_fmt_impl<'a>( // otherwise the engine logs "property not initialized properly" errors. // This includes primitives (bool defaults to true if not initialized to false), // and enum types (must be initialized to a valid enum value). -fn cpp_ty_init_fmt_impl(module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { +fn cpp_ty_init_fmt_impl(module_prefix: &str, module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { match ty { AlgebraicTypeUse::Primitive(p) => match p { PrimitiveType::Bool => " = false".to_string(), @@ -5504,7 +5864,7 @@ fn cpp_ty_init_fmt_impl(module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { // Use the first variant as the default value. match &module.typespace_for_generate()[*r] { AlgebraicTypeDef::PlainEnum(plain_enum) => { - let type_name = type_ref_name(module, *r); + let type_name = type_ref_name(module_prefix, module, *r); if let Some(first_variant) = plain_enum.variants.first() { let variant_name = first_variant.deref().to_case(Case::Pascal); format!(" = E{type_name}Type::{variant_name}") @@ -5527,34 +5887,43 @@ fn cpp_ty_init_fmt_impl(module: &ModuleDef, ty: &AlgebraicTypeUse) -> String { // Given an `AlgebraicTypeUse`, add every referenced type’s generated // header name (`".g.h"`) into `out` (a `HashSet` avoids dups). -fn collect_includes_for_type(module: &ModuleDef, ty: &AlgebraicTypeUse, out: &mut HashSet, module_name: &str) { +fn collect_includes_for_type( + module_prefix: &str, + module: &ModuleDef, + ty: &AlgebraicTypeUse, + out: &mut HashSet, + module_name: &str, +) { use AlgebraicTypeUse::*; match ty { Ref(r) => { - let header = format!("ModuleBindings/Types/{}Type.g.h", type_ref_name(module, *r)); + let header = format!( + "ModuleBindings/Types/{}Type.g.h", + type_ref_name(module_prefix, module, *r) + ); out.insert(header); } Option(inner) => { // Add the optional type header - let optional_name = get_optional_type_name(module, inner); + let optional_name = get_optional_type_name(module_prefix, module, inner); let module_name_pascal = module_name.to_case(Case::Pascal); let header = format!("ModuleBindings/Optionals/{module_name_pascal}{optional_name}.g.h"); out.insert(header); // Also collect includes for the inner type - collect_includes_for_type(module, inner, out, module_name); + collect_includes_for_type(module_prefix, module, inner, out, module_name); } Result { ok_ty, err_ty } => { // Add the result type header - let result_name = get_result_type_name(module, ok_ty, err_ty); + let result_name = get_result_type_name(module_prefix, module, ok_ty, err_ty); let module_name_pascal = module_name.to_case(Case::Pascal); let header = format!("ModuleBindings/Results/{module_name_pascal}{result_name}.g.h"); out.insert(header); // Also collect includes for the ok and err types - collect_includes_for_type(module, ok_ty, out, module_name); - collect_includes_for_type(module, err_ty, out, module_name); + collect_includes_for_type(module_prefix, module, ok_ty, out, module_name); + collect_includes_for_type(module_prefix, module, err_ty, out, module_name); } Array(inner) => { - collect_includes_for_type(module, inner, out, module_name); + collect_includes_for_type(module_prefix, module, inner, out, module_name); } // Builtin types that require Builtins.h (also includes LargeIntegers.h) Identity | ConnectionId | Timestamp | TimeDuration | ScheduleAt | Uuid => { @@ -5585,11 +5954,134 @@ fn collect_includes_for_type(module: &ModuleDef, ty: &AlgebraicTypeUse, out: &mu } // UnrealCPP-specific type reference name function that preserves original case -fn type_ref_name(module: &ModuleDef, typeref: spacetimedb_lib::sats::AlgebraicTypeRef) -> String { +fn type_ref_name(module_prefix: &str, module: &ModuleDef, typeref: spacetimedb_lib::sats::AlgebraicTypeRef) -> String { let (name, _def) = module.type_def_from_ref(typeref).unwrap(); // Preserve original case instead of applying Pascal case conversion - name.name_segments() + let base_name = name + .name_segments() .last() .map(|id| id.deref().to_string()) - .unwrap_or_else(|| "Unnamed".to_string()) + .unwrap_or_else(|| "Unnamed".to_string()); + format!("{module_prefix}{base_name}") +} + +fn ensure_module_in_uproject(uproject_dir: &Path, module_name: &str) -> Result<(), String> { + let uproject_file = std::fs::read_dir(uproject_dir) + .map_err(|e| format!("Failed to read Unreal project directory '{}': {e}", uproject_dir.display()))? + .filter_map(|entry| entry.ok()) + .find(|entry| { + entry + .path() + .extension() + .and_then(|ext| ext.to_str()) + .map(|ext| ext == "uproject") + .unwrap_or(false) + }) + .ok_or_else(|| { + format!( + "No .uproject file found in '{}'. Unreal code generation requires a project directory containing a .uproject file.", + uproject_dir.display() + ) + })?; + + let uproject_path = uproject_file.path(); + let content = std::fs::read_to_string(&uproject_path) + .map_err(|e| format!("Failed to read .uproject file '{}': {e}", uproject_path.display()))?; + + let mut json: serde_json::Value = serde_json::from_str(&content) + .map_err(|e| format!("Invalid JSON in .uproject file '{}': {e}", uproject_path.display()))?; + + if !json.is_object() { + return Err(format!( + "Invalid .uproject file '{}': top-level JSON must be an object.", + uproject_path.display() + )); + } + + let json_obj = json + .as_object_mut() + .expect("validated object .uproject JSON should have an object map"); + + if !json_obj.contains_key("Modules") { + json_obj.insert("Modules".to_string(), serde_json::Value::Array(vec![])); + } + + let modules = json_obj + .get_mut("Modules") + .and_then(|m| m.as_array_mut()) + .ok_or_else(|| { + format!( + "Invalid .uproject file '{}': 'Modules' must be an array.", + uproject_path.display() + ) + })?; + + let module_exists = modules.iter().any(|module| { + module + .get("Name") + .and_then(|name| name.as_str()) + .map(|name| name == module_name) + .unwrap_or(false) + }); + + if !module_exists { + modules.push(serde_json::json!({ + "Name": module_name, + "Type": "Runtime", + "LoadingPhase": "Default" + })); + + let formatted_json = serde_json::to_string_pretty(&json) + .map_err(|e| format!("Failed to serialize .uproject file '{}': {e}", uproject_path.display()))?; + + std::fs::write(&uproject_path, formatted_json) + .map_err(|e| format!("Failed to write .uproject file '{}': {e}", uproject_path.display()))?; + } + + Ok(()) +} + +fn generate_build_cs_content(module_name: &str) -> String { + format!( + r#"using UnrealBuildTool; + +public class {module_name} : ModuleRules +{{ + public {module_name}(ReadOnlyTargetRules Target) : base(Target) + {{ + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] {{ + "Core", + "CoreUObject", + "Engine", + "SpacetimeDbSdk" + }}); + + PrivateDependencyModuleNames.AddRange(new string[] {{ + }}); + }} +}} +"#, + module_name = module_name + ) +} + +fn generate_module_cpp_content(module_name: &str) -> String { + format!( + r#"#include "{module_name}.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, {module_name}, "{module_name}"); +"#, + module_name = module_name + ) +} + +fn generate_module_h_content(_module_name: &str) -> String { + r#"#pragma once + +#include "CoreMinimal.h" +"# + .to_string() } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/Entity.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/Entity.cpp index 9d307293b52..e74c1321e7d 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/Entity.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/Entity.cpp @@ -49,6 +49,20 @@ void AEntity::ConsumeDespawn(float DeltaTime) } } +void AEntity::StartConsumeDespawn(AEntity* InConsumingEntity) +{ + if (!InConsumingEntity) + { + return; + } + + ConsumingEntity = InConsumingEntity; + bIsDespawning = true; + DespawnElapsed = 0.f; + ConsumeStartPosition = GetActorLocation(); + ConsumeStartScale = GetActorScale3D(); +} + void AEntity::Spawn(int32 InEntityId) { EntityId = InEntityId; @@ -72,39 +86,16 @@ void AEntity::OnEntityUpdated(const FEntityType& NewVal) void AEntity::OnDelete(const FEventContext& Context) { - if (ConsumeDelete(Context)) + if (bIsDespawning) return; Destroy(); } -bool AEntity::ConsumeDelete(const FEventContext& Context) -{ - if (!Context.Event.IsReducer()) - return false; - - const FReducer Reducer = Context.Event.GetAsReducer(); - - if (!Reducer.IsConsumeEntity()) - return false; - - const FConsumeEntityArgs Args = Reducer.GetAsConsumeEntity(); - const int32 ConsumerId = Args.Request.ConsumerEntityId; - ConsumingEntity = AGameManager::Instance->GetEntity(ConsumerId); - if (!ConsumingEntity) - return false; - - bIsDespawning = true; - DespawnElapsed = 0.f; - ConsumeStartPosition = GetActorLocation(); - ConsumeStartScale = GetActorScale3D(); - return true; -} - void AEntity::SetColor(const FLinearColor& Color) const { if (UPaperSpriteComponent* SpriteComponent = FindComponentByClass()) { SpriteComponent->SetSpriteColor(Color); } -} \ No newline at end of file +} diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/GameManager.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/GameManager.cpp index 4579401dadd..4ddab00c278 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/GameManager.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/GameManager.cpp @@ -7,6 +7,7 @@ #include "Connection/Credentials.h" #include "ModuleBindings/Tables/CircleTable.g.h" #include "ModuleBindings/Tables/ConfigTable.g.h" +#include "ModuleBindings/Tables/ConsumeEntityEventTable.g.h" #include "ModuleBindings/Tables/EntityTable.g.h" #include "ModuleBindings/Tables/FoodTable.g.h" #include "ModuleBindings/Tables/PlayerTable.g.h" @@ -103,6 +104,7 @@ void AGameManager::HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Ide LocalIdentity = Identity; Conn->Db->Circle->OnInsert.AddDynamic(this, &AGameManager::OnCircleInsert); + Conn->Db->ConsumeEntityEvent->OnInsert.AddDynamic(this, &AGameManager::OnConsumeEntityEventInsert); Conn->Db->Entity->OnUpdate.AddDynamic(this, &AGameManager::OnEntityUpdate); Conn->Db->Entity->OnDelete.AddDynamic(this, &AGameManager::OnEntityDelete); Conn->Db->Food->OnInsert.AddDynamic(this, &AGameManager::OnFoodInsert); @@ -254,6 +256,18 @@ void AGameManager::OnFoodInsert(const FEventContext& Context, const FFoodType& N SpawnFood(NewRow); } +void AGameManager::OnConsumeEntityEventInsert(const FEventContext& Context, const FConsumeEntityEventType& NewRow) +{ + AEntity* ConsumedEntity = GetEntity(NewRow.ConsumedEntityId); + AEntity* ConsumerEntity = GetEntity(NewRow.ConsumerEntityId); + if (!ConsumedEntity || !ConsumerEntity) + { + return; + } + + ConsumedEntity->StartConsumeDespawn(ConsumerEntity); +} + void AGameManager::OnPlayerInsert(const FEventContext& Context, const FPlayerType& NewRow) { SpawnOrGetPlayer(NewRow); diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/SpacetimeDBClient.g.cpp index 8071a62f7fa..2a5c2f73f72 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -11,52 +11,12 @@ #include "ModuleBindings/Tables/FoodTable.g.h" #include "ModuleBindings/Tables/PlayerTable.g.h" -static FReducer DecodeReducer(const FReducerEvent& Event) -{ - const FString& ReducerName = Event.ReducerCall.ReducerName; - - if (ReducerName == TEXT("enter_game")) - { - FEnterGameArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::EnterGame(Args); - } - - if (ReducerName == TEXT("player_split")) - { - FPlayerSplitArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::PlayerSplit(Args); - } - - if (ReducerName == TEXT("respawn")) - { - FRespawnArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::Respawn(Args); - } - - if (ReducerName == TEXT("suicide")) - { - FSuicideArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::Suicide(Args); - } - - if (ReducerName == TEXT("update_player_input")) - { - FUpdatePlayerInputArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePlayerInput(Args); - } - - return FReducer(); -} - UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - SetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SetReducerFlags")); - Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); Db->Initialize(); Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); - Reducers->SetCallReducerFlags = SetReducerFlags; Reducers->Conn = this; Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); @@ -74,7 +34,6 @@ FContextBase::FContextBase(UDbConnection* InConn) { Db = InConn->Db; Reducers = InConn->Reducers; - SetReducerFlags = InConn->SetReducerFlags; Procedures = InConn->Procedures; Conn = InConn; } @@ -121,27 +80,6 @@ void URemoteTables::Initialize() /**/ } -void USetReducerFlags::EnterGame(ECallReducerFlags Flag) -{ - FlagMap.Add("EnterGame", Flag); -} -void USetReducerFlags::PlayerSplit(ECallReducerFlags Flag) -{ - FlagMap.Add("PlayerSplit", Flag); -} -void USetReducerFlags::Respawn(ECallReducerFlags Flag) -{ - FlagMap.Add("Respawn", Flag); -} -void USetReducerFlags::Suicide(ECallReducerFlags Flag) -{ - FlagMap.Add("Suicide", Flag); -} -void USetReducerFlags::UpdatePlayerInput(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePlayerInput", Flag); -} - void URemoteReducers::EnterGame(const FString& Name) { if (!Conn) @@ -150,7 +88,9 @@ void URemoteReducers::EnterGame(const FString& Name) return; } - Conn->CallReducerTyped(TEXT("enter_game"), FEnterGameArgs(Name), SetCallReducerFlags); + FEnterGameArgs ReducerArgs(Name); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("enter_game"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::EnterGame(ReducerArgs)); } } bool URemoteReducers::InvokeEnterGame(const FReducerEventContext& Context, const UEnterGameReducer* Args) @@ -194,7 +134,9 @@ void URemoteReducers::PlayerSplit() return; } - Conn->CallReducerTyped(TEXT("player_split"), FPlayerSplitArgs(), SetCallReducerFlags); + FPlayerSplitArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("player_split"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::PlayerSplit(ReducerArgs)); } } bool URemoteReducers::InvokePlayerSplit(const FReducerEventContext& Context, const UPlayerSplitReducer* Args) @@ -238,7 +180,9 @@ void URemoteReducers::Respawn() return; } - Conn->CallReducerTyped(TEXT("respawn"), FRespawnArgs(), SetCallReducerFlags); + FRespawnArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("respawn"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::Respawn(ReducerArgs)); } } bool URemoteReducers::InvokeRespawn(const FReducerEventContext& Context, const URespawnReducer* Args) @@ -282,7 +226,9 @@ void URemoteReducers::Suicide() return; } - Conn->CallReducerTyped(TEXT("suicide"), FSuicideArgs(), SetCallReducerFlags); + FSuicideArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("suicide"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::Suicide(ReducerArgs)); } } bool URemoteReducers::InvokeSuicide(const FReducerEventContext& Context, const USuicideReducer* Args) @@ -326,7 +272,9 @@ void URemoteReducers::UpdatePlayerInput(const FDbVector2Type& Direction) return; } - Conn->CallReducerTyped(TEXT("update_player_input"), FUpdatePlayerInputArgs(Direction), SetCallReducerFlags); + FUpdatePlayerInputArgs ReducerArgs(Direction); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_player_input"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePlayerInput(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePlayerInput(const FReducerEventContext& Context, const UUpdatePlayerInputReducer* Args) @@ -397,11 +345,45 @@ void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContex } } +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + void UDbConnection::ReducerEvent(const FReducerEvent& Event) { if (!Reducers) { return; } - FReducer DecodedReducer = DecodeReducer(Event); + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + UE_LOG(LogTemp, Error, TEXT("%s"), *ErrorMessage); + ReducerEventFailed(Event, ErrorMessage); + return; + } FClientUnrealReducerEvent ReducerEvent; ReducerEvent.CallerConnectionId = Event.CallerConnectionId; @@ -413,8 +395,8 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) FReducerEventContext Context(this, ReducerEvent); - // Use hardcoded string matching for reducer dispatching - const FString& ReducerName = Event.ReducerCall.ReducerName; + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; if (ReducerName == TEXT("enter_game")) { @@ -638,7 +620,13 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime case ESpacetimeDBEventTag::Reducer: { FReducerEvent ReducerEvent = Event.GetAsReducer(); - FReducer Reducer = DecodeReducer(ReducerEvent); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + UE_LOG(LogTemp, Warning, TEXT("Missing typed reducer for request_id %u while building table-update event context; using UnknownTransaction event"), ReducerEvent.RequestId); + BaseEvent = FClientUnrealEvent::UnknownTransaction(FSpacetimeDBUnit()); + break; + } BaseEvent = FClientUnrealEvent::Reducer(Reducer); break; } @@ -655,6 +643,10 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime BaseEvent = FClientUnrealEvent::Disconnected(Event.GetAsDisconnected()); break; + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FClientUnrealEvent::Transaction(Event.GetAsTransaction()); + break; + case ESpacetimeDBEventTag::SubscribeError: BaseEvent = FClientUnrealEvent::SubscribeError(Event.GetAsSubscribeError()); break; diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/CircleTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/CircleTable.g.cpp index 975329c06d0..198f20ae88f 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/CircleTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/CircleTable.g.cpp @@ -13,6 +13,24 @@ void UCircleTable::PostInitialize() Data = MakeShared>(); TSharedPtr> CircleTable = Data->GetOrAdd(TableName); + CircleTable->AddUniqueConstraint("entity_id", [](const FCircleType& Row) -> const int32& { + return Row.EntityId; }); + + EntityId = NewObject(this); + EntityId->SetCache(CircleTable); + + // Register a new multi-key B-Tree index named "player_id" on the CircleTable. + CircleTable->AddMultiKeyBTreeIndex>( + TEXT("player_id"), + [](const FCircleType& Row) + { + // This tuple is stored in the B-Tree index for fast composite key lookups. + return MakeTuple(Row.PlayerId); + } + ); + + PlayerId = NewObject(this); + PlayerId->SetCache(CircleTable); /***/ } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConfigTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConfigTable.g.cpp index 6f7a6d774ca..d6523596f27 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConfigTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConfigTable.g.cpp @@ -13,6 +13,11 @@ void UConfigTable::PostInitialize() Data = MakeShared>(); TSharedPtr> ConfigTable = Data->GetOrAdd(TableName); + ConfigTable->AddUniqueConstraint("id", [](const FConfigType& Row) -> const int32& { + return Row.Id; }); + + Id = NewObject(this); + Id->SetCache(ConfigTable); /***/ } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConsumeEntityEventTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConsumeEntityEventTable.g.cpp index 2ab6e4ef260..65a5cac52e0 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConsumeEntityEventTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/ConsumeEntityEventTable.g.cpp @@ -19,7 +19,12 @@ void UConsumeEntityEventTable::PostInitialize() FTableAppliedDiff UConsumeEntityEventTable::Update(TArray> InsertsRef, TArray> DeletesRef) { - FTableAppliedDiff Diff = BaseUpdate(InsertsRef, DeletesRef, Data, TableName); + // Event tables are callback-only: do not persist rows in the local cache. + FTableAppliedDiff Diff; + for (const FWithBsatn& Insert : InsertsRef) + { + Diff.Inserts.Add(Insert.Bsatn, Insert.Row); + } return Diff; } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/EntityTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/EntityTable.g.cpp index 15f46a924ff..33aa332bbf9 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/EntityTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/EntityTable.g.cpp @@ -13,6 +13,11 @@ void UEntityTable::PostInitialize() Data = MakeShared>(); TSharedPtr> EntityTable = Data->GetOrAdd(TableName); + EntityTable->AddUniqueConstraint("entity_id", [](const FEntityType& Row) -> const int32& { + return Row.EntityId; }); + + EntityId = NewObject(this); + EntityId->SetCache(EntityTable); /***/ } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/FoodTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/FoodTable.g.cpp index 12191581ea2..313969e8b47 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/FoodTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/FoodTable.g.cpp @@ -13,6 +13,11 @@ void UFoodTable::PostInitialize() Data = MakeShared>(); TSharedPtr> FoodTable = Data->GetOrAdd(TableName); + FoodTable->AddUniqueConstraint("entity_id", [](const FFoodType& Row) -> const int32& { + return Row.EntityId; }); + + EntityId = NewObject(this); + EntityId->SetCache(FoodTable); /***/ } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/PlayerTable.g.cpp b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/PlayerTable.g.cpp index 9c2a69f9bda..f8c52f4d4e6 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/PlayerTable.g.cpp +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Private/ModuleBindings/Tables/PlayerTable.g.cpp @@ -13,6 +13,16 @@ void UPlayerTable::PostInitialize() Data = MakeShared>(); TSharedPtr> PlayerTable = Data->GetOrAdd(TableName); + PlayerTable->AddUniqueConstraint("identity", [](const FPlayerType& Row) -> const FSpacetimeDBIdentity& { + return Row.Identity; }); + PlayerTable->AddUniqueConstraint("player_id", [](const FPlayerType& Row) -> const int32& { + return Row.PlayerId; }); + + Identity = NewObject(this); + Identity->SetCache(PlayerTable); + + PlayerId = NewObject(this); + PlayerId->SetCache(PlayerTable); /***/ } diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/Entity.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/Entity.h index 11016809f31..3a1c051f75a 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/Entity.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/Entity.h @@ -32,11 +32,11 @@ class CLIENT_UNREAL_API AEntity : public AActor int32 EntityId = 0; virtual void Tick(float DeltaTime) override; void ConsumeDespawn(float DeltaTime); + void StartConsumeDespawn(AEntity* InConsumingEntity); void Spawn(int32 InEntityId); virtual void OnEntityUpdated(const FEntityType& NewVal); virtual void OnDelete(const FEventContext& Context); - bool ConsumeDelete(const FEventContext& Context); void SetColor(const FLinearColor& Color) const; diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/GameManager.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/GameManager.h index 939319b3ce1..7adcfdc89fb 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/GameManager.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/GameManager.h @@ -122,5 +122,7 @@ class CLIENT_UNREAL_API AGameManager : public AActor void OnPlayerInsert(const FEventContext& Context, const FPlayerType& NewRow); UFUNCTION() void OnPlayerDelete(const FEventContext& Context, const FPlayerType& RemovedRow); + UFUNCTION() + void OnConsumeEntityEventInsert(const FEventContext& Context, const FConsumeEntityEventType& NewRow); /* Data Bindings */ }; diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/SpacetimeDBClient.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/SpacetimeDBClient.g.h index decf7040e1a..6f33c10da54 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 2.0.0 (commit 6a6b5a6616f0578aa641bc0689691f953b13feb8). +// This was generated using spacetimedb cli version 2.0.1 (commit a953d3b65c4a925b3b3824c419eb53821db95e2f). #pragma once #include "CoreMinimal.h" @@ -9,7 +9,6 @@ #include "Connection/Callback.h" #include "Connection/DbConnectionBase.h" #include "Connection/DbConnectionBuilder.h" -#include "Connection/SetReducerFlags.h" #include "Connection/Subscription.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "ModuleBindings/ReducerBase.g.h" @@ -61,7 +60,7 @@ struct CLIENT_UNREAL_API FContextBase { GENERATED_BODY() - FContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {}; + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; FContextBase(UDbConnection* InConn); UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") @@ -70,9 +69,6 @@ struct CLIENT_UNREAL_API FContextBase UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteProcedures* Procedures; @@ -100,9 +96,6 @@ class CLIENT_UNREAL_API UContextBaseBpLib : public UBlueprintFunctionLibrary UFUNCTION(BlueprintPure, Category="SpacetimeDB") static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } - UFUNCTION(BlueprintPure, Category="SpacetimeDB") - static USetReducerFlags* GetSetReducerFlags(const FContextBase& Ctx) { return Ctx.SetReducerFlags; } - static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } UFUNCTION(BlueprintPure, Category="SpacetimeDB") @@ -437,6 +430,14 @@ struct CLIENT_UNREAL_API FClientUnrealEvent return Obj; } + static FClientUnrealEvent Transaction(const FSpacetimeDBUnit& Value) + { + FClientUnrealEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + static FClientUnrealEvent SubscribeError(const FString& Value) { FClientUnrealEvent Obj; @@ -481,6 +482,13 @@ struct CLIENT_UNREAL_API FClientUnrealEvent return MessageData.Get(); } + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } FORCEINLINE FString GetAsSubscribeError() const { @@ -504,6 +512,7 @@ struct CLIENT_UNREAL_API FClientUnrealEvent case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); default: return false; @@ -546,6 +555,12 @@ class CLIENT_UNREAL_API UClientUnrealEventBpLib : public UBlueprintFunctionLibra return FClientUnrealEvent::Disconnected(InValue); } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientUnrealEvent") + static FClientUnrealEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FClientUnrealEvent::Transaction(InValue); + } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientUnrealEvent") static FClientUnrealEvent SubscribeError(const FString& InValue) { @@ -570,6 +585,9 @@ class CLIENT_UNREAL_API UClientUnrealEventBpLib : public UBlueprintFunctionLibra UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientUnrealEvent") static bool IsDisconnected(const FClientUnrealEvent& Event) { return Event.IsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientUnrealEvent") + static bool IsTransaction(const FClientUnrealEvent& Event) { return Event.IsTransaction(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientUnrealEvent") static bool IsSubscribeError(const FClientUnrealEvent& Event) { return Event.IsSubscribeError(); } @@ -600,6 +618,12 @@ class CLIENT_UNREAL_API UClientUnrealEventBpLib : public UBlueprintFunctionLibra return Event.GetAsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientUnrealEvent") + static FSpacetimeDBUnit GetAsTransaction(const FClientUnrealEvent& Event) + { + return Event.GetAsTransaction(); + } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientUnrealEvent") static FString GetAsSubscribeError(const FClientUnrealEvent& Event) { @@ -682,25 +706,6 @@ DECLARE_DYNAMIC_DELEGATE_OneParam( FOnSubscriptionError, FErrorContext, Context); -UCLASS(BlueprintType) -class CLIENT_UNREAL_API USetReducerFlags : public USetReducerFlagsBase -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void EnterGame(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void PlayerSplit(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void Respawn(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void Suicide(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePlayerInput(ECallReducerFlags Flag); - -}; - // RemoteTables class UCLASS(BlueprintType) class CLIENT_UNREAL_API URemoteTables : public UObject @@ -815,9 +820,6 @@ class CLIENT_UNREAL_API URemoteReducers : public UObject UPROPERTY() class UDbConnection* Conn; - - UPROPERTY() - USetReducerFlags* SetCallReducerFlags; }; // RemoteProcedures class @@ -952,9 +954,6 @@ class CLIENT_UNREAL_API UDbConnection : public UDbConnectionBase UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteProcedures* Procedures; @@ -1006,5 +1005,15 @@ class CLIENT_UNREAL_API UDbConnection : public UDbConnectionBase virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; // Override the procedure event failed handler virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; }; diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/CircleTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/CircleTable.g.h index 8f8b8cbea06..e92587259a2 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/CircleTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/CircleTable.g.h @@ -12,12 +12,89 @@ #include "DBCache/TableCache.h" #include "CircleTable.g.generated.h" +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UCircleEntityIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> EntityIdIndexHelper; + +public: + UCircleEntityIdUniqueIndex() + // Initialize the helper with the specific unique index name + : EntityIdIndexHelper("entity_id") { + } + + /** + * Finds a Circle by their unique entityid. + * @param Key The entityid to search for. + * @return The found FCircleType, or a default-constructed FCircleType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|CircleIndex") + FCircleType Find(int32 Key) + { + // Simply delegate the call to the internal helper + return EntityIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InCircleCache) + { + EntityIdIndexHelper.Cache = InCircleCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class UCirclePlayerIdIndex : public UObject +{ + GENERATED_BODY() + +public: + TArray Filter(const int32& PlayerId) const + { + TArray OutResults; + + LocalCache->FindByMultiKeyBTreeIndex>( + OutResults, + TEXT("player_id"), + MakeTuple(PlayerId) + ); + + return OutResults; + } + + void SetCache(TSharedPtr> InCache) + { + LocalCache = InCache; + } + +private: + UFUNCTION(BlueprintCallable) + void FilterPlayerId(TArray& OutResults, const int32& PlayerId) + { + OutResults = Filter(PlayerId); + } + + TSharedPtr> LocalCache; +}; + UCLASS(BlueprintType) class CLIENT_UNREAL_API UCircleTable : public URemoteTable { GENERATED_BODY() public: + UPROPERTY(BlueprintReadOnly) + UCircleEntityIdUniqueIndex* EntityId; + + UPROPERTY(BlueprintReadOnly) + UCirclePlayerIdIndex* PlayerId; + void PostInitialize(); /** Update function for circle table*/ diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConfigTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConfigTable.g.h index 93a6903f6a4..57d5532ba38 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConfigTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConfigTable.g.h @@ -12,12 +12,52 @@ #include "DBCache/TableCache.h" #include "ConfigTable.g.generated.h" +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UConfigIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdIndexHelper; + +public: + UConfigIdUniqueIndex() + // Initialize the helper with the specific unique index name + : IdIndexHelper("id") { + } + + /** + * Finds a Config by their unique id. + * @param Key The id to search for. + * @return The found FConfigType, or a default-constructed FConfigType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ConfigIndex") + FConfigType Find(int32 Key) + { + // Simply delegate the call to the internal helper + return IdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InConfigCache) + { + IdIndexHelper.Cache = InConfigCache; + } +}; +/***/ + UCLASS(BlueprintType) class CLIENT_UNREAL_API UConfigTable : public URemoteTable { GENERATED_BODY() public: + UPROPERTY(BlueprintReadOnly) + UConfigIdUniqueIndex* Id; + void PostInitialize(); /** Update function for config table*/ diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConsumeEntityEventTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConsumeEntityEventTable.g.h index 210bedcaca8..82b2ff1b858 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConsumeEntityEventTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/ConsumeEntityEventTable.g.h @@ -37,26 +37,9 @@ class CLIENT_UNREAL_API UConsumeEntityEventTable : public URemoteTable const FEventContext&, Context, const FConsumeEntityEventType&, NewRow); - DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams( - FOnConsumeEntityEventUpdate, - const FEventContext&, Context, - const FConsumeEntityEventType&, OldRow, - const FConsumeEntityEventType&, NewRow); - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( - FOnConsumeEntityEventDelete, - const FEventContext&, Context, - const FConsumeEntityEventType&, DeletedRow); - UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") FOnConsumeEntityEventInsert OnInsert; - UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") - FOnConsumeEntityEventUpdate OnUpdate; - - UPROPERTY(BlueprintAssignable, Category = "SpacetimeDB Events") - FOnConsumeEntityEventDelete OnDelete; - private: const FString TableName = TEXT("consume_entity_event"); diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/EntityTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/EntityTable.g.h index 21c60473f17..ac3dd913121 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/EntityTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/EntityTable.g.h @@ -12,12 +12,52 @@ #include "DBCache/TableCache.h" #include "EntityTable.g.generated.h" +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UEntityEntityIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> EntityIdIndexHelper; + +public: + UEntityEntityIdUniqueIndex() + // Initialize the helper with the specific unique index name + : EntityIdIndexHelper("entity_id") { + } + + /** + * Finds a Entity by their unique entityid. + * @param Key The entityid to search for. + * @return The found FEntityType, or a default-constructed FEntityType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|EntityIndex") + FEntityType Find(int32 Key) + { + // Simply delegate the call to the internal helper + return EntityIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InEntityCache) + { + EntityIdIndexHelper.Cache = InEntityCache; + } +}; +/***/ + UCLASS(BlueprintType) class CLIENT_UNREAL_API UEntityTable : public URemoteTable { GENERATED_BODY() public: + UPROPERTY(BlueprintReadOnly) + UEntityEntityIdUniqueIndex* EntityId; + void PostInitialize(); /** Update function for entity table*/ diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/FoodTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/FoodTable.g.h index 87ebfb95e9b..5f3e0013a82 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/FoodTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/FoodTable.g.h @@ -12,12 +12,52 @@ #include "DBCache/TableCache.h" #include "FoodTable.g.generated.h" +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UFoodEntityIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> EntityIdIndexHelper; + +public: + UFoodEntityIdUniqueIndex() + // Initialize the helper with the specific unique index name + : EntityIdIndexHelper("entity_id") { + } + + /** + * Finds a Food by their unique entityid. + * @param Key The entityid to search for. + * @return The found FFoodType, or a default-constructed FFoodType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|FoodIndex") + FFoodType Find(int32 Key) + { + // Simply delegate the call to the internal helper + return EntityIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InFoodCache) + { + EntityIdIndexHelper.Cache = InFoodCache; + } +}; +/***/ + UCLASS(BlueprintType) class CLIENT_UNREAL_API UFoodTable : public URemoteTable { GENERATED_BODY() public: + UPROPERTY(BlueprintReadOnly) + UFoodEntityIdUniqueIndex* EntityId; + void PostInitialize(); /** Update function for food table*/ diff --git a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/PlayerTable.g.h b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/PlayerTable.g.h index af4f729e441..fd13ef2a07a 100644 --- a/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/PlayerTable.g.h +++ b/demo/Blackholio/client-unreal/Source/client_unreal/Public/ModuleBindings/Tables/PlayerTable.g.h @@ -12,12 +12,92 @@ #include "DBCache/TableCache.h" #include "PlayerTable.g.generated.h" +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UPlayerIdentityUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> IdentityIndexHelper; + +public: + UPlayerIdentityUniqueIndex() + // Initialize the helper with the specific unique index name + : IdentityIndexHelper("identity") { + } + + /** + * Finds a Player by their unique identity. + * @param Key The identity to search for. + * @return The found FPlayerType, or a default-constructed FPlayerType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|PlayerIndex") + FPlayerType Find(FSpacetimeDBIdentity Key) + { + // Simply delegate the call to the internal helper + return IdentityIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InPlayerCache) + { + IdentityIndexHelper.Cache = InPlayerCache; + } +}; +/***/ + +UCLASS(Blueprintable) +class CLIENT_UNREAL_API UPlayerPlayerIdUniqueIndex : public UObject +{ + GENERATED_BODY() + +private: + // Declare an instance of your templated helper. + // It's private because the UObject wrapper will expose its functionality. + FUniqueIndexHelper> PlayerIdIndexHelper; + +public: + UPlayerPlayerIdUniqueIndex() + // Initialize the helper with the specific unique index name + : PlayerIdIndexHelper("player_id") { + } + + /** + * Finds a Player by their unique playerid. + * @param Key The playerid to search for. + * @return The found FPlayerType, or a default-constructed FPlayerType if not found. + */ + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|PlayerIndex") + FPlayerType Find(int32 Key) + { + // Simply delegate the call to the internal helper + return PlayerIdIndexHelper.FindUniqueIndex(Key); + } + + // A public setter to provide the cache to the helper after construction + // This is a common pattern when the cache might be created or provided by another system. + void SetCache(TSharedPtr> InPlayerCache) + { + PlayerIdIndexHelper.Cache = InPlayerCache; + } +}; +/***/ + UCLASS(BlueprintType) class CLIENT_UNREAL_API UPlayerTable : public URemoteTable { GENERATED_BODY() public: + UPROPERTY(BlueprintReadOnly) + UPlayerIdentityUniqueIndex* Identity; + + UPROPERTY(BlueprintReadOnly) + UPlayerPlayerIdUniqueIndex* PlayerId; + void PostInitialize(); /** Update function for player table*/ diff --git a/docs/docs/00300-resources/00200-reference/00100-cli-reference/00100-cli-reference.md b/docs/docs/00300-resources/00200-reference/00100-cli-reference/00100-cli-reference.md index cde29f9e372..2f5f2295d17 100644 --- a/docs/docs/00300-resources/00200-reference/00100-cli-reference/00100-cli-reference.md +++ b/docs/docs/00300-resources/00200-reference/00100-cli-reference/00100-cli-reference.md @@ -316,6 +316,7 @@ Run `spacetime help generate` for more detailed information. Default value: `SpacetimeDB.Types` * `--unreal-module-name ` — The module name that should be used for DLL export macros (required for lang unrealcpp) +* `--module-prefix ` — The module prefix to use for generated types (only used with --lang unrealcpp) * `-l`, `--lang ` — The language to generate Possible values: `csharp`, `typescript`, `rust`, `unrealcpp` diff --git a/sdks/unreal/DEVELOP.md b/sdks/unreal/DEVELOP.md index ceb414e35cf..8fd9925fafe 100644 --- a/sdks/unreal/DEVELOP.md +++ b/sdks/unreal/DEVELOP.md @@ -1,14 +1,52 @@ # Notes for maintainers -The directory `sdk-unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings` is generated from [the SpacetimeDB client-api-messages](https://github.com/clockworklabs/SpacetimeDB/tree/master/crates/client-api-messages). -This is not automated. -Whenever the `client-api-messages` crate changes, you'll have to manually re-generate the definitions. -See that crate's DEVELOP.md for how to do this. - -**⚠️ IMPORTANT:** The following files/folders needs to be deleted everytime we re-generate: -- `crates/sdk-unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/ModuleBindings` -- `crates/sdk-unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/ReducerBase.g.h` -- `crates/sdk-unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/SpacetimeDBClient.g.h` +The generated Unreal bindings under: + +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings` +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/ModuleBindings` + +come from SpacetimeDB codegen (`--lang unrealcpp`) and websocket schema definitions in `crates/client-api-messages`. + +This is not automated; regenerate manually whenever websocket message schemas or Unreal codegen behavior changes. + +## WS v2 websocket schema regeneration workflow + +Run from repo root: + +```powershell +# 1) Produce WS v2 schema JSON from canonical source +cargo run -p spacetimedb-client-api-messages --example get_ws_schema_v2 > crates/client-api-messages/ws_schema_v2.json + +# 2) Regenerate Unreal bindings from WS v2 schema +cargo run -p spacetimedb-cli -- generate --lang unrealcpp ` + --module-def crates/client-api-messages/ws_schema_v2.json ` + --uproject-dir sdks/unreal/src/SpacetimeDbSdk ` + --unreal-module-name SpacetimeDbSdk ` + --yes +``` + +## Cleanup before regeneration + +Delete these generated paths before rerunning generation when schema/model changes are significant: + +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/ModuleBindings` +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/ReducerBase.g.h` +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/SpacetimeDBClient.g.h` +- `sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/ModuleBindings/SpacetimeDBClient.g.cpp` + +This avoids UnrealHeaderTool duplicate symbol/header conflicts with the `sdks/unreal/tests/TestClient` generated module bindings. + +## Fast validation loop + +For rapid iteration, run a single Unreal harness test instead of the full suite: + +```powershell +cargo test -p sdk-unreal-test-harness --test test insert_primitive -- --nocapture +``` + +Prerequisite: + +- `UE_ROOT_PATH` must point to the Unreal Engine install root (for example `C:/Program Files/Epic Games/UE_5.6`). # How to use AdditionalPluginDirectories diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ChatClientActor.cpp b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ChatClientActor.cpp index d564d0d51bc..d57ea035022 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ChatClientActor.cpp +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ChatClientActor.cpp @@ -90,11 +90,9 @@ void AChatClientActor::RegisterCallbacks() // Conn->Db->Message->OnDelete.RemoveAll(this); // UNBIND_DELEGATE_SAFE(Conn->Db->Message->OnDelete, this, AChatClientActor, OnMessageDelete); - // Opt in to receive the reducer result and any table updates - Conn->SetReducerFlags->SendMessage(ECallReducerFlags::FullUpdate); + // Bind reducer callbacks. Conn->Reducers->OnSendMessage.AddDynamic(this, &AChatClientActor::OnReducerOnSendMessage); - Conn->SetReducerFlags->SetName(ECallReducerFlags::FullUpdate); Conn->Reducers->OnSetName.AddDynamic(this, &AChatClientActor::OnReducerOnSetName); // Hook error delegate for any reducers without explicit bindings diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ModuleBindings/SpacetimeDBClient.g.cpp index e5884473df4..0b792c07051 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -4,60 +4,29 @@ #include "ModuleBindings/SpacetimeDBClient.g.h" #include "DBCache/WithBsatn.h" #include "BSATN/UEBSATNHelpers.h" -#include "ModuleBindings/Tables/UserTable.g.h" #include "ModuleBindings/Tables/MessageTable.g.h" - -static FReducer DecodeReducer(const FReducerEvent& Event) -{ - const FString& ReducerName = Event.ReducerCall.ReducerName; - - if (ReducerName == TEXT("ClientConnected")) - { - FClientConnectedArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::ClientConnected(Args); - } - - if (ReducerName == TEXT("ClientDisconnected")) - { - FClientDisconnectedArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::ClientDisconnected(Args); - } - - if (ReducerName == TEXT("SendMessage")) - { - FSendMessageArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::SendMessage(Args); - } - - if (ReducerName == TEXT("SetName")) - { - FSetNameArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::SetName(Args); - } - - return FReducer(); -} +#include "ModuleBindings/Tables/UserTable.g.h" UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - SetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SetReducerFlags")); - Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); Db->Initialize(); Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); - Reducers->SetCallReducerFlags = SetReducerFlags; Reducers->Conn = this; - RegisterTable(TEXT("user"), Db->User); + Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); + Procedures->Conn = this; + RegisterTable(TEXT("message"), Db->Message); + RegisterTable(TEXT("user"), Db->User); } FContextBase::FContextBase(UDbConnection* InConn) { Db = InConn->Db; Reducers = InConn->Reducers; - SetReducerFlags = InConn->SetReducerFlags; + Procedures = InConn->Procedures; Conn = InConn; } bool FContextBase::IsActive() const @@ -85,34 +54,17 @@ void URemoteTables::Initialize() { /** Creating tables */ - User = NewObject(this); Message = NewObject(this); + User = NewObject(this); /**/ /** Initialization */ - User->PostInitialize(); Message->PostInitialize(); + User->PostInitialize(); /**/ } -void USetReducerFlags::ClientConnected(ECallReducerFlags Flag) -{ - FlagMap.Add("ClientConnected", Flag); -} -void USetReducerFlags::ClientDisconnected(ECallReducerFlags Flag) -{ - FlagMap.Add("ClientDisconnected", Flag); -} -void USetReducerFlags::SendMessage(ECallReducerFlags Flag) -{ - FlagMap.Add("SendMessage", Flag); -} -void USetReducerFlags::SetName(ECallReducerFlags Flag) -{ - FlagMap.Add("SetName", Flag); -} - -void URemoteReducers::ClientConnected() +void URemoteReducers::SendMessage(const FString& Text) { if (!Conn) { @@ -120,57 +72,45 @@ void URemoteReducers::ClientConnected() return; } - Conn->CallReducerTyped(TEXT("ClientConnected"), FClientConnectedArgs(), SetCallReducerFlags); + FSendMessageArgs ReducerArgs(Text); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("send_message"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::SendMessage(ReducerArgs)); } } -bool URemoteReducers::InvokeClientConnected(const FReducerEventContext& Context, const UClientConnectedReducer* Args) +bool URemoteReducers::InvokeSendMessage(const FReducerEventContext& Context, const USendMessageReducer* Args) { - if (!OnClientConnected.IsBound()) + if (!OnSendMessage.IsBound()) { // Handle unhandled reducer error if (InternalOnUnhandledReducerError.IsBound()) { // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases // For now, just broadcast any error - InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for ClientConnected")); + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for SendMessage")); } return false; } - OnClientConnected.Broadcast(Context); + OnSendMessage.Broadcast(Context, Args->Text); return true; } -void URemoteReducers::ClientDisconnected() -{ - if (!Conn) - { - UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); - return; - } - - Conn->CallReducerTyped(TEXT("ClientDisconnected"), FClientDisconnectedArgs(), SetCallReducerFlags); -} - -bool URemoteReducers::InvokeClientDisconnected(const FReducerEventContext& Context, const UClientDisconnectedReducer* Args) +bool URemoteReducers::InvokeSendMessageWithArgs(const FReducerEventContext& Context, const FSendMessageArgs& Args) { - if (!OnClientDisconnected.IsBound()) + if (!OnSendMessage.IsBound()) { - // Handle unhandled reducer error if (InternalOnUnhandledReducerError.IsBound()) { - // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases - // For now, just broadcast any error - InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for ClientDisconnected")); + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for SendMessage")); } return false; } - OnClientDisconnected.Broadcast(Context); + OnSendMessage.Broadcast(Context, Args.Text); return true; } -void URemoteReducers::SendMessage(const FString& Text) +void URemoteReducers::SetName(const FString& Name) { if (!Conn) { @@ -178,53 +118,41 @@ void URemoteReducers::SendMessage(const FString& Text) return; } - Conn->CallReducerTyped(TEXT("SendMessage"), FSendMessageArgs(Text), SetCallReducerFlags); + FSetNameArgs ReducerArgs(Name); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("set_name"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::SetName(ReducerArgs)); } } -bool URemoteReducers::InvokeSendMessage(const FReducerEventContext& Context, const USendMessageReducer* Args) +bool URemoteReducers::InvokeSetName(const FReducerEventContext& Context, const USetNameReducer* Args) { - if (!OnSendMessage.IsBound()) + if (!OnSetName.IsBound()) { // Handle unhandled reducer error if (InternalOnUnhandledReducerError.IsBound()) { // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases // For now, just broadcast any error - InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for SendMessage")); + InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for SetName")); } return false; } - OnSendMessage.Broadcast(Context, Args->Text); + OnSetName.Broadcast(Context, Args->Name); return true; } -void URemoteReducers::SetName(const FString& Name) -{ - if (!Conn) - { - UE_LOG(LogTemp, Error, TEXT("SpacetimeDB connection is null")); - return; - } - - Conn->CallReducerTyped(TEXT("SetName"), FSetNameArgs(Name), SetCallReducerFlags); -} - -bool URemoteReducers::InvokeSetName(const FReducerEventContext& Context, const USetNameReducer* Args) +bool URemoteReducers::InvokeSetNameWithArgs(const FReducerEventContext& Context, const FSetNameArgs& Args) { if (!OnSetName.IsBound()) { - // Handle unhandled reducer error if (InternalOnUnhandledReducerError.IsBound()) { - // TODO: Check Context.Event.Status for Failed/OutOfEnergy cases - // For now, just broadcast any error InternalOnUnhandledReducerError.Broadcast(Context, TEXT("No handler registered for SetName")); } return false; } - OnSetName.Broadcast(Context, Args->Name); + OnSetName.Broadcast(Context, Args.Name); return true; } @@ -237,6 +165,12 @@ void UDbConnection::PostInitProperties() { Reducers->InternalOnUnhandledReducerError.AddDynamic(this, &UDbConnection::OnUnhandledReducerErrorHandler); } + + // Connect OnUnhandledProcedureError to Procedures.InternalOnUnhandledProcedureError + if (Procedures) + { + Procedures->InternalOnUnhandledProcedureError.AddDynamic(this, &UDbConnection::OnUnhandledProcedureErrorHandler); + } } UFUNCTION() @@ -248,11 +182,54 @@ void UDbConnection::OnUnhandledReducerErrorHandler(const FReducerEventContext& C } } +UFUNCTION() +void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error) +{ + if (OnUnhandledProcedureError.IsBound()) + { + OnUnhandledProcedureError.Broadcast(Context, Error); + } +} + +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + void UDbConnection::ReducerEvent(const FReducerEvent& Event) { if (!Reducers) { return; } - FReducer DecodedReducer = DecodeReducer(Event); + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + UE_LOG(LogTemp, Error, TEXT("%s"), *ErrorMessage); + ReducerEventFailed(Event, ErrorMessage); + return; + } FQuickstartChatReducerEvent ReducerEvent; ReducerEvent.CallerConnectionId = Event.CallerConnectionId; @@ -264,37 +241,19 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) FReducerEventContext Context(this, ReducerEvent); - // Use hardcoded string matching for reducer dispatching - const FString& ReducerName = Event.ReducerCall.ReducerName; + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; - if (ReducerName == TEXT("ClientConnected")) - { - FClientConnectedArgs Args = ReducerEvent.Reducer.GetAsClientConnected(); - UClientConnectedReducer* Reducer = NewObject(); - Reducers->InvokeClientConnected(Context, Reducer); - return; - } - if (ReducerName == TEXT("ClientDisconnected")) - { - FClientDisconnectedArgs Args = ReducerEvent.Reducer.GetAsClientDisconnected(); - UClientDisconnectedReducer* Reducer = NewObject(); - Reducers->InvokeClientDisconnected(Context, Reducer); - return; - } - if (ReducerName == TEXT("SendMessage")) + if (ReducerName == TEXT("send_message")) { FSendMessageArgs Args = ReducerEvent.Reducer.GetAsSendMessage(); - USendMessageReducer* Reducer = NewObject(); - Reducer->Text = Args.Text; - Reducers->InvokeSendMessage(Context, Reducer); + Reducers->InvokeSendMessageWithArgs(Context, Args); return; } - if (ReducerName == TEXT("SetName")) + if (ReducerName == TEXT("set_name")) { FSetNameArgs Args = ReducerEvent.Reducer.GetAsSetName(); - USetNameReducer* Reducer = NewObject(); - Reducer->Name = Args.Name; - Reducers->InvokeSetName(Context, Reducer); + Reducers->InvokeSetNameWithArgs(Context, Args); return; } @@ -320,6 +279,22 @@ void UDbConnection::ReducerEventFailed(const FReducerEvent& Event, const FString } } +void UDbConnection::ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) +{ + if (!Procedures) { return; } + + FQuickstartChatProcedureEvent ProcedureEvent; + ProcedureEvent.Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + ProcedureEvent.Timestamp = Event.Timestamp; + + FProcedureEventContext Context(this, ProcedureEvent); + + if (Procedures->InternalOnUnhandledProcedureError.IsBound()) + { + Procedures->InternalOnUnhandledProcedureError.Broadcast(Context, ErrorMessage); + } +} + UDbConnectionBuilder* UDbConnection::Builder() { return NewObject(); @@ -473,7 +448,13 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime case ESpacetimeDBEventTag::Reducer: { FReducerEvent ReducerEvent = Event.GetAsReducer(); - FReducer Reducer = DecodeReducer(ReducerEvent); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + UE_LOG(LogTemp, Warning, TEXT("Missing typed reducer for request_id %u while building table-update event context; using UnknownTransaction event"), ReducerEvent.RequestId); + BaseEvent = FQuickstartChatEvent::UnknownTransaction(FSpacetimeDBUnit()); + break; + } BaseEvent = FQuickstartChatEvent::Reducer(Reducer); break; } @@ -490,6 +471,10 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime BaseEvent = FQuickstartChatEvent::Disconnected(Event.GetAsDisconnected()); break; + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FQuickstartChatEvent::Transaction(Event.GetAsTransaction()); + break; + case ESpacetimeDBEventTag::SubscribeError: BaseEvent = FQuickstartChatEvent::SubscribeError(Event.GetAsSubscribeError()); break; diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Optionals/QuickstartChatOptionalString.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Optionals/QuickstartChatOptionalString.g.h index 3d9a1d9b368..b16ee691e59 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Optionals/QuickstartChatOptionalString.g.h +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Optionals/QuickstartChatOptionalString.g.h @@ -15,7 +15,7 @@ struct QUICKSTARTCHAT_API FQuickstartChatOptionalString bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FString Value; + FString Value = {}; FQuickstartChatOptionalString() = default; diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientConnected.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientConnected.g.h deleted file mode 100644 index bc97b8e7ee7..00000000000 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientConnected.g.h +++ /dev/null @@ -1,43 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/ReducerBase.g.h" -#include "ClientConnected.g.generated.h" - -// Reducer arguments struct for ClientConnected -USTRUCT(BlueprintType) -struct QUICKSTARTCHAT_API FClientConnectedArgs -{ - GENERATED_BODY() - - FClientConnectedArgs() = default; - - - FORCEINLINE bool operator==(const FClientConnectedArgs& Other) const - { - return true; - } - FORCEINLINE bool operator!=(const FClientConnectedArgs& Other) const - { - return !(*this == Other); - } -}; - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_STRUCT_EMPTY(FClientConnectedArgs); -} - -// Reducer class for internal dispatching -UCLASS(BlueprintType) -class QUICKSTARTCHAT_API UClientConnectedReducer : public UReducerBase -{ - GENERATED_BODY() - -public: -}; - - diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientDisconnected.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientDisconnected.g.h deleted file mode 100644 index 07687d50f03..00000000000 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Reducers/ClientDisconnected.g.h +++ /dev/null @@ -1,43 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/ReducerBase.g.h" -#include "ClientDisconnected.g.generated.h" - -// Reducer arguments struct for ClientDisconnected -USTRUCT(BlueprintType) -struct QUICKSTARTCHAT_API FClientDisconnectedArgs -{ - GENERATED_BODY() - - FClientDisconnectedArgs() = default; - - - FORCEINLINE bool operator==(const FClientDisconnectedArgs& Other) const - { - return true; - } - FORCEINLINE bool operator!=(const FClientDisconnectedArgs& Other) const - { - return !(*this == Other); - } -}; - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_STRUCT_EMPTY(FClientDisconnectedArgs); -} - -// Reducer class for internal dispatching -UCLASS(BlueprintType) -class QUICKSTARTCHAT_API UClientDisconnectedReducer : public UReducerBase -{ - GENERATED_BODY() - -public: -}; - - diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/SpacetimeDBClient.g.h index fa1d8e3eb15..f7a94d243d6 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 1.4.0 (commit dc59211c1453848981aeb2efce2249c9a07947b2). +// This was generated using spacetimedb cli version 2.0.1 (commit 6f8639a69dac2047da00b1fc8550c94ea2505892). #pragma once #include "CoreMinimal.h" @@ -9,12 +9,9 @@ #include "Connection/Callback.h" #include "Connection/DbConnectionBase.h" #include "Connection/DbConnectionBuilder.h" -#include "Connection/SetReducerFlags.h" #include "Connection/Subscription.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "ModuleBindings/ReducerBase.g.h" -#include "ModuleBindings/Reducers/ClientConnected.g.h" -#include "ModuleBindings/Reducers/ClientDisconnected.g.h" #include "ModuleBindings/Reducers/SendMessage.g.h" #include "ModuleBindings/Reducers/SetName.g.h" #include "Types/Builtins.h" @@ -24,6 +21,7 @@ class UDbConnection; class URemoteTables; class URemoteReducers; +class URemoteProcedures; class USubscriptionBuilder; class USubscriptionHandle; @@ -54,7 +52,7 @@ struct QUICKSTARTCHAT_API FContextBase { GENERATED_BODY() - FContextBase() = default; + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; FContextBase(UDbConnection* InConn); UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") @@ -64,7 +62,7 @@ struct QUICKSTARTCHAT_API FContextBase URemoteReducers* Reducers; UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - USetReducerFlags* SetReducerFlags; + URemoteProcedures* Procedures; bool IsActive() const; void Disconnect(); @@ -78,11 +76,27 @@ struct QUICKSTARTCHAT_API FContextBase }; +UCLASS() +class QUICKSTARTCHAT_API UContextBaseBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteTables* GetDb(const FContextBase& Ctx) { return Ctx.Db; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } + + static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } + + UFUNCTION(BlueprintPure, Category="SpacetimeDB") + static bool IsActive(const FContextBase& Ctx) { return Ctx.IsActive(); } +}; + UENUM(BlueprintType, Category = "SpacetimeDB") enum class EReducerTag : uint8 { - ClientConnected, - ClientDisconnected, SendMessage, SetName }; @@ -94,9 +108,9 @@ struct QUICKSTARTCHAT_API FReducer public: UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - EReducerTag Tag; + EReducerTag Tag = static_cast(0); - TVariant Data; + TVariant Data; // Optional metadata UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") @@ -104,44 +118,12 @@ struct QUICKSTARTCHAT_API FReducer uint32 ReducerId = 0; uint32 RequestId = 0; - static FReducer ClientConnected(const FClientConnectedArgs& Value) - { - FReducer Out; - Out.Tag = EReducerTag::ClientConnected; - Out.Data.Set(Value); - Out.ReducerName = TEXT("ClientConnected"); - return Out; - } - - FORCEINLINE bool IsClientConnected() const { return Tag == EReducerTag::ClientConnected; } - FORCEINLINE FClientConnectedArgs GetAsClientConnected() const - { - ensureMsgf(IsClientConnected(), TEXT("Reducer does not hold ClientConnected!")); - return Data.Get(); - } - - static FReducer ClientDisconnected(const FClientDisconnectedArgs& Value) - { - FReducer Out; - Out.Tag = EReducerTag::ClientDisconnected; - Out.Data.Set(Value); - Out.ReducerName = TEXT("ClientDisconnected"); - return Out; - } - - FORCEINLINE bool IsClientDisconnected() const { return Tag == EReducerTag::ClientDisconnected; } - FORCEINLINE FClientDisconnectedArgs GetAsClientDisconnected() const - { - ensureMsgf(IsClientDisconnected(), TEXT("Reducer does not hold ClientDisconnected!")); - return Data.Get(); - } - static FReducer SendMessage(const FSendMessageArgs& Value) { FReducer Out; Out.Tag = EReducerTag::SendMessage; Out.Data.Set(Value); - Out.ReducerName = TEXT("SendMessage"); + Out.ReducerName = TEXT("send_message"); return Out; } @@ -157,7 +139,7 @@ struct QUICKSTARTCHAT_API FReducer FReducer Out; Out.Tag = EReducerTag::SetName; Out.Data.Set(Value); - Out.ReducerName = TEXT("SetName"); + Out.ReducerName = TEXT("set_name"); return Out; } @@ -173,10 +155,6 @@ struct QUICKSTARTCHAT_API FReducer if (Tag != Other.Tag || ReducerId != Other.ReducerId || RequestId != Other.RequestId || ReducerName != Other.ReducerName) return false; switch (Tag) { - case EReducerTag::ClientConnected: - return GetAsClientConnected() == Other.GetAsClientConnected(); - case EReducerTag::ClientDisconnected: - return GetAsClientDisconnected() == Other.GetAsClientDisconnected(); case EReducerTag::SendMessage: return GetAsSendMessage() == Other.GetAsSendMessage(); case EReducerTag::SetName: @@ -194,32 +172,6 @@ class QUICKSTARTCHAT_API UReducerBpLib : public UBlueprintFunctionLibrary private: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") - static FReducer ClientConnected(const FClientConnectedArgs& Value) { - return FReducer::ClientConnected(Value); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") - static bool IsClientConnected(const FReducer& Reducer) { return Reducer.IsClientConnected(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") - static FClientConnectedArgs GetAsClientConnected(const FReducer& Reducer) { - return Reducer.GetAsClientConnected(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") - static FReducer ClientDisconnected(const FClientDisconnectedArgs& Value) { - return FReducer::ClientDisconnected(Value); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") - static bool IsClientDisconnected(const FReducer& Reducer) { return Reducer.IsClientDisconnected(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|Reducer") - static FClientDisconnectedArgs GetAsClientDisconnected(const FReducer& Reducer) { - return Reducer.GetAsClientDisconnected(); - } - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|Reducer") static FReducer SendMessage(const FSendMessageArgs& Value) { return FReducer::SendMessage(Value); @@ -290,6 +242,44 @@ struct QUICKSTARTCHAT_API FQuickstartChatReducerEvent } }; +// No procedures defined in this module. +/** Metadata describing a procedure run. */ +USTRUCT(BlueprintType) +struct QUICKSTARTCHAT_API FQuickstartChatProcedureEvent +{ + GENERATED_BODY() + + /** Timestamp for when the procedure executed */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + /** Result status of the procedure */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBProcedureStatus Status; + + /** Identity that initiated the call */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="SpacetimeDB") + FSpacetimeDBTimeDuration TotalHostExecutionDuration; + + FQuickstartChatProcedureEvent() { + } + FQuickstartChatProcedureEvent(FProcedureEvent Event) { + Timestamp = Event.Timestamp; + Status = FSpacetimeDBProcedureStatus::FromStatus(Event.Status); + TotalHostExecutionDuration = Event.TotalHostExecutionDuration; + } + FORCEINLINE bool operator==(const FQuickstartChatProcedureEvent& Other) const + { + return Status == Other.Status && Timestamp == Other.Timestamp && + TotalHostExecutionDuration == Other.TotalHostExecutionDuration; + } + + FORCEINLINE bool operator!=(const FQuickstartChatProcedureEvent& Other) const + { + return !(*this == Other); + } +}; + /** Represents event with variant message data. */ USTRUCT(BlueprintType) struct QUICKSTARTCHAT_API FQuickstartChatEvent @@ -336,6 +326,14 @@ struct QUICKSTARTCHAT_API FQuickstartChatEvent return Obj; } + static FQuickstartChatEvent Transaction(const FSpacetimeDBUnit& Value) + { + FQuickstartChatEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + static FQuickstartChatEvent SubscribeError(const FString& Value) { FQuickstartChatEvent Obj; @@ -380,6 +378,13 @@ struct QUICKSTARTCHAT_API FQuickstartChatEvent return MessageData.Get(); } + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } FORCEINLINE FString GetAsSubscribeError() const { @@ -403,6 +408,7 @@ struct QUICKSTARTCHAT_API FQuickstartChatEvent case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); default: return false; @@ -445,6 +451,12 @@ class QUICKSTARTCHAT_API UQuickstartChatEventBpLib : public UBlueprintFunctionLi return FQuickstartChatEvent::Disconnected(InValue); } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|QuickstartChatEvent") + static FQuickstartChatEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FQuickstartChatEvent::Transaction(InValue); + } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|QuickstartChatEvent") static FQuickstartChatEvent SubscribeError(const FString& InValue) { @@ -469,6 +481,9 @@ class QUICKSTARTCHAT_API UQuickstartChatEventBpLib : public UBlueprintFunctionLi UFUNCTION(BlueprintPure, Category = "SpacetimeDB|QuickstartChatEvent") static bool IsDisconnected(const FQuickstartChatEvent& Event) { return Event.IsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|QuickstartChatEvent") + static bool IsTransaction(const FQuickstartChatEvent& Event) { return Event.IsTransaction(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|QuickstartChatEvent") static bool IsSubscribeError(const FQuickstartChatEvent& Event) { return Event.IsSubscribeError(); } @@ -499,6 +514,12 @@ class QUICKSTARTCHAT_API UQuickstartChatEventBpLib : public UBlueprintFunctionLi return Event.GetAsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|QuickstartChatEvent") + static FSpacetimeDBUnit GetAsTransaction(const FQuickstartChatEvent& Event) + { + return Event.GetAsTransaction(); + } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|QuickstartChatEvent") static FString GetAsSubscribeError(const FQuickstartChatEvent& Event) { @@ -538,6 +559,18 @@ struct QUICKSTARTCHAT_API FReducerEventContext : public FContextBase FQuickstartChatReducerEvent Event; }; +USTRUCT(BlueprintType) +struct QUICKSTARTCHAT_API FProcedureEventContext : public FContextBase +{ + GENERATED_BODY() + + FProcedureEventContext() = default; + FProcedureEventContext(UDbConnection* InConn, FQuickstartChatProcedureEvent InEvent) : FContextBase(InConn), Event(InEvent) {} + + UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") + FQuickstartChatProcedureEvent Event; +}; + USTRUCT(BlueprintType) struct QUICKSTARTCHAT_API FErrorContext : public FContextBase { @@ -569,23 +602,6 @@ DECLARE_DYNAMIC_DELEGATE_OneParam( FOnSubscriptionError, FErrorContext, Context); -UCLASS(BlueprintType) -class QUICKSTARTCHAT_API USetReducerFlags : public USetReducerFlagsBase -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void ClientConnected(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void ClientDisconnected(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void SendMessage(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void SetName(ECallReducerFlags Flag); - -}; - // RemoteTables class UCLASS(BlueprintType) class QUICKSTARTCHAT_API URemoteTables : public UObject @@ -596,10 +612,10 @@ class QUICKSTARTCHAT_API URemoteTables : public UObject void Initialize(); UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - UUserTable* User; + UMessageTable* Message; UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - UMessageTable* Message; + UUserTable* User; }; @@ -611,30 +627,6 @@ class QUICKSTARTCHAT_API URemoteReducers : public UObject public: - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( - FClientConnectedHandler, - const FReducerEventContext&, Context - ); - UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") - FClientConnectedHandler OnClientConnected; - - UFUNCTION(BlueprintCallable, Category="SpacetimeDB") - void ClientConnected(); - - bool InvokeClientConnected(const FReducerEventContext& Context, const UClientConnectedReducer* Args); - - DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( - FClientDisconnectedHandler, - const FReducerEventContext&, Context - ); - UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") - FClientDisconnectedHandler OnClientDisconnected; - - UFUNCTION(BlueprintCallable, Category="SpacetimeDB") - void ClientDisconnected(); - - bool InvokeClientDisconnected(const FReducerEventContext& Context, const UClientDisconnectedReducer* Args); - DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FSendMessageHandler, const FReducerEventContext&, Context, @@ -647,6 +639,7 @@ class QUICKSTARTCHAT_API URemoteReducers : public UObject void SendMessage(const FString& Text); bool InvokeSendMessage(const FReducerEventContext& Context, const USendMessageReducer* Args); + bool InvokeSendMessageWithArgs(const FReducerEventContext& Context, const FSendMessageArgs& Args); DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FSetNameHandler, @@ -660,6 +653,7 @@ class QUICKSTARTCHAT_API URemoteReducers : public UObject void SetName(const FString& Name); bool InvokeSetName(const FReducerEventContext& Context, const USetNameReducer* Args); + bool InvokeSetNameWithArgs(const FReducerEventContext& Context, const FSetNameArgs& Args); // Internal error handling DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledReducerError, const FReducerEventContext&, Context, const FString&, Error); @@ -671,9 +665,26 @@ class QUICKSTARTCHAT_API URemoteReducers : public UObject UPROPERTY() class UDbConnection* Conn; +}; + +// RemoteProcedures class +UCLASS(BlueprintType) +class QUICKSTARTCHAT_API URemoteProcedures : public UObject +{ + GENERATED_BODY() + +public: + + // Internal error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FInternalOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + FInternalOnUnhandledProcedureError InternalOnUnhandledProcedureError; + +private: + + friend UDbConnection; UPROPERTY() - USetReducerFlags* SetCallReducerFlags; + class UDbConnection* Conn; }; // SubscriptionBuilder class @@ -789,7 +800,7 @@ class QUICKSTARTCHAT_API UDbConnection : public UDbConnectionBase URemoteReducers* Reducers; UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - USetReducerFlags* SetReducerFlags; + URemoteProcedures* Procedures; // Delegates that allow users to bind with the concrete connection type. FOnConnectDelegate OnConnectDelegate; @@ -807,10 +818,15 @@ class QUICKSTARTCHAT_API UDbConnection : public UDbConnectionBase UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") FOnUnhandledReducerError OnUnhandledReducerError; + // Error handling + DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnUnhandledProcedureError, const FProcedureEventContext&, Context, const FString&, Error); + UPROPERTY(BlueprintAssignable, Category="SpacetimeDB") + FOnUnhandledProcedureError OnUnhandledProcedureError; + protected: - // Hook up error handling to reducers + // Hook up error handling to reducers and procedures virtual void PostInitProperties() override; UFUNCTION() @@ -821,6 +837,9 @@ class QUICKSTARTCHAT_API UDbConnection : public UDbConnectionBase UFUNCTION() void OnUnhandledReducerErrorHandler(const FReducerEventContext& Context, const FString& Error); + UFUNCTION() + void OnUnhandledProcedureErrorHandler(const FProcedureEventContext& Context, const FString& Error); + // Override the DbConnectionBase methods to handle updates and events virtual void DbUpdate(const FDatabaseUpdateType& Update, const FSpacetimeDBEvent& Event) override; @@ -829,5 +848,17 @@ class QUICKSTARTCHAT_API UDbConnection : public UDbConnectionBase // Override the reducer event failed handler virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; + // Override the procedure event failed handler + virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; }; diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Tables/UserTable.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Tables/UserTable.g.h index 7e567066cb9..41f03abb5d6 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Tables/UserTable.g.h +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Tables/UserTable.g.h @@ -25,7 +25,7 @@ class QUICKSTARTCHAT_API UUserIdentityUniqueIndex : public UObject public: UUserIdentityUniqueIndex() // Initialize the helper with the specific unique index name - : IdentityIndexHelper("Identity") { + : IdentityIndexHelper("identity") { } /** diff --git a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Types/UserType.g.h b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Types/UserType.g.h index 06890176da4..d5cfb423336 100644 --- a/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Types/UserType.g.h +++ b/sdks/unreal/examples/QuickstartChat/Source/QuickstartChat/Public/ModuleBindings/Types/UserType.g.h @@ -20,7 +20,7 @@ struct QUICKSTARTCHAT_API FUserType FQuickstartChatOptionalString Name; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - bool Online; + bool Online = false; FORCEINLINE bool operator==(const FUserType& Other) const { diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/DbConnectionBase.cpp b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/DbConnectionBase.cpp index f66fd5d1d29..34d878e42cb 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/DbConnectionBase.cpp +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/DbConnectionBase.cpp @@ -1,20 +1,69 @@ #include "Connection/DbConnectionBase.h" #include "Connection/DbConnectionBuilder.h" -#include "Connection/Credentials.h" -#include "Connection/LogCategory.h" -#include "ModuleBindings/Types/ClientMessageType.g.h" -#include "ModuleBindings/Types/SubscribeMultiType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiType.g.h" -#include "ModuleBindings/Types/SubscribeMultiAppliedType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h" -#include "ModuleBindings/Types/SubscriptionErrorType.g.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" -#include "Misc/Compression.h" -#include "Misc/ScopeLock.h" -#include "Async/Async.h" -#include "BSATN/UEBSATNHelpers.h" -#include "Connection/ProcedureFlags.h" +#include "Connection/Credentials.h" +#include "Connection/LogCategory.h" +#include "ModuleBindings/Types/ClientMessageType.g.h" +#include "ModuleBindings/Types/SubscriptionErrorType.g.h" +#include "Misc/Compression.h" +#include "Misc/ScopeLock.h" +#include "Async/Async.h" +#include "BSATN/UEBSATNHelpers.h" +#include "Connection/ProcedureFlags.h" + +namespace +{ +enum class EWsCompressionTag : uint8 +{ + Uncompressed = 0, + Brotli = 1, + Gzip = 2, +}; + +static FDatabaseUpdateType QueryRowsToDatabaseUpdate(const FQueryRowsType& Rows, bool bAsDeletes) +{ + FDatabaseUpdateType Update; + for (const FSingleTableRowsType& TableRows : Rows.Tables) + { + FTableUpdateType TableUpdate; + TableUpdate.TableName = TableRows.Table; + + FPersistentTableRowsType PersistentRows; + if (bAsDeletes) + { + PersistentRows.Deletes = TableRows.Rows; + } + else + { + PersistentRows.Inserts = TableRows.Rows; + } + TableUpdate.Rows.Add(FTableUpdateRowsType::PersistentTable(PersistentRows)); + Update.Tables.Add(TableUpdate); + } + return Update; +} + +static FDatabaseUpdateType TransactionUpdateToDatabaseUpdate(const FTransactionUpdateType& Update) +{ + FDatabaseUpdateType Out; + for (const FQuerySetUpdateType& QuerySet : Update.QuerySets) + { + for (const FTableUpdateType& TableUpdate : QuerySet.Tables) + { + Out.Tables.Add(TableUpdate); + } + } + return Out; +} + +static FString DecodeReducerErrorMessage(const TArray& ErrorBytes) +{ + if (ErrorBytes.Num() == 0) + { + return TEXT("Reducer returned empty error payload"); + } + return UE::SpacetimeDB::Deserialize(ErrorBytes); +} +} UDbConnectionBase::UDbConnectionBase(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) @@ -70,21 +119,48 @@ USubscriptionBuilderBase* UDbConnectionBase::SubscriptionBuilderBase() return NewObject(); } -void UDbConnectionBase::HandleWSError(const FString& Error) -{ - if (OnConnectErrorDelegate.IsBound()) - { - OnConnectErrorDelegate.Execute(Error); - } -} - -void UDbConnectionBase::HandleWSClosed(int32 /*StatusCode*/, const FString& Reason, bool /*bWasClean*/) -{ - if (OnDisconnectBaseDelegate.IsBound()) - { - OnDisconnectBaseDelegate.Execute(this, Reason); - } -} +void UDbConnectionBase::HandleWSError(const FString& Error) +{ + bProtocolViolationHandled = false; + ClearPendingOperations(Error); + if (OnConnectErrorDelegate.IsBound()) + { + OnConnectErrorDelegate.Execute(Error); + } +} + +void UDbConnectionBase::HandleWSClosed(int32 /*StatusCode*/, const FString& Reason, bool /*bWasClean*/) +{ + bProtocolViolationHandled = false; + ClearPendingOperations(Reason); + if (OnDisconnectBaseDelegate.IsBound()) + { + OnDisconnectBaseDelegate.Execute(this, Reason); + } +} + +void UDbConnectionBase::HandleProtocolViolation(const FString& ErrorMessage) +{ + if (bProtocolViolationHandled) + { + return; + } + bProtocolViolationHandled = true; + + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("%s"), *ErrorMessage); + TriggerError(ErrorMessage); + ClearPendingOperations(ErrorMessage); + + // Match Rust/C# behavior: parse/protocol violations are fatal for the connection. + if (WebSocket && WebSocket->IsConnected()) + { + WebSocket->Disconnect(); + } + else if (OnConnectErrorDelegate.IsBound()) + { + OnConnectErrorDelegate.Execute(ErrorMessage); + } +} void UDbConnectionBase::HandleWSBinaryMessage(const TArray& Message) { @@ -99,11 +175,24 @@ void UDbConnectionBase::HandleWSBinaryMessage(const TArray& Message) if (!WeakThis.IsValid()) { return; - } - UDbConnectionBase* This = WeakThis.Get(); - - //parse the message, decompress if needed - FServerMessageType Parsed = This->PreProcessMessage(Message); + } + UDbConnectionBase* This = WeakThis.Get(); + + //parse the message, decompress if needed + FServerMessageType Parsed; + if (!This->PreProcessMessage(Message, Parsed)) + { + AsyncTask(ENamedThreads::GameThread, [WeakThis]() + { + if (!WeakThis.IsValid()) + { + return; + } + UDbConnectionBase* Conn = WeakThis.Get(); + Conn->HandleProtocolViolation(TEXT("Failed to parse/decompress incoming WebSocket message")); + }); + return; + } //queue: re-order buffer TArray Ready; @@ -174,205 +263,207 @@ bool UDbConnectionBase::IsTickableInEditor() const } -void UDbConnectionBase::ProcessServerMessage(const FServerMessageType& Message) -{ - bool bIsValid = false; - switch (Message.Tag) - { - case EServerMessageTag::InitialSubscription: - { - //@Note: This is a legacy tag, used implemented in current server version - break; - } - case EServerMessageTag::TransactionUpdate: - { - // Process a transaction update message - const FTransactionUpdateType Payload = Message.GetAsTransactionUpdate(); - - // Create a status object based on the transaction status - FSpacetimeDBStatus StatusObj; - bool bSuccess = false; - FString ErrorMessage; - if (Payload.Status.IsCommitted()) - { - bSuccess = true; - StatusObj = FSpacetimeDBStatus::Committed(FSpacetimeDBUnit()); - } - else if (Payload.Status.IsFailed()) - { - ErrorMessage = Payload.Status.GetAsFailed(); - StatusObj = FSpacetimeDBStatus::Failed(ErrorMessage); - } - else if (Payload.Status.IsOutOfEnergy()) - { - Payload.Status.GetAsOutOfEnergy(); - StatusObj = FSpacetimeDBStatus::OutOfEnergy(FSpacetimeDBUnit()); - ErrorMessage = TEXT("Out of energy"); - } - - // Process the transaction update and create a reducer event - FReducerEvent RedEvent; - RedEvent.Timestamp = Payload.Timestamp; - RedEvent.Status = StatusObj; - RedEvent.CallerIdentity = Payload.CallerIdentity; - RedEvent.CallerConnectionId = Payload.CallerConnectionId; - RedEvent.EnergyConsumed = Payload.EnergyQuantaUsed; - RedEvent.ReducerCall = Payload.ReducerCall; - - // If the status is committed, we update the database - if (bSuccess) - { - DbUpdate(Payload.Status.GetAsCommitted(), FSpacetimeDBEvent::Reducer(RedEvent)); // Update table and trigger insert/update/delete - ReducerEvent(RedEvent); // Trigger the reducer event - } - else - { - ReducerEvent(RedEvent); // Trigger the reducer event - ReducerEventFailed(RedEvent, ErrorMessage); - } - break; - } - case EServerMessageTag::TransactionUpdateLight: - { - // Process a light transaction update message - const FTransactionUpdateLightType Payload = Message.GetAsTransactionUpdateLight(); - - //@TODO: Implement light update fully - DbUpdate(Payload.Update, FSpacetimeDBEvent::UnknownTransaction(FSpacetimeDBUnit())); - - break; - } - case EServerMessageTag::IdentityToken: - { - // Process an identity token message - const FIdentityTokenType Payload = Message.GetAsIdentityToken(); - - Token = Payload.Token; - UCredentials::SaveToken(Token); - Identity = Payload.Identity; - bIsIdentitySet = true; - UE_LOG(LogSpacetimeDb_Connection, Verbose, TEXT("IdentityToken: Identity set to: %s"), *Identity.ToHex()); - ConnectionId = Payload.ConnectionId; - if (OnConnectBaseDelegate.IsBound()) - { - OnConnectBaseDelegate.Execute(this, Identity, Token); - } - break; - } - case EServerMessageTag::OneOffQueryResponse: - { - //@Note: Not implemented in Rust version, skip for now here aswell - break; - } - case EServerMessageTag::SubscribeApplied: - { - //@Note: This is a legacy tag, not implemented in current server version - break; - } - case EServerMessageTag::UnsubscribeApplied: - { - //@Note: This is a legacy tag, not implemented in current server version - break; - } - case EServerMessageTag::SubscriptionError: - { - // Process a subscription error message - const FSubscriptionErrorType Payload = Message.GetAsSubscriptionError(); - if (TObjectPtr Handle = *ActiveSubscriptions.Find(Payload.QueryId.Value)) - { - if (!Handle) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("SubscriptionError: Null handle for QueryId %u. Error: %s"), - Payload.QueryId.Value, - *Payload.Error); - return; - } - FErrorContextBase Ctx; Ctx.Error = Payload.Error; - Handle->TriggerError(Ctx); - ActiveSubscriptions.Remove(Payload.QueryId.Value); - } - break; - } - case EServerMessageTag::SubscribeMultiApplied: - { - // Process a multi-subscription applied message - const FSubscribeMultiAppliedType Payload = Message.GetAsSubscribeMultiApplied(); - // Update the database with the subscription applied event - DbUpdate(Payload.Update, FSpacetimeDBEvent::SubscribeApplied(FSpacetimeDBUnit())); - - if (TObjectPtr Handle = *ActiveSubscriptions.Find(Payload.QueryId.Id)) - { - if (!Handle) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("SubscriptionError: Null handle for QueryId %u."), Payload.QueryId.Id); - return; - } - FSubscriptionEventContextBase Ctx; Ctx.Event = FSpacetimeDBEvent::SubscribeApplied(FSpacetimeDBUnit()); - Handle->TriggerApplied(Ctx); - } - - break; - } - case EServerMessageTag::UnsubscribeMultiApplied: - { - // Process a multi-unsubscription applied message - const FUnsubscribeMultiAppliedType Payload = Message.GetAsUnsubscribeMultiApplied(); - - // Update the database with the unsubscription applied event - DbUpdate(Payload.Update, FSpacetimeDBEvent::UnsubscribeApplied(FSpacetimeDBUnit())); - if (TObjectPtr Handle = *ActiveSubscriptions.Find(Payload.QueryId.Id)) - { - if (!Handle) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("UnsubscribeMultiApplied: Null handle for QueryId %u."), Payload.QueryId.Id); - return; - } - Handle->bEnded = true; - Handle->bActive = false; - Handle->bUnsubscribeCalled = true; - FSubscriptionEventContextBase Ctx; Ctx.Event = FSpacetimeDBEvent::UnsubscribeApplied(FSpacetimeDBUnit()); - if (Handle->EndDelegate.IsBound()) - { - Handle->EndDelegate.Execute(Ctx); - } - ActiveSubscriptions.Remove(Payload.QueryId.Id); - } - break; - } - case EServerMessageTag::ProcedureResult: - { - const FProcedureResultType Payload = Message.GetAsProcedureResult(); - FProcedureEvent ProcEvent; - ProcEvent.Status = Payload.Status; - ProcEvent.Timestamp = Payload.Timestamp; - ProcEvent.TotalHostExecutionDuration = Payload.TotalHostExecutionDuration; - ProcEvent.Success = ProcEvent.Status.IsReturned(); - TArray PayloadData; - FString ErrorMessage = ""; - if (ProcEvent.Success) - PayloadData = ProcEvent.Status.GetAsReturned(); - if (Payload.Status.IsOutOfEnergy()) - { - ErrorMessage = TEXT("Out of energy"); - } - else if (Payload.Status.IsInternalError()) - { - ErrorMessage = Payload.Status.GetAsInternalError(); - } - - ProcedureCallbacks->ResolveCallback(Payload.RequestId, FSpacetimeDBEvent::Procedure(ProcEvent), PayloadData, ProcEvent.Success); - if (!ProcEvent.Success) - { - ProcedureEventFailed(ProcEvent, ErrorMessage); - } - break; - } - default: - // Unknown tag - bail out - UE_LOG(LogSpacetimeDb_Connection, Warning, TEXT("Unknown server-message tag")); - break; - } -} +void UDbConnectionBase::ProcessServerMessage(const FServerMessageType& Message) +{ + switch (Message.Tag) + { + case EServerMessageTag::InitialConnection: + { + const FInitialConnectionType Payload = Message.GetAsInitialConnection(); + Token = Payload.Token; + UCredentials::SaveToken(Token); + Identity = Payload.Identity; + bIsIdentitySet = true; + ConnectionId = Payload.ConnectionId; + if (OnConnectBaseDelegate.IsBound()) + { + OnConnectBaseDelegate.Execute(this, Identity, Token); + } + break; + } + case EServerMessageTag::TransactionUpdate: + { + const FTransactionUpdateType Payload = Message.GetAsTransactionUpdate(); + const FDatabaseUpdateType Update = TransactionUpdateToDatabaseUpdate(Payload); + DbUpdate(Update, FSpacetimeDBEvent::Transaction(FSpacetimeDBUnit())); + break; + } + case EServerMessageTag::OneOffQueryResult: + { + // One-off query results are request/response only and do not mutate cache by default. + break; + } + case EServerMessageTag::SubscribeApplied: + { + const FSubscribeAppliedType Payload = Message.GetAsSubscribeApplied(); + const FDatabaseUpdateType Update = QueryRowsToDatabaseUpdate(Payload.Rows, false); + DbUpdate(Update, FSpacetimeDBEvent::SubscribeApplied(FSpacetimeDBUnit())); + + if (TObjectPtr* HandlePtr = ActiveSubscriptions.Find(Payload.QuerySetId.Id)) + { + TObjectPtr Handle = *HandlePtr; + if (!Handle) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("SubscribeApplied: Null handle for QuerySetId %u."), Payload.QuerySetId.Id); + return; + } + FSubscriptionEventContextBase Ctx; + Ctx.Event = FSpacetimeDBEvent::SubscribeApplied(FSpacetimeDBUnit()); + Handle->TriggerApplied(Ctx); + } + break; + } + case EServerMessageTag::UnsubscribeApplied: + { + const FUnsubscribeAppliedType Payload = Message.GetAsUnsubscribeApplied(); + if (Payload.Rows.IsSet()) + { + const FDatabaseUpdateType Update = QueryRowsToDatabaseUpdate(Payload.Rows.Value, true); + DbUpdate(Update, FSpacetimeDBEvent::UnsubscribeApplied(FSpacetimeDBUnit())); + } + + if (TObjectPtr* HandlePtr = ActiveSubscriptions.Find(Payload.QuerySetId.Id)) + { + TObjectPtr Handle = *HandlePtr; + if (!Handle) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("UnsubscribeApplied: Null handle for QuerySetId %u."), Payload.QuerySetId.Id); + return; + } + Handle->bEnded = true; + Handle->bActive = false; + Handle->bUnsubscribeCalled = true; + FSubscriptionEventContextBase Ctx; + Ctx.Event = FSpacetimeDBEvent::UnsubscribeApplied(FSpacetimeDBUnit()); + if (Handle->EndDelegate.IsBound()) + { + Handle->EndDelegate.Execute(Ctx); + } + ActiveSubscriptions.Remove(Payload.QuerySetId.Id); + } + break; + } + case EServerMessageTag::SubscriptionError: + { + const FSubscriptionErrorType Payload = Message.GetAsSubscriptionError(); + UE_LOG(LogSpacetimeDb_Connection, Warning, TEXT("SubscriptionError received for QuerySetId=%u Error=%s"), + Payload.QuerySetId.Id, + *Payload.Error); + if (TObjectPtr* HandlePtr = ActiveSubscriptions.Find(Payload.QuerySetId.Id)) + { + TObjectPtr Handle = *HandlePtr; + if (!Handle) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("SubscriptionError: Null handle for QuerySetId %u. Error: %s"), + Payload.QuerySetId.Id, + *Payload.Error); + return; + } + FErrorContextBase Ctx; Ctx.Error = Payload.Error; + Handle->TriggerError(Ctx); + ActiveSubscriptions.Remove(Payload.QuerySetId.Id); + } + break; + } + case EServerMessageTag::ReducerResult: + { + const FReducerResultType Payload = Message.GetAsReducerResult(); + const FReducerCallInfoType* FoundReducerCall = PendingReducerCalls.Find(Payload.RequestId); + if (!FoundReducerCall) + { + const FString ErrorMessage = FString::Printf( + TEXT("Reducer result for unknown request_id %u"), + Payload.RequestId); + HandleProtocolViolation(ErrorMessage); + return; + } + + const FReducerCallInfoType ReducerCall = *FoundReducerCall; + PendingReducerCalls.Remove(Payload.RequestId); + + FReducerEvent RedEvent; + RedEvent.RequestId = Payload.RequestId; + RedEvent.Timestamp = Payload.Timestamp; + RedEvent.CallerIdentity = Identity; + RedEvent.CallerConnectionId = ConnectionId; + RedEvent.ReducerCall = ReducerCall; + + if (Payload.Result.IsOk()) + { + RedEvent.Status = FSpacetimeDBStatus::Committed(FSpacetimeDBUnit()); + const FReducerOkType Ok = Payload.Result.GetAsOk(); + const FDatabaseUpdateType Update = TransactionUpdateToDatabaseUpdate(Ok.TransactionUpdate); + DbUpdate(Update, FSpacetimeDBEvent::Reducer(RedEvent)); + ReducerEvent(RedEvent); + } + else if (Payload.Result.IsOkEmpty()) + { + RedEvent.Status = FSpacetimeDBStatus::Committed(FSpacetimeDBUnit()); + ReducerEvent(RedEvent); + } + else + { + FString ErrorMessage; + if (Payload.Result.IsErr()) + { + ErrorMessage = DecodeReducerErrorMessage(Payload.Result.GetAsErr()); + } + else + { + ErrorMessage = Payload.Result.GetAsInternalError(); + } + RedEvent.Status = FSpacetimeDBStatus::Failed(ErrorMessage); + ReducerEvent(RedEvent); + ReducerEventFailed(RedEvent, ErrorMessage); + } + break; + } + case EServerMessageTag::ProcedureResult: + { + const FProcedureResultType Payload = Message.GetAsProcedureResult(); + FProcedureEvent ProcEvent; + ProcEvent.Status = Payload.Status; + ProcEvent.Timestamp = Payload.Timestamp; + ProcEvent.TotalHostExecutionDuration = Payload.TotalHostExecutionDuration; + ProcEvent.Success = ProcEvent.Status.IsReturned(); + + TArray PayloadData; + FString ErrorMessage; + if (ProcEvent.Success) + { + PayloadData = ProcEvent.Status.GetAsReturned(); + } + else if (Payload.Status.IsInternalError()) + { + ErrorMessage = Payload.Status.GetAsInternalError(); + } + + const bool bResolved = ProcedureCallbacks->ResolveCallback( + Payload.RequestId, + FSpacetimeDBEvent::Procedure(ProcEvent), + PayloadData, + ProcEvent.Success + ); + if (!bResolved) + { + UE_LOG( + LogSpacetimeDb_Connection, + Warning, + TEXT("Received ProcedureResult for unknown request ID: %u"), + Payload.RequestId + ); + } + if (!ProcEvent.Success) + { + ProcedureEventFailed(ProcEvent, ErrorMessage); + } + break; + } + default: + UE_LOG(LogSpacetimeDb_Connection, Warning, TEXT("Unknown server-message tag")); + break; + } +} bool UDbConnectionBase::DecompressBrotli(const TArray& InData, TArray& OutData) { @@ -405,71 +496,44 @@ bool UDbConnectionBase::DecompressGzip(const TArray& InData, TArray& In, TArray& Out) -{ - switch (Variant) - { - case ECompressableQueryUpdateTag::Uncompressed: - // No compression, just copy the data - Out = In; - return true; - case ECompressableQueryUpdateTag::Brotli: - return DecompressBrotli(In, Out); - case ECompressableQueryUpdateTag::Gzip: - return DecompressGzip(In, Out); - default: - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Unknown compression variant")); - return false; - } -} - -void UDbConnectionBase::PreProcessDatabaseUpdate(const FDatabaseUpdateType& Update) -{ - for (const FTableUpdateType& TableUpdate : Update.Tables) - { - TArray UncompressedCQUs; - for (const FCompressableQueryUpdateType& CQU : TableUpdate.Updates) - { - - // Uncompress the CQU based on its tag - FQueryUpdateType UncompressedUpdate; - switch (CQU.Tag) - { - case ECompressableQueryUpdateTag::Uncompressed: - UncompressedUpdate = CQU.GetAsUncompressed(); - break; - case ECompressableQueryUpdateTag::Brotli: - { - TArray Data = CQU.GetAsBrotli(); - TArray Dec; - if (DecompressBrotli(Data, Dec)) - { - //@Note: This will never trigger until Brotli decompression is implemented - UncompressedUpdate = UE::SpacetimeDB::Deserialize(Dec); - } - break; - } - case ECompressableQueryUpdateTag::Gzip: - { - TArray Data = CQU.GetAsGzip(); - TArray Dec; - if (DecompressGzip(Data, Dec)) - { - UncompressedUpdate = UE::SpacetimeDB::Deserialize(Dec); - } - break; - } - default: - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Unknown compression variant in CQU")); - break; - } - UncompressedCQUs.Add(FCompressableQueryUpdateType::Uncompressed(UncompressedUpdate)); - UE_LOG(LogSpacetimeDb_Connection, Verbose, TEXT("Table %s Inserts:%d Deletes:%d"), *TableUpdate.TableName, UncompressedUpdate.Inserts.RowsData.Num(), UncompressedUpdate.Deletes.RowsData.Num()); - } - - // After ensuring all updates are uncompressed, attempt to deserialize rows - TSharedPtr Deserializer; - { +bool UDbConnectionBase::DecompressPayload(uint8 Variant, const TArray& In, TArray& Out) +{ + switch (static_cast(Variant)) + { + case EWsCompressionTag::Uncompressed: + // No compression, just copy the data + Out = In; + return true; + case EWsCompressionTag::Brotli: + return DecompressBrotli(In, Out); + case EWsCompressionTag::Gzip: + return DecompressGzip(In, Out); + default: + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Unknown compression variant")); + return false; + } +} + +void UDbConnectionBase::ClearPendingOperations(const FString& Reason) +{ + PendingReducerCalls.Empty(); + if (ProcedureCallbacks) + { + ProcedureCallbacks->ClearAllCallbacks(); + } + if (!Reason.IsEmpty()) + { + UE_LOG(LogSpacetimeDb_Connection, Warning, TEXT("Cleared pending operations due to connection issue: %s"), *Reason); + } +} + +void UDbConnectionBase::PreProcessDatabaseUpdate(const FDatabaseUpdateType& Update) +{ + for (const FTableUpdateType& TableUpdate : Update.Tables) + { + // Attempt to deserialize rows after payload decode. + TSharedPtr Deserializer; + { // Find the deserializer for this table FScopeLock Lock(&TableDeserializersMutex); if (TSharedPtr* Found = TableDeserializers.Find(TableUpdate.TableName)) @@ -481,19 +545,17 @@ void UDbConnectionBase::PreProcessDatabaseUpdate(const FDatabaseUpdateType& Upda { UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("No deserializer found for table %s"), *TableUpdate.TableName); } - } - if (Deserializer) - { - // Preprocess the table data using the deserializer - TSharedPtr Data = Deserializer->PreProcess(UncompressedCQUs, TableUpdate.TableName); - if (Data.IsValid()) - { - // Store the preprocessed data in the mutex-protected map - FScopeLock Lock(&PreprocessedDataMutex); - FPreprocessedTableKey Key(TableUpdate.TableId, TableUpdate.TableName); - TArray>& Queue = PreprocessedTableData.FindOrAdd(Key); - Queue.Add(Data); - } + } + if (Deserializer) + { + TSharedPtr Data = Deserializer->PreProcess(TableUpdate.Rows, TableUpdate.TableName); + if (Data.IsValid()) + { + FScopeLock Lock(&PreprocessedDataMutex); + FPreprocessedTableKey Key(TableUpdate.TableName); + TArray>& Queue = PreprocessedTableData.FindOrAdd(Key); + Queue.Add(Data); + } } else { @@ -502,89 +564,80 @@ void UDbConnectionBase::PreProcessDatabaseUpdate(const FDatabaseUpdateType& Upda } } -FServerMessageType UDbConnectionBase::PreProcessMessage(const TArray& Message) -{ - if (Message.Num() == 0) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Empty message recived from server, ignored")); - return FServerMessageType{}; - } - // Check if the first byte is a valid compression tag - ECompressableQueryUpdateTag Compression = static_cast(Message[0]); - TArray CompressedPayload; - CompressedPayload.Append(Message.GetData() + 1, Message.Num() - 1); +bool UDbConnectionBase::PreProcessMessage(const TArray& Message, FServerMessageType& OutMessage) +{ + if (Message.Num() == 0) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Empty message recived from server, ignored")); + return false; + } + // The first byte indicates compression format for the payload. + const uint8 Compression = Message[0]; + TArray CompressedPayload; + CompressedPayload.Append(Message.GetData() + 1, Message.Num() - 1); // Decompress the payload based on the compression tag TArray Decompressed; - if (!DecompressPayload(Compression, CompressedPayload, Decompressed)) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Failed to decompress incoming message")); - return FServerMessageType{}; - } - - // Deserialize the decompressed data into a UServerMessageType object - FServerMessageType Parsed = UE::SpacetimeDB::Deserialize(Decompressed); - - // Process it based on its tag. Messages containing rows will be deserialized into rows based on registered type and table name. - bool bValid = false; - switch (Parsed.Tag) - { - case EServerMessageTag::InitialSubscription: - { - const FInitialSubscriptionType Payload = Parsed.GetAsInitialSubscription(); - // PreProcess the initial subscription payload - PreProcessDatabaseUpdate(Payload.DatabaseUpdate); - break; - } - case EServerMessageTag::TransactionUpdate: - { - - const FTransactionUpdateType Payload = Parsed.GetAsTransactionUpdate(); - if (Payload.Status.IsCommitted()) - { - // PreProcess the database update with the committed status - PreProcessDatabaseUpdate(Payload.Status.GetAsCommitted()); - } - break; - } - case EServerMessageTag::TransactionUpdateLight: - { - //@Note: Light tag in not implemented as an option in connection builder, this will never trigger but we keep this for future compatibility - const FTransactionUpdateLightType Payload = Parsed.GetAsTransactionUpdateLight(); - // PreProcess the light transaction update - PreProcessDatabaseUpdate(Payload.Update); - break; - } - case EServerMessageTag::SubscribeMultiApplied: - { - const FSubscribeMultiAppliedType Payload = Parsed.GetAsSubscribeMultiApplied(); - PreProcessDatabaseUpdate(Payload.Update); - break; - } - case EServerMessageTag::UnsubscribeMultiApplied: - { - const FUnsubscribeMultiAppliedType Payload = Parsed.GetAsUnsubscribeMultiApplied(); - PreProcessDatabaseUpdate(Payload.Update); - break; - } - default: - break; - } - return Parsed; -} - - -int32 UDbConnectionBase::GetNextRequestId() -{ - return NextRequestId++; -} - -int32 UDbConnectionBase::GetNextSubscriptionId() -{ - return NextSubscriptionId++; -} - -void UDbConnectionBase::StartSubscription(USubscriptionHandleBase* Handle) + if (!DecompressPayload(Compression, CompressedPayload, Decompressed)) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Failed to decompress incoming message")); + return false; + } + + // Deserialize the decompressed data into a UServerMessageType object + OutMessage = UE::SpacetimeDB::Deserialize(Decompressed); + + // Preprocess row-bearing payloads for table deserializers. + switch (OutMessage.Tag) + { + case EServerMessageTag::SubscribeApplied: + { + const FSubscribeAppliedType Payload = OutMessage.GetAsSubscribeApplied(); + PreProcessDatabaseUpdate(QueryRowsToDatabaseUpdate(Payload.Rows, false)); + break; + } + case EServerMessageTag::UnsubscribeApplied: + { + const FUnsubscribeAppliedType Payload = OutMessage.GetAsUnsubscribeApplied(); + if (Payload.Rows.IsSet()) + { + PreProcessDatabaseUpdate(QueryRowsToDatabaseUpdate(Payload.Rows.Value, true)); + } + break; + } + case EServerMessageTag::TransactionUpdate: + { + const FTransactionUpdateType Payload = OutMessage.GetAsTransactionUpdate(); + PreProcessDatabaseUpdate(TransactionUpdateToDatabaseUpdate(Payload)); + break; + } + case EServerMessageTag::ReducerResult: + { + const FReducerResultType Payload = OutMessage.GetAsReducerResult(); + if (Payload.Result.IsOk()) + { + PreProcessDatabaseUpdate(TransactionUpdateToDatabaseUpdate(Payload.Result.GetAsOk().TransactionUpdate)); + } + break; + } + default: + break; + } + return true; +} + + +uint32 UDbConnectionBase::GetNextRequestId() +{ + return NextRequestId++; +} + +uint32 UDbConnectionBase::GetNextSubscriptionId() +{ + return NextSubscriptionId++; +} + +void UDbConnectionBase::StartSubscription(USubscriptionHandleBase* Handle) { if (!Handle) { @@ -598,20 +651,20 @@ void UDbConnectionBase::StartSubscription(USubscriptionHandleBase* Handle) return; } - const int32 QueryId = GetNextSubscriptionId(); - Handle->QueryId = QueryId; - Handle->ConnInternal = this; - ActiveSubscriptions.Add(QueryId, Handle); - - FSubscribeMultiType SubMsg; - SubMsg.QueryStrings = Handle->QuerySqls; - SubMsg.RequestId = GetNextRequestId(); - SubMsg.QueryId.Id = QueryId; - - FClientMessageType Msg = FClientMessageType::SubscribeMulti(SubMsg); - TArray Data = UE::SpacetimeDB::Serialize(Msg); - SendRawMessage(Data); -} + const uint32 QuerySetId = GetNextSubscriptionId(); + Handle->QuerySetId = QuerySetId; + Handle->ConnInternal = this; + ActiveSubscriptions.Add(QuerySetId, Handle); + + FSubscribeType SubMsg; + SubMsg.RequestId = GetNextRequestId(); + SubMsg.QuerySetId.Id = QuerySetId; + SubMsg.QueryStrings = Handle->QuerySqls; + + FClientMessageType Msg = FClientMessageType::Subscribe(SubMsg); + TArray Data = UE::SpacetimeDB::Serialize(Msg); + SendRawMessage(Data); +} void UDbConnectionBase::UnsubscribeInternal(USubscriptionHandleBase* Handle) { @@ -620,42 +673,41 @@ void UDbConnectionBase::UnsubscribeInternal(USubscriptionHandleBase* Handle) return; } - const int32 QueryId = Handle->QueryId; - FUnsubscribeMultiType MsgData; - MsgData.RequestId = GetNextRequestId(); - MsgData.QueryId.Id = QueryId; - - FClientMessageType Msg = FClientMessageType::UnsubscribeMulti(MsgData); - TArray Data = UE::SpacetimeDB::Serialize(Msg); - SendRawMessage(Data); -} - -void UDbConnectionBase::InternalCallReducer(const FString& Reducer, TArray Args, USetReducerFlagsBase* Flags) -{ - if (!WebSocket || !WebSocket->IsConnected()) - { - UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Cannot call reducer, not connected to server!")); - return; - } - - uint8 FlagToUse = 0; // Default to FullUpdate - if (Flags && Flags->FlagMap.Contains(Reducer)) - { - //Select flag if set by user - ECallReducerFlags FlagFound = *Flags->FlagMap.Find(Reducer); - FlagToUse = static_cast(FlagFound); - } - - FCallReducerType MsgData; - MsgData.Reducer = Reducer; - MsgData.Args = Args; - MsgData.RequestId = GetNextRequestId(); - MsgData.Flags = FlagToUse; - - FClientMessageType Msg = FClientMessageType::CallReducer(MsgData); - TArray Data = UE::SpacetimeDB::Serialize(Msg); - SendRawMessage(Data); -} + const uint32 QuerySetId = Handle->QuerySetId; + FUnsubscribeType MsgData; + MsgData.RequestId = GetNextRequestId(); + MsgData.QuerySetId.Id = QuerySetId; + MsgData.Flags = EUnsubscribeFlagsType::SendDroppedRows; + + FClientMessageType Msg = FClientMessageType::Unsubscribe(MsgData); + TArray Data = UE::SpacetimeDB::Serialize(Msg); + SendRawMessage(Data); +} + +uint32 UDbConnectionBase::InternalCallReducer(const FString& Reducer, TArray Args) +{ + if (!WebSocket || !WebSocket->IsConnected()) + { + UE_LOG(LogSpacetimeDb_Connection, Error, TEXT("Cannot call reducer, not connected to server!")); + return 0; + } + + FCallReducerType MsgData; + MsgData.Reducer = Reducer; + MsgData.Args = Args; + MsgData.RequestId = GetNextRequestId(); + // v2 parity with Rust/C#: reducer flags are always default. + MsgData.Flags = 0; + FReducerCallInfoType CallInfo; + CallInfo.ReducerName = Reducer; + CallInfo.Args = Args; + PendingReducerCalls.Add(MsgData.RequestId, CallInfo); + + FClientMessageType Msg = FClientMessageType::CallReducer(MsgData); + TArray Data = UE::SpacetimeDB::Serialize(Msg); + SendRawMessage(Data); + return MsgData.RequestId; +} void UDbConnectionBase::InternalCallProcedure(const FString& ProcedureName, TArray Args, const FOnProcedureCompleteDelegate& Callback) { @@ -703,4 +755,4 @@ void UDbConnectionBase::ApplyRegisteredTableUpdates(const FDatabaseUpdateType& U // Broadcast the diff for each handler Handler->BroadcastDiff(this, Context); } -} \ No newline at end of file +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/Websocket.cpp b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/Websocket.cpp index 9c1f4525f67..7b4bbe53f40 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/Websocket.cpp +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Connection/Websocket.cpp @@ -1,30 +1,14 @@ -#include "Connection/Websocket.h" -#include "WebSocketsModule.h" // Required for FWebSocketsModule -#include "SpacetimeDbSdk/Public/BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/ServerMessageType.g.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" -#include "Misc/Compression.h" +#include "Connection/Websocket.h" +#include "WebSocketsModule.h" // Required for FWebSocketsModule +#include "SpacetimeDbSdk/Public/BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/ServerMessageType.g.h" #include "Dom/JsonObject.h" #include "Serialization/JsonWriter.h" #include "Serialization/JsonSerializer.h" -static void LogIdentityTokenHex(const FIdentityTokenType& InToken, const TCHAR* TagName) -{ - // Logs the identity token in a structured format for debugging purposes. - TSharedRef Obj = MakeShared(); - Obj->SetStringField(TEXT("__identity__"), InToken.Identity.ToHex()); - Obj->SetStringField(TEXT("token"), InToken.Token); - Obj->SetStringField(TEXT("__connection_id__"), InToken.ConnectionId.ToHex()); - - FString Json; - TSharedRef> Writer = TJsonWriterFactory<>::Create(&Json); - FJsonSerializer::Serialize(Obj, Writer); - UE_LOG(LogSpacetimeDb_Connection, Log, TEXT("[%s] %s"), TagName, *Json); -} - -UWebsocketManager::UWebsocketManager() +UWebsocketManager::UWebsocketManager() { // Ensure the WebSockets module is loaded. FModuleManager::LoadModuleChecked(TEXT("WebSockets")); @@ -64,8 +48,8 @@ void UWebsocketManager::Connect(const FString& ServerUrl) UpgradeHeaders.Add("Authorization", HeaderToken); } - // using the v1.bsatn.spacetimedb protocol for WebSocket connections - const FString Protocol = "v1.bsatn.spacetimedb"; // @TODO: Implement JSON alternative, v1.json.spacetimedb + // Use websocket protocol v2 + const FString Protocol = "v2.bsatn.spacetimedb"; // Create the WebSocket connection WebSocket = FWebSocketsModule::Get().CreateWebSocket(ServerUrl, Protocol, UpgradeHeaders); @@ -212,4 +196,4 @@ void UWebsocketManager::HandleClosed(int32 StatusCode, const FString& Reason, bo OnClosed.Broadcast(StatusCode, Reason, bWasClean); // Reset on close to allow reconnection attempts WebSocket.Reset(); -} \ No newline at end of file +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Tests/SpacetimeDBBSATNTestOrg.cpp b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Tests/SpacetimeDBBSATNTestOrg.cpp index e64359717f5..20583c7b92a 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Tests/SpacetimeDBBSATNTestOrg.cpp +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Private/Tests/SpacetimeDBBSATNTestOrg.cpp @@ -7,36 +7,36 @@ #include "Types/LargeIntegers.h" #include "Types/Builtins.h" #include "ModuleBindings/Types/BsatnRowListType.g.h" +#include "ModuleBindings/Types/CallProcedureType.g.h" #include "ModuleBindings/Types/CallReducerType.g.h" #include "ModuleBindings/Types/ClientMessageType.g.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "ModuleBindings/Types/EnergyQuantaType.g.h" -#include "ModuleBindings/Types/IdentityTokenType.g.h" -#include "ModuleBindings/Types/InitialSubscriptionType.g.h" -#include "ModuleBindings/Types/OneOffQueryResponseType.g.h" +#include "ModuleBindings/Types/EventTableRowsType.g.h" +#include "ModuleBindings/Types/InitialConnectionType.g.h" #include "ModuleBindings/Types/OneOffQueryType.g.h" -#include "ModuleBindings/Types/OneOffTableType.g.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "ModuleBindings/Types/QueryUpdateType.g.h" -#include "ModuleBindings/Types/ReducerCallInfoType.g.h" +#include "ModuleBindings/Types/OneOffQueryResultType.g.h" +#include "ModuleBindings/Types/PersistentTableRowsType.g.h" +#include "ModuleBindings/Types/ProcedureResultType.g.h" +#include "ModuleBindings/Types/ProcedureStatusType.g.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" +#include "ModuleBindings/Types/QuerySetUpdateType.g.h" +#include "ModuleBindings/Types/ReducerOkType.g.h" +#include "ModuleBindings/Types/ReducerOutcomeType.g.h" +#include "ModuleBindings/Types/ReducerResultType.g.h" +#include "ModuleBindings/Results/SpacetimeDbSdkResultQueryRowsString.g.h" #include "ModuleBindings/Types/RowSizeHintType.g.h" #include "ModuleBindings/Types/ServerMessageType.g.h" +#include "ModuleBindings/Types/SingleTableRowsType.g.h" #include "ModuleBindings/Types/SubscribeAppliedType.g.h" -#include "ModuleBindings/Types/SubscribeMultiAppliedType.g.h" -#include "ModuleBindings/Types/SubscribeMultiType.g.h" -#include "ModuleBindings/Types/SubscribeRowsType.g.h" -#include "ModuleBindings/Types/SubscribeSingleType.g.h" #include "ModuleBindings/Types/SubscribeType.g.h" #include "ModuleBindings/Types/SubscriptionErrorType.g.h" #include "ModuleBindings/Types/TableUpdateType.g.h" -#include "ModuleBindings/Types/TransactionUpdateLightType.g.h" +#include "ModuleBindings/Types/TableUpdateRowsType.g.h" #include "ModuleBindings/Types/TransactionUpdateType.g.h" #include "ModuleBindings/Types/UnsubscribeAppliedType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiType.g.h" +#include "ModuleBindings/Types/UnsubscribeFlagsType.g.h" #include "ModuleBindings/Types/UnsubscribeType.g.h" -#include "ModuleBindings/Types/UpdateStatusType.g.h" +#include "ModuleBindings/Optionals/SpacetimeDbSdkOptionalQueryRows.g.h" // ────────────────────────────────────────────────────────────────────────────── @@ -172,279 +172,191 @@ IMPLEMENT_SIMPLE_AUTOMATION_TEST( ChartactarThingOrg.Type = OrgNpcChar; TEST_ROUNDTRIP(FCharacterThing, ChartactarThingOrg, "FCharacterThing struct with Tagged Enum"); - //Cliant API - LOG_Category("Cliant API"); - //QueryIdType - FQueryIdType QueryId; - QueryId.Id = 100; - TEST_ROUNDTRIP(FQueryIdType, QueryId, "FQueryId"); - - // SubscribeMultiType - FSubscribeMultiType SubscribeMulti; - SubscribeMulti.QueryStrings.Add("SELECT * FROM players"); - SubscribeMulti.QueryStrings.Add("SELECT * FROM guilds WHERE region = 'EU'"); - SubscribeMulti.RequestId = 500; - SubscribeMulti.QueryId = QueryId; - TEST_ROUNDTRIP(FSubscribeMultiType, SubscribeMulti, "FSubscribeMultiType"); - - // RowSizeHintType + // Client API (WS v2) + LOG_Category("Client API WS v2"); + + FQuerySetIdType QuerySetId; + QuerySetId.Id = 100; + TEST_ROUNDTRIP(FQuerySetIdType, QuerySetId, "FQuerySetIdType"); + FRowSizeHintType FixedSizeHint = FRowSizeHintType::FixedSize(static_cast(128)); TEST_ROUNDTRIP(FRowSizeHintType, FixedSizeHint, "FRowSizeHintType::FixedSize Variant"); - TArray RowOffsetsArray; // keep empty like before (or add offsets if you want) + TArray RowOffsetsArray; FRowSizeHintType RowOffsetsHint = FRowSizeHintType::RowOffsets(RowOffsetsArray); TEST_ROUNDTRIP(FRowSizeHintType, RowOffsetsHint, "FRowSizeHintType::RowOffsets Variant"); - // BsatnRowListType - FBsatnRowListType BsatnRowList; - BsatnRowList.SizeHint = FixedSizeHint; - BsatnRowList.RowsData.Init(0xAB, 10); - TEST_ROUNDTRIP(FBsatnRowListType, BsatnRowList, "FBsatnRowListType with FixedSize hint"); + FBsatnRowListType BsatnRowsFixed; + BsatnRowsFixed.SizeHint = FixedSizeHint; + BsatnRowsFixed.RowsData.Init(0xAB, 10); + TEST_ROUNDTRIP(FBsatnRowListType, BsatnRowsFixed, "FBsatnRowListType fixed"); + + FBsatnRowListType BsatnRowsOffsets; + BsatnRowsOffsets.SizeHint = RowOffsetsHint; + BsatnRowsOffsets.RowsData.Init(0xCD, 12); + TEST_ROUNDTRIP(FBsatnRowListType, BsatnRowsOffsets, "FBsatnRowListType offsets"); + + FSingleTableRowsType SingleTableRows; + SingleTableRows.Table = "PlayerStats"; + SingleTableRows.Rows = BsatnRowsFixed; + TEST_ROUNDTRIP(FSingleTableRowsType, SingleTableRows, "FSingleTableRowsType"); + + FQueryRowsType QueryRows; + QueryRows.Tables.Add(SingleTableRows); + TEST_ROUNDTRIP(FQueryRowsType, QueryRows, "FQueryRowsType"); - // CallReducerType FCallReducerType CallReducer; + CallReducer.RequestId = 200; + CallReducer.Flags = 0; CallReducer.Reducer = "MyGameReducer"; CallReducer.Args.Init(0xDE, 20); - CallReducer.RequestId = 200; - CallReducer.Flags = 0; TEST_ROUNDTRIP(FCallReducerType, CallReducer, "FCallReducerType"); - // SubscribeType + FCallProcedureType CallProcedure; + CallProcedure.RequestId = 201; + CallProcedure.Flags = 0; + CallProcedure.Procedure = "MyGameProcedure"; + CallProcedure.Args.Init(0xEF, 10); + TEST_ROUNDTRIP(FCallProcedureType, CallProcedure, "FCallProcedureType"); + FSubscribeType Subscribe; + Subscribe.RequestId = 300; + Subscribe.QuerySetId = QuerySetId; Subscribe.QueryStrings.Add("SELECT * FROM users WHERE status = 'online'"); Subscribe.QueryStrings.Add("SELECT item_name FROM inventory WHERE owner_id = 32"); - Subscribe.RequestId = 300; TEST_ROUNDTRIP(FSubscribeType, Subscribe, "FSubscribeType"); - // OneOffQueryType FOneOffQueryType OneOffQuery; - OneOffQuery.MessageId.Init(0xCC, 16); + OneOffQuery.RequestId = 301; OneOffQuery.QueryString = "SELECT * FROM game_settings"; TEST_ROUNDTRIP(FOneOffQueryType, OneOffQuery, "FOneOffQueryType"); - // SubscribeSingleType - FSubscribeSingleType SubscribeSingle; - SubscribeSingle.Query = "SELECT * FROM player_data WHERE player_id = 33"; - SubscribeSingle.RequestId = 400; - SubscribeSingle.QueryId = QueryId; - TEST_ROUNDTRIP(FSubscribeSingleType, SubscribeSingle, "FSubscribeSingleType"); - - // UnsubscribeType FUnsubscribeType Unsubscribe; Unsubscribe.RequestId = 600; - Unsubscribe.QueryId = QueryId; + Unsubscribe.QuerySetId = QuerySetId; + Unsubscribe.Flags = EUnsubscribeFlagsType::SendDroppedRows; TEST_ROUNDTRIP(FUnsubscribeType, Unsubscribe, "FUnsubscribeType"); - // UnsubscribeMultiType - FUnsubscribeMultiType UnsubscribeMulti; - UnsubscribeMulti.RequestId = 700; - UnsubscribeMulti.QueryId = QueryId; - TEST_ROUNDTRIP(FUnsubscribeMultiType, UnsubscribeMulti, "FUnsubscribeMultiType"); - - // CallReducer variant FClientMessageType ClientMessageCallReducer = FClientMessageType::CallReducer(CallReducer); TEST_ROUNDTRIP(FClientMessageType, ClientMessageCallReducer, "FClientMessageType::CallReducer Variant"); + FClientMessageType ClientMessageCallProcedure = FClientMessageType::CallProcedure(CallProcedure); + TEST_ROUNDTRIP(FClientMessageType, ClientMessageCallProcedure, "FClientMessageType::CallProcedure Variant"); FClientMessageType ClientMessageSubscribe = FClientMessageType::Subscribe(Subscribe); TEST_ROUNDTRIP(FClientMessageType, ClientMessageSubscribe, "FClientMessageType::Subscribe Variant"); FClientMessageType ClientMessageOneOffQuery = FClientMessageType::OneOffQuery(OneOffQuery); TEST_ROUNDTRIP(FClientMessageType, ClientMessageOneOffQuery, "FClientMessageType::OneOffQuery Variant"); - FClientMessageType ClientMessageSubscribeSingle = FClientMessageType::SubscribeSingle(SubscribeSingle); - TEST_ROUNDTRIP(FClientMessageType, ClientMessageSubscribeSingle, "FClientMessageType::SubscribeSingle Variant"); - FClientMessageType ClientMessageSubscribeMulti = FClientMessageType::SubscribeMulti(SubscribeMulti); - TEST_ROUNDTRIP(FClientMessageType, ClientMessageSubscribeMulti, "FClientMessageType::SubscribeMulti Variant"); FClientMessageType ClientMessageUnsubscribe = FClientMessageType::Unsubscribe(Unsubscribe); TEST_ROUNDTRIP(FClientMessageType, ClientMessageUnsubscribe, "FClientMessageType::Unsubscribe Variant"); - FClientMessageType ClientMessageUnsubscribeMulti = FClientMessageType::UnsubscribeMulti(UnsubscribeMulti); - TEST_ROUNDTRIP(FClientMessageType, ClientMessageUnsubscribeMulti, "FClientMessageType::UnsubscribeMulti Variant"); - - - // BsatnRowListType - FBsatnRowListType BsatnRowList1; - BsatnRowList1.SizeHint = FixedSizeHint; - BsatnRowList1.RowsData.Init(0xAB, 10); - TEST_ROUNDTRIP(FBsatnRowListType, BsatnRowList1, "FBsatnRowListType with FixedSize hint"); - FBsatnRowListType BsatnRowList2; - BsatnRowList2.SizeHint = RowOffsetsHint; - BsatnRowList2.RowsData.Init(0xAB, 10); - TEST_ROUNDTRIP(FBsatnRowListType, BsatnRowList2, "FBsatnRowListType with RowOffsets hint"); - - // QueryUpdateType - FQueryUpdateType QueryUpdate; - QueryUpdate.Deletes = BsatnRowList1; - QueryUpdate.Inserts = BsatnRowList2; - TEST_ROUNDTRIP(FQueryUpdateType, QueryUpdate, "FQueryUpdateType"); - - // CompressableQueryUpdateType - FCompressableQueryUpdateType UncompressedUpdate =FCompressableQueryUpdateType::Uncompressed(QueryUpdate); - TEST_ROUNDTRIP(FCompressableQueryUpdateType, UncompressedUpdate, "FCompressableQueryUpdateType::Uncompressed Variant"); - TArray BrotliData; - BrotliData.Add(0x11); - BrotliData.Add(0x22); - FCompressableQueryUpdateType BrotliUpdate =FCompressableQueryUpdateType::Brotli(BrotliData); - TEST_ROUNDTRIP(FCompressableQueryUpdateType, BrotliUpdate, "FCompressableQueryUpdateType::Brotli Variant"); - TArray GzipData; - GzipData.Add(0xA1); - GzipData.Add(0xB2); - FCompressableQueryUpdateType GzipUpdate = FCompressableQueryUpdateType::Gzip(GzipData); - TEST_ROUNDTRIP(FCompressableQueryUpdateType, GzipUpdate, "FCompressableQueryUpdateType::Gzip Variant"); - - // TableUpdateType + + FPersistentTableRowsType PersistentRows; + PersistentRows.Inserts = BsatnRowsFixed; + PersistentRows.Deletes = BsatnRowsOffsets; + TEST_ROUNDTRIP(FPersistentTableRowsType, PersistentRows, "FPersistentTableRowsType"); + + FEventTableRowsType EventRows; + EventRows.Events = BsatnRowsFixed; + TEST_ROUNDTRIP(FEventTableRowsType, EventRows, "FEventTableRowsType"); + + FTableUpdateRowsType PersistentTableUpdateRows = FTableUpdateRowsType::PersistentTable(PersistentRows); + TEST_ROUNDTRIP(FTableUpdateRowsType, PersistentTableUpdateRows, "FTableUpdateRowsType::PersistentTable"); + FTableUpdateRowsType EventTableUpdateRows = FTableUpdateRowsType::EventTable(EventRows); + TEST_ROUNDTRIP(FTableUpdateRowsType, EventTableUpdateRows, "FTableUpdateRowsType::EventTable"); + FTableUpdateType TableUpdate; - TableUpdate.TableId = 1; TableUpdate.TableName = "PlayerStats"; - TableUpdate.NumRows = 100; - TableUpdate.Updates.Add(UncompressedUpdate); - TableUpdate.Updates.Add(BrotliUpdate); - TableUpdate.Updates.Add(GzipUpdate); + TableUpdate.Rows.Add(PersistentTableUpdateRows); + TableUpdate.Rows.Add(EventTableUpdateRows); TEST_ROUNDTRIP(FTableUpdateType, TableUpdate, "FTableUpdateType"); - // DatabaseUpdateType - FDatabaseUpdateType DatabaseUpdate; - DatabaseUpdate.Tables.Add(TableUpdate); - TEST_ROUNDTRIP(FDatabaseUpdateType, DatabaseUpdate, "FDatabaseUpdateType"); - - // EnergyQuantaType - FEnergyQuantaType EnergyQuanta; - EnergyQuanta.Quanta = FSpacetimeDBUInt128(1000, 500); - TEST_ROUNDTRIP(FEnergyQuantaType, EnergyQuanta, "FEnergyQuantaType"); - - // IdentityTokenType - FIdentityTokenType IdentityToken; - IdentityToken.Identity = FSpacetimeDBIdentity(FSpacetimeDBUInt256(FSpacetimeDBUInt128(10, 9), FSpacetimeDBUInt128(8, 7))); - IdentityToken.Token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"; - IdentityToken.ConnectionId = FSpacetimeDBConnectionId(FSpacetimeDBUInt128(12345, 67890)); - TEST_ROUNDTRIP(FIdentityTokenType, IdentityToken, "FIdentityTokenType"); - - // InitialSubscriptionType - FInitialSubscriptionType InitialSubscription; - InitialSubscription.DatabaseUpdate = DatabaseUpdate; - InitialSubscription.RequestId = 101; - InitialSubscription.TotalHostExecutionDuration = FSpacetimeDBTimeDuration(500000); - TEST_ROUNDTRIP(FInitialSubscriptionType, InitialSubscription, "FInitialSubscriptionType"); - - - // OneOffTableType - FOneOffTableType OneOffTable; - OneOffTable.TableName = "GameScores"; - OneOffTable.Rows = BsatnRowList1; - TEST_ROUNDTRIP(FOneOffTableType, OneOffTable, "FOneOffTableType"); - - - // OneOffQueryResponseType - FOneOffQueryResponseType OneOffQueryResponse; - OneOffQueryResponse.MessageId.Init(0xDD, 16); - FSpacetimeDbSdkOptionalString SdkOptionalStringError; - SdkOptionalStringError.bHasValue = true; - SdkOptionalStringError.Value = "Error text"; - OneOffQueryResponse.Tables.Add(OneOffTable); - OneOffQueryResponse.TotalHostExecutionDuration = FSpacetimeDBTimeDuration(123456); - TEST_ROUNDTRIP(FOneOffQueryResponseType, OneOffQueryResponse, "FOneOffQueryResponseType"); - - // ReducerCallInfoType - FReducerCallInfoType ReducerCallInfo; - ReducerCallInfo.ReducerName = "UpdatePlayerScore"; - ReducerCallInfo.ReducerId = 123; - ReducerCallInfo.Args.Init(0xAB, 10); - ReducerCallInfo.RequestId = 789; - TEST_ROUNDTRIP(FReducerCallInfoType, ReducerCallInfo, "FReducerCallInfoType"); - - // UpdateStatusType - FUpdateStatusType StatusCommitted = FUpdateStatusType::Committed(DatabaseUpdate); - TEST_ROUNDTRIP(FUpdateStatusType, StatusCommitted, "FUpdateStatusType::Committed Variant"); - FString FailedMsg = TEXT("Reducer execution failed due to invalid input."); - FUpdateStatusType StatusFailed = FUpdateStatusType::Failed(FailedMsg); - TEST_ROUNDTRIP(FUpdateStatusType, StatusFailed, "FUpdateStatusType::Failed Variant"); - FSpacetimeDBUnit UnitValue{}; - FUpdateStatusType StatusOutOfEnergy = FUpdateStatusType::OutOfEnergy(UnitValue); - TEST_ROUNDTRIP(FUpdateStatusType, StatusOutOfEnergy, "FUpdateStatusType::OutOfEnergy Variant"); - - // TransactionUpdateType + FQuerySetUpdateType QuerySetUpdate; + QuerySetUpdate.QuerySetId = QuerySetId; + QuerySetUpdate.Tables.Add(TableUpdate); + TEST_ROUNDTRIP(FQuerySetUpdateType, QuerySetUpdate, "FQuerySetUpdateType"); + FTransactionUpdateType TransactionUpdate; - TransactionUpdate.Status = StatusCommitted; - TransactionUpdate.Timestamp = FSpacetimeDBTimestamp::FromFDateTime(FDateTime(2025, 6, 25, 9, 33, 0)); - TransactionUpdate.CallerIdentity = FSpacetimeDBIdentity(FSpacetimeDBUInt256(FSpacetimeDBUInt128(1, 2), FSpacetimeDBUInt128(3, 4))); - TransactionUpdate.CallerConnectionId = FSpacetimeDBConnectionId(FSpacetimeDBUInt128(98765, 43210)); - TransactionUpdate.ReducerCall = ReducerCallInfo; - TransactionUpdate.EnergyQuantaUsed = EnergyQuanta; - TransactionUpdate.TotalHostExecutionDuration = FSpacetimeDBTimeDuration(75000); + TransactionUpdate.QuerySets.Add(QuerySetUpdate); TEST_ROUNDTRIP(FTransactionUpdateType, TransactionUpdate, "FTransactionUpdateType"); - // SubscribeRowsType - FSubscribeRowsType SubscribeRows; - SubscribeRows.TableId = 10; - SubscribeRows.TableName = "ConfigData"; - SubscribeRows.TableRows = TableUpdate; - TEST_ROUNDTRIP(FSubscribeRowsType, SubscribeRows, "FSubscribeRowsType"); - - // SubscribeAppliedType FSubscribeAppliedType SubscribeApplied; SubscribeApplied.RequestId = 12345; - SubscribeApplied.TotalHostExecutionDurationMicros = 250000; - SubscribeApplied.QueryId = QueryId; - SubscribeApplied.Rows = SubscribeRows; + SubscribeApplied.QuerySetId = QuerySetId; + SubscribeApplied.Rows = QueryRows; TEST_ROUNDTRIP(FSubscribeAppliedType, SubscribeApplied, "FSubscribeAppliedType"); - // SubscribeMultiAppliedType - FSubscribeMultiAppliedType SubscribeMultiApplied; - SubscribeMultiApplied.RequestId = 54321; - SubscribeMultiApplied.TotalHostExecutionDurationMicros = 300000; - SubscribeMultiApplied.QueryId = QueryId; - SubscribeMultiApplied.Update = DatabaseUpdate; - TEST_ROUNDTRIP(FSubscribeMultiAppliedType, SubscribeMultiApplied, "FSubscribeMultiAppliedType"); + FUnsubscribeAppliedType UnsubscribeApplied; + UnsubscribeApplied.RequestId = 3000; + UnsubscribeApplied.QuerySetId = QuerySetId; + UnsubscribeApplied.Rows = FSpacetimeDbSdkOptionalQueryRows(QueryRows); + TEST_ROUNDTRIP(FUnsubscribeAppliedType, UnsubscribeApplied, "FUnsubscribeAppliedType"); - // SubscriptionErrorType FSubscriptionErrorType SubscriptionError; - SubscriptionError.TotalHostExecutionDurationMicros = 50000; SubscriptionError.RequestId = FSpacetimeDbSdkOptionalUInt32(1001); - SubscriptionError.QueryId = FSpacetimeDbSdkOptionalUInt32(201); - SubscriptionError.TableId = FSpacetimeDbSdkOptionalUInt32(301); + SubscriptionError.QuerySetId = QuerySetId; SubscriptionError.Error = "SQL syntax error in subscription query."; TEST_ROUNDTRIP(FSubscriptionErrorType, SubscriptionError, "FSubscriptionErrorType"); - // TransactionUpdateLightType - FTransactionUpdateLightType TransactionUpdateLight; - TransactionUpdateLight.RequestId = 2000; - TransactionUpdateLight.Update = DatabaseUpdate; - TEST_ROUNDTRIP(FTransactionUpdateLightType, TransactionUpdateLight, "FTransactionUpdateLightType"); - - - // UnsubscribeAppliedType - FUnsubscribeAppliedType UnsubscribeApplied; - UnsubscribeApplied.RequestId = 3000; - UnsubscribeApplied.TotalHostExecutionDurationMicros = 80000; - UnsubscribeApplied.QueryId = QueryId; - UnsubscribeApplied.Rows = SubscribeRows; - TEST_ROUNDTRIP(FUnsubscribeAppliedType, UnsubscribeApplied, "FUnsubscribeAppliedType"); - - // UnsubscribeMultiAppliedType - FUnsubscribeMultiAppliedType UnsubscribeMultiApplied; - UnsubscribeMultiApplied.RequestId = 4000; - UnsubscribeMultiApplied.TotalHostExecutionDurationMicros = 100000; - UnsubscribeMultiApplied.QueryId = QueryId; - UnsubscribeMultiApplied.Update = DatabaseUpdate; - TEST_ROUNDTRIP(FUnsubscribeMultiAppliedType, UnsubscribeMultiApplied, "FUnsubscribeMultiAppliedType"); - - - // UServerMessageType - FServerMessageType MessageInitialSubscription = FServerMessageType::InitialSubscription(InitialSubscription); - TEST_ROUNDTRIP(FServerMessageType, MessageInitialSubscription, "FServerMessageType::InitialSubscription Variant"); + FInitialConnectionType InitialConnection; + InitialConnection.Identity = FSpacetimeDBIdentity(FSpacetimeDBUInt256(FSpacetimeDBUInt128(10, 9), FSpacetimeDBUInt128(8, 7))); + InitialConnection.Token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"; + InitialConnection.ConnectionId = FSpacetimeDBConnectionId(FSpacetimeDBUInt128(12345, 67890)); + TEST_ROUNDTRIP(FInitialConnectionType, InitialConnection, "FInitialConnectionType"); + + FSpacetimeDbSdkResultQueryRowsString OneOffResult = FSpacetimeDbSdkResultQueryRowsString::Ok(QueryRows); + TEST_ROUNDTRIP(FSpacetimeDbSdkResultQueryRowsString, OneOffResult, "FSpacetimeDbSdkResultQueryRowsString::Ok"); + + FOneOffQueryResultType OneOffQueryResult; + OneOffQueryResult.RequestId = 901; + OneOffQueryResult.Result = OneOffResult; + TEST_ROUNDTRIP(FOneOffQueryResultType, OneOffQueryResult, "FOneOffQueryResultType"); + + FReducerOkType ReducerOk; + ReducerOk.RetValue.Init(0xAA, 8); + ReducerOk.TransactionUpdate = TransactionUpdate; + TEST_ROUNDTRIP(FReducerOkType, ReducerOk, "FReducerOkType"); + + FReducerOutcomeType ReducerOutcomeOk = FReducerOutcomeType::Ok(ReducerOk); + TEST_ROUNDTRIP(FReducerOutcomeType, ReducerOutcomeOk, "FReducerOutcomeType::Ok"); + TArray ReducerErrBytes; + ReducerErrBytes.Add(0x11); + ReducerErrBytes.Add(0x22); + FReducerOutcomeType ReducerOutcomeErr = FReducerOutcomeType::Err(ReducerErrBytes); + TEST_ROUNDTRIP(FReducerOutcomeType, ReducerOutcomeErr, "FReducerOutcomeType::Err"); + FReducerOutcomeType ReducerOutcomeInternal = FReducerOutcomeType::InternalError("Reducer crashed"); + TEST_ROUNDTRIP(FReducerOutcomeType, ReducerOutcomeInternal, "FReducerOutcomeType::InternalError"); + + FReducerResultType ReducerResult; + ReducerResult.RequestId = 777; + ReducerResult.Timestamp = FSpacetimeDBTimestamp::FromFDateTime(FDateTime(2025, 6, 25, 9, 33, 0)); + ReducerResult.Result = ReducerOutcomeOk; + TEST_ROUNDTRIP(FReducerResultType, ReducerResult, "FReducerResultType"); + + FProcedureStatusType ProcedureStatusReturned = FProcedureStatusType::Returned(TArray{0x10, 0x20}); + TEST_ROUNDTRIP(FProcedureStatusType, ProcedureStatusReturned, "FProcedureStatusType::Returned"); + FProcedureStatusType ProcedureStatusInternal = FProcedureStatusType::InternalError("Procedure crashed"); + TEST_ROUNDTRIP(FProcedureStatusType, ProcedureStatusInternal, "FProcedureStatusType::InternalError"); + + FProcedureResultType ProcedureResult; + ProcedureResult.Status = ProcedureStatusReturned; + ProcedureResult.Timestamp = FSpacetimeDBTimestamp::FromFDateTime(FDateTime(2025, 6, 25, 9, 35, 0)); + ProcedureResult.TotalHostExecutionDuration = FSpacetimeDBTimeDuration(75000); + ProcedureResult.RequestId = 888; + TEST_ROUNDTRIP(FProcedureResultType, ProcedureResult, "FProcedureResultType"); + + FServerMessageType MessageInitialConnection = FServerMessageType::InitialConnection(InitialConnection); + TEST_ROUNDTRIP(FServerMessageType, MessageInitialConnection, "FServerMessageType::InitialConnection Variant"); FServerMessageType MessageTransactionUpdate = FServerMessageType::TransactionUpdate(TransactionUpdate); TEST_ROUNDTRIP(FServerMessageType, MessageTransactionUpdate, "FServerMessageType::TransactionUpdate Variant"); - FServerMessageType MessageTransactionUpdateLight = FServerMessageType::TransactionUpdateLight(TransactionUpdateLight); - TEST_ROUNDTRIP(FServerMessageType, MessageTransactionUpdateLight, "FServerMessageType::TransactionUpdateLight Variant"); - FServerMessageType MessageIdentityToken = FServerMessageType::IdentityToken(IdentityToken); - TEST_ROUNDTRIP(FServerMessageType, MessageIdentityToken, "FServerMessageType::IdentityToken Variant"); - FServerMessageType MessageOneOffQueryResponse = FServerMessageType::OneOffQueryResponse(OneOffQueryResponse); - TEST_ROUNDTRIP(FServerMessageType, MessageOneOffQueryResponse, "FServerMessageType::OneOffQueryResponse Variant"); + FServerMessageType MessageOneOffQueryResult = FServerMessageType::OneOffQueryResult(OneOffQueryResult); + TEST_ROUNDTRIP(FServerMessageType, MessageOneOffQueryResult, "FServerMessageType::OneOffQueryResult Variant"); FServerMessageType MessageSubscribeApplied = FServerMessageType::SubscribeApplied(SubscribeApplied); TEST_ROUNDTRIP(FServerMessageType, MessageSubscribeApplied, "FServerMessageType::SubscribeApplied Variant"); FServerMessageType MessageUnsubscribeApplied = FServerMessageType::UnsubscribeApplied(UnsubscribeApplied); TEST_ROUNDTRIP(FServerMessageType, MessageUnsubscribeApplied, "FServerMessageType::UnsubscribeApplied Variant"); FServerMessageType MessageSubscriptionError = FServerMessageType::SubscriptionError(SubscriptionError); TEST_ROUNDTRIP(FServerMessageType, MessageSubscriptionError, "FServerMessageType::SubscriptionError Variant"); - FServerMessageType MessageSubscribeMultiApplied = FServerMessageType::SubscribeMultiApplied(SubscribeMultiApplied); - TEST_ROUNDTRIP(FServerMessageType, MessageSubscribeMultiApplied, "FServerMessageType::SubscribeMultiApplied Variant"); - FServerMessageType MessageUnsubscribeMultiApplied = FServerMessageType::UnsubscribeMultiApplied(UnsubscribeMultiApplied); - TEST_ROUNDTRIP(FServerMessageType, MessageUnsubscribeMultiApplied, "FServerMessageType::UnsubscribeMultiApplied Variant"); + FServerMessageType MessageReducerResult = FServerMessageType::ReducerResult(ReducerResult); + TEST_ROUNDTRIP(FServerMessageType, MessageReducerResult, "FServerMessageType::ReducerResult Variant"); + FServerMessageType MessageProcedureResult = FServerMessageType::ProcedureResult(ProcedureResult); + TEST_ROUNDTRIP(FServerMessageType, MessageProcedureResult, "FServerMessageType::ProcedureResult Variant"); return true; } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/BSATN/UEBSATNHelpers.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/BSATN/UEBSATNHelpers.h index b31efce382e..7d44d69c24f 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/BSATN/UEBSATNHelpers.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/BSATN/UEBSATNHelpers.h @@ -2,8 +2,7 @@ #include "CoreMinimal.h" #include "ModuleBindings/Types/TableUpdateType.g.h" -#include "ModuleBindings/Types/QueryUpdateType.g.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" +#include "ModuleBindings/Types/TableUpdateRowsType.g.h" #include "DBCache/WithBsatn.h" /** Helper utilities for working with BSATN encoded row data in Unreal. */ @@ -69,18 +68,6 @@ namespace UE::SpacetimeDB } } - /** Parse a query update into row arrays */ - template - static void ParseQueryUpdateWithBsatn( - const FQueryUpdateType& Query, - TArray>& OutInserts, - TArray>& OutDeletes) - { - // Parse inserts and deletes from the query update, retaining BSATN bytes - ParseRowListWithBsatn(Query.Inserts, OutInserts); - ParseRowListWithBsatn(Query.Deletes, OutDeletes); - } - /** Apply a table update keeping BSATN bytes */ template void ProcessTableUpdateWithBsatn( @@ -88,20 +75,24 @@ namespace UE::SpacetimeDB TArray>& Inserts, TArray>& Deletes) { - for (FCompressableQueryUpdateType CQU : TableUpdate.Updates) + for (const FTableUpdateRowsType& RowSet : TableUpdate.Rows) { - FQueryUpdateType QueryUpdate; - //Should be uncompressed at this point - if (CQU.IsUncompressed()) + if (RowSet.IsPersistentTable()) + { + const FPersistentTableRowsType Persistent = RowSet.GetAsPersistentTable(); + ParseRowListWithBsatn(Persistent.Inserts, Inserts); + ParseRowListWithBsatn(Persistent.Deletes, Deletes); + } + // Event-table rows are callback-only inserts and should not create delete paths. + else if (RowSet.IsEventTable()) { - QueryUpdate = CQU.GetAsUncompressed(); + const FEventTableRowsType EventRows = RowSet.GetAsEventTable(); + ParseRowListWithBsatn(EventRows.Events, Inserts); } else { - UE_LOG(LogTemp, Error, TEXT("Compresstion state for row in table %s not uncompressed at parsing step"), *TableUpdate.TableName); - continue; + UE_LOG(LogTemp, Warning, TEXT("Unknown row-set tag for table %s"), *TableUpdate.TableName); } - ParseQueryUpdateWithBsatn(QueryUpdate, Inserts, Deletes); } } @@ -126,7 +117,7 @@ namespace UE::SpacetimeDB public: virtual ~ITableRowDeserializer() {} /** Preprocess the table update and return a shared pointer to preprocessed data. */ - virtual TSharedPtr PreProcess(const TArray& Updates, const FString TableName) const = 0; + virtual TSharedPtr PreProcess(const TArray& RowSets, const FString TableName) const = 0; }; /** Specialization of ITableRowDeserializer for a specific row type not defined in SDK. Used to deserialize rows of a specific type from a database update. */ @@ -134,24 +125,31 @@ namespace UE::SpacetimeDB class TTableRowDeserializer : public ITableRowDeserializer { public: - virtual TSharedPtr PreProcess(const TArray& Updates, const FString TableName) const override + virtual TSharedPtr PreProcess(const TArray& RowSets, const FString TableName) const override { // Create a new preprocessed table data object for the specific row type TSharedPtr> Result = MakeShared>(); - // Process each compressable query update in the table update - for (const FCompressableQueryUpdateType& CQU : Updates) + // Process each row-set update in the table update + for (const FTableUpdateRowsType& RowSet : RowSets) { - if (!CQU.IsUncompressed()) - { - UE_LOG(LogTemp, Error, TEXT("Compresstion state for row in table %s not uncompressed at parsing step"), *TableName); - continue; + if (RowSet.IsPersistentTable()) + { + const FPersistentTableRowsType Persistent = RowSet.GetAsPersistentTable(); + ParseRowListWithBsatn(Persistent.Inserts, Result->Inserts); + ParseRowListWithBsatn(Persistent.Deletes, Result->Deletes); + } + else if (RowSet.IsEventTable()) + { + // Event rows are insert-style callback payloads only. + const FEventTableRowsType Events = RowSet.GetAsEventTable(); + ParseRowListWithBsatn(Events.Events, Result->Inserts); + } + else + { + UE_LOG(LogTemp, Warning, TEXT("Unknown row-set tag for table %s"), *TableName); } - // Get the uncompressed query update from the compressable query update - FQueryUpdateType Query = CQU.GetAsUncompressed(); - // Parse the query update into inserts and deletes, retaining BSATN bytes - ParseQueryUpdateWithBsatn(Query, Result->Inserts, Result->Deletes); } return Result; } }; -} \ No newline at end of file +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Callback.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Callback.h index 3fdcba2979b..c0fa384db4f 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Callback.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Callback.h @@ -1,11 +1,7 @@ #pragma once #include "CoreMinimal.h" -#include "ModuleBindings/Types/ServerMessageType.g.h" -#include "ModuleBindings/Types/TransactionUpdateType.g.h" -#include "ModuleBindings/Types/ReducerCallInfoType.g.h" -#include "ModuleBindings/Types/UpdateStatusType.g.h" -#include "ModuleBindings/Types/EnergyQuantaType.g.h" +#include "ModuleBindings/Types/ProcedureStatusType.g.h" #include "Types/Builtins.h" #include "Types/UnitType.h" #include @@ -19,6 +15,61 @@ //Forward declare class UDbConnectionBase; +/** Local reducer call metadata correlated by request_id for generated client dispatch. */ +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FReducerCallInfoType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString ReducerName; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Args; + + FORCEINLINE bool operator==(const FReducerCallInfoType& Other) const + { + return ReducerName == Other.ReducerName && Args == Other.Args; + } + + FORCEINLINE bool operator!=(const FReducerCallInfoType& Other) const + { + return !(*this == Other); + } +}; + +FORCEINLINE uint32 GetTypeHash(const FReducerCallInfoType& ReducerCallInfo) +{ + uint32 Hash = GetTypeHash(ReducerCallInfo.ReducerName); + Hash = HashCombine(Hash, GetTypeHash(ReducerCallInfo.Args)); + return Hash; +} + +/** Local energy field used by generated reducer-event wrappers. */ +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FEnergyQuantaType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + int64 Value = 0; + + FORCEINLINE bool operator==(const FEnergyQuantaType& Other) const + { + return Value == Other.Value; + } + + FORCEINLINE bool operator!=(const FEnergyQuantaType& Other) const + { + return !(*this == Other); + } +}; + +FORCEINLINE uint32 GetTypeHash(const FEnergyQuantaType& EnergyQuanta) +{ + return GetTypeHash(EnergyQuanta.Value); +} + /** Termination status for a reducer event. */ UENUM(BlueprintType) @@ -194,6 +245,9 @@ struct SPACETIMEDBSDK_API FReducerEvent { GENERATED_BODY() + /** Request id correlated to the originating reducer call (not Blueprint-exposed). */ + uint32 RequestId = 0; + /** Timestamp for when the reducer executed */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") FSpacetimeDBTimestamp Timestamp; @@ -220,7 +274,7 @@ struct SPACETIMEDBSDK_API FReducerEvent FORCEINLINE bool operator==(const FReducerEvent& Other) const { - return Status == Other.Status && Timestamp == Other.Timestamp && CallerIdentity == Other.CallerIdentity && + return RequestId == Other.RequestId && Status == Other.Status && Timestamp == Other.Timestamp && CallerIdentity == Other.CallerIdentity && CallerConnectionId == Other.CallerConnectionId && EnergyConsumed == Other.EnergyConsumed && ReducerCall == Other.ReducerCall; } @@ -232,7 +286,8 @@ struct SPACETIMEDBSDK_API FReducerEvent FORCEINLINE uint32 GetTypeHash(const FReducerEvent& ReducerEvent) { - uint32 Hash = GetTypeHash(ReducerEvent.Status); + uint32 Hash = GetTypeHash(ReducerEvent.RequestId); + Hash = HashCombine(Hash, GetTypeHash(ReducerEvent.Status)); Hash = HashCombine(Hash, GetTypeHash(ReducerEvent.Timestamp)); Hash = HashCombine(Hash, GetTypeHash(ReducerEvent.CallerIdentity)); Hash = HashCombine(Hash, GetTypeHash(ReducerEvent.CallerConnectionId)); @@ -289,6 +344,8 @@ enum class ESpacetimeDBEventTag : uint8 UnsubscribeApplied, /** Connection lost */ Disconnected, + /** Non-reducer transaction update */ + Transaction, /** Subscription error */ SubscribeError, /** Unknown transaction type */ @@ -348,6 +405,14 @@ struct SPACETIMEDBSDK_API FSpacetimeDBEvent return Obj; } + static FSpacetimeDBEvent Transaction(const FSpacetimeDBUnit& Value) + { + FSpacetimeDBEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + static FSpacetimeDBEvent SubscribeError(const FString& InError) { FSpacetimeDBEvent Obj; @@ -402,6 +467,13 @@ struct SPACETIMEDBSDK_API FSpacetimeDBEvent return MessageData.Get(); } + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } FORCEINLINE FString GetAsSubscribeError() const { @@ -437,6 +509,8 @@ struct SPACETIMEDBSDK_API FSpacetimeDBEvent return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: + return GetAsTransaction() == Other.GetAsTransaction(); case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); case ESpacetimeDBEventTag::UnknownTransaction: @@ -464,6 +538,7 @@ FORCEINLINE uint32 GetTypeHash(const FSpacetimeDBEvent& Event) case ESpacetimeDBEventTag::SubscribeApplied: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsSubscribeApplied())); case ESpacetimeDBEventTag::UnsubscribeApplied: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsUnsubscribeApplied())); case ESpacetimeDBEventTag::Disconnected: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsDisconnected())); + case ESpacetimeDBEventTag::Transaction: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsTransaction())); case ESpacetimeDBEventTag::SubscribeError: return HashCombine(TagHash, GetTypeHash(Event.GetAsSubscribeError())); case ESpacetimeDBEventTag::UnknownTransaction: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsUnknownTransaction())); case ESpacetimeDBEventTag::Procedure: return HashCombine(TagHash, ::GetTypeHash(Event.GetAsProcedure())); @@ -558,10 +633,8 @@ struct SPACETIMEDBSDK_API FSpacetimeDBProcedureStatus public: FSpacetimeDBProcedureStatus() = default; - // NOTE: order matches ESpacetimeDBStatusTag: Committed, Failed, OutOfEnergy // Payloads: // Returned -> FSpacetimeDBUnit - // OutOfEnergy -> FSpacetimeDBUnit // InternalError -> FString TVariant MessageData; @@ -585,22 +658,12 @@ struct SPACETIMEDBSDK_API FSpacetimeDBProcedureStatus return Obj; } - static FSpacetimeDBProcedureStatus OutOfEnergy(const FSpacetimeDBUnit& Value) - { - FSpacetimeDBProcedureStatus Obj; - Obj.Tag = EProcedureStatusTag::OutOfEnergy; - Obj.MessageData.Set(Value); - return Obj; - } - static FSpacetimeDBProcedureStatus FromStatus(const FProcedureStatusType& Value) { switch (Value.Tag) { case EProcedureStatusTag::Returned: return Returned(FSpacetimeDBUnit()); - case EProcedureStatusTag::OutOfEnergy: - return OutOfEnergy(Value.GetAsOutOfEnergy()); case EProcedureStatusTag::InternalError: return InternalError(Value.GetAsInternalError()); default: @@ -609,7 +672,6 @@ struct SPACETIMEDBSDK_API FSpacetimeDBProcedureStatus } // -- Query helpers ---------------------- FORCEINLINE bool IsReturned() const { return Tag == EProcedureStatusTag::Returned; } - FORCEINLINE bool IsOutOfEnergy() const { return Tag == EProcedureStatusTag::OutOfEnergy; } FORCEINLINE bool IsInternalError() const { return Tag == EProcedureStatusTag::InternalError; } FORCEINLINE FSpacetimeDBUnit GetAsReturned() const @@ -618,12 +680,6 @@ struct SPACETIMEDBSDK_API FSpacetimeDBProcedureStatus return MessageData.Get(); } - FORCEINLINE FSpacetimeDBUnit GetAsOutOfEnergy() const - { - ensureMsgf(IsOutOfEnergy(), TEXT("MessageData does not hold OutOfEnergy!")); - return MessageData.Get(); - } - FORCEINLINE FString GetAsInternalError() const { ensureMsgf(IsInternalError(), TEXT("MessageData does not hold InternalError!")); @@ -639,8 +695,6 @@ struct SPACETIMEDBSDK_API FSpacetimeDBProcedureStatus { case EProcedureStatusTag::Returned: return GetAsReturned() == Other.GetAsReturned(); - case EProcedureStatusTag::OutOfEnergy: - return GetAsOutOfEnergy() == Other.GetAsOutOfEnergy(); case EProcedureStatusTag::InternalError: return GetAsInternalError() == Other.GetAsInternalError(); default: @@ -658,8 +712,6 @@ FORCEINLINE uint32 GetTypeHash(const FSpacetimeDBProcedureStatus& Status) { case EProcedureStatusTag::Returned: return HashCombine(TagHash, ::GetTypeHash(Status.GetAsReturned())); - case EProcedureStatusTag::OutOfEnergy: - return HashCombine(TagHash, ::GetTypeHash(Status.GetAsOutOfEnergy())); case EProcedureStatusTag::InternalError: return HashCombine(TagHash, GetTypeHash(Status.GetAsInternalError())); default: @@ -684,21 +736,6 @@ class SPACETIMEDBSDK_API USpacetimeDBProcedureStatusBpLib : public UBlueprintFun // We don't allow the raw value to be exported as GetAsReturned() from the ProcedureEventContext. - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus") - static FSpacetimeDBProcedureStatus OutOfEnergy(const FSpacetimeDBUnit& InValue) - { - return FSpacetimeDBProcedureStatus::OutOfEnergy(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") - static bool IsOutOfEnergy(const FSpacetimeDBProcedureStatus& InValue) { return InValue.IsOutOfEnergy(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") - static FSpacetimeDBUnit GetAsOutOfEnergy(const FSpacetimeDBProcedureStatus& InValue) - { - return InValue.GetAsOutOfEnergy(); - } - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus") static FSpacetimeDBProcedureStatus InternalError(const FString& InValue) { diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h index 62caa10efa4..e8c26b3a988 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBase.h @@ -9,11 +9,11 @@ #include "DBCache/TableAppliedDiff.h" #include "HAL/CriticalSection.h" #include "Containers/Queue.h" -#include "HAL/ThreadSafeBool.h" -#include "BSATN/UEBSATNHelpers.h" -#include "Connection/SetReducerFlags.h" -#include "Connection/Callback.h" -#include "LogCategory.h" +#include "HAL/ThreadSafeBool.h" +#include "BSATN/UEBSATNHelpers.h" +#include "Connection/Callback.h" +#include "LogCategory.h" +#include #include "DbConnectionBase.generated.h" @@ -29,7 +29,7 @@ class UProcedureCallbacks; #define UNBIND_DELEGATE_SAFE(DelegateVar, Object, ClassType, FunctionName) \ DelegateVar.Remove(Object, GET_FUNCTION_NAME_CHECKED(ClassType, FunctionName)) -/** Delegate called when the connection attempt fails. */ +/** Delegate called when the connection attempt fails. */ DECLARE_DYNAMIC_DELEGATE_OneParam( FOnConnectErrorDelegate, const FString&, ErrorMessage); @@ -42,33 +42,77 @@ DECLARE_DYNAMIC_DELEGATE_ThreeParams( const FString&, Token); /** Called when a connection closes. */ -DECLARE_DYNAMIC_DELEGATE_TwoParams( - FOnDisconnectBaseDelegate, - UDbConnectionBase*, Connection, - const FString&, Error); - - -/** Key used to index preprocessed table data without relying on row addresses */ -struct FPreprocessedTableKey -{ - uint32 TableId; - FString TableName; - - FPreprocessedTableKey() : TableId(0) {} - FPreprocessedTableKey(uint32 InId, const FString& InName) - : TableId(InId), TableName(InName) { - } - - friend bool operator==(const FPreprocessedTableKey& A, const FPreprocessedTableKey& B) - { - return A.TableId == B.TableId && A.TableName == B.TableName; - } -}; - -FORCEINLINE uint32 GetTypeHash(const FPreprocessedTableKey& Key) -{ - return HashCombine(GetTypeHash(Key.TableId), GetTypeHash(Key.TableName)); -} +DECLARE_DYNAMIC_DELEGATE_TwoParams( + FOnDisconnectBaseDelegate, + UDbConnectionBase*, Connection, + const FString&, Error); + +/** Runtime-compatible database update wrapper used by table-update pipeline. */ +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FDatabaseUpdateType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Tables; + + FORCEINLINE bool operator==(const FDatabaseUpdateType& Other) const + { + return Tables == Other.Tables; + } + + FORCEINLINE bool operator!=(const FDatabaseUpdateType& Other) const + { + return !(*this == Other); + } +}; + +FORCEINLINE uint32 GetTypeHash(const FDatabaseUpdateType& DatabaseUpdate) +{ + return GetTypeHash(DatabaseUpdate.Tables); +} + + +/** Key used to index preprocessed table data without relying on row addresses */ +struct FPreprocessedTableKey +{ + FString TableName; + + FPreprocessedTableKey() = default; + explicit FPreprocessedTableKey(const FString& InName) + : TableName(InName) { + } + + friend bool operator==(const FPreprocessedTableKey& A, const FPreprocessedTableKey& B) + { + return A.TableName == B.TableName; + } +}; + +FORCEINLINE uint32 GetTypeHash(const FPreprocessedTableKey& Key) +{ + return GetTypeHash(Key.TableName); +} + +template +struct THasOnDeleteDelegate : std::false_type +{ +}; + +template +struct THasOnDeleteDelegate> : std::true_type +{ +}; + +template +struct THasOnUpdateDelegate : std::false_type +{ +}; + +template +struct THasOnUpdateDelegate> : std::true_type +{ +}; UCLASS() class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGameObject @@ -112,12 +156,12 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam FSpacetimeDBConnectionId GetConnectionId() const; // Typed reducer call helper: hides BSATN bytes from callers. - template - void CallReducerTyped(const FString& Reducer, const ArgsStruct& Args, USetReducerFlagsBase* Flags) - { - TArray Bytes = UE::SpacetimeDB::Serialize(Args); - InternalCallReducer(Reducer, MoveTemp(Bytes), Flags); - } + template + uint32 CallReducerTyped(const FString& Reducer, const ArgsStruct& Args) + { + TArray Bytes = UE::SpacetimeDB::Serialize(Args); + return InternalCallReducer(Reducer, MoveTemp(Bytes)); + } template void CallProcedureTyped(const FString& ProcedureName, const ArgsStruct& Args, const FOnProcedureCompleteDelegate& Callback) @@ -192,12 +236,12 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam } //** Take preprocessed table row data. */ template - bool TakePreprocessedTableData(const FTableUpdateType& Update, TSharedPtr>& OutData) - { - FScopeLock Lock(&PreprocessedDataMutex); - FPreprocessedTableKey Key(Update.TableId, Update.TableName); - if (TArray>* Found = PreprocessedTableData.Find(Key)) - { + bool TakePreprocessedTableData(const FTableUpdateType& Update, TSharedPtr>& OutData) + { + FScopeLock Lock(&PreprocessedDataMutex); + FPreprocessedTableKey Key(Update.TableName); + if (TArray>* Found = PreprocessedTableData.Find(Key)) + { if (Found->Num() > 0) { OutData = StaticCastSharedPtr>((*Found)[0]); @@ -240,14 +284,16 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam virtual bool IsTickableInEditor() const override; - /** Internal handler that processes a single server message. */ - void ProcessServerMessage(const FServerMessageType& Message); - void PreProcessDatabaseUpdate(const FDatabaseUpdateType& Update); - /** Decompress and parse a raw message. */ - FServerMessageType PreProcessMessage(const TArray& Message); - bool DecompressPayload(ECompressableQueryUpdateTag Variant, const TArray& In, TArray& Out); - bool DecompressGzip(const TArray& InData, TArray& OutData); - bool DecompressBrotli(const TArray& InData, TArray& OutData); + /** Internal handler that processes a single server message. */ + void ProcessServerMessage(const FServerMessageType& Message); + void PreProcessDatabaseUpdate(const FDatabaseUpdateType& Update); + /** Decompress and parse a raw message. */ + bool PreProcessMessage(const TArray& Message, FServerMessageType& OutMessage); + bool DecompressPayload(uint8 Variant, const TArray& In, TArray& Out); + bool DecompressGzip(const TArray& InData, TArray& OutData); + bool DecompressBrotli(const TArray& InData, TArray& OutData); + void ClearPendingOperations(const FString& Reason); + void HandleProtocolViolation(const FString& ErrorMessage); /** Pending messages awaiting processing on the game thread. */ TArray PendingMessages; @@ -286,7 +332,7 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam void UnsubscribeInternal(USubscriptionHandleBase* Handle); /** Call a reducer on the connected SpacetimeDB instance. */ - void InternalCallReducer(const FString& Reducer, TArray Args, USetReducerFlagsBase* Flags); + uint32 InternalCallReducer(const FString& Reducer, TArray Args); /** Call a reducer on the connected SpacetimeDB instance. */ void InternalCallProcedure(const FString& ProcedureName, TArray Args, const FOnProcedureCompleteDelegate& Callback); @@ -316,20 +362,24 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam /** Apply updates for all registered tables using the provided context pointer */ void ApplyRegisteredTableUpdates(const FDatabaseUpdateType& Update, void* Context); - /** Called when a subscription is updated. */ - UPROPERTY() - TMap> ActiveSubscriptions; + /** Called when a subscription is updated. */ + UPROPERTY() + TMap> ActiveSubscriptions; + + /** Pending reducer call metadata keyed by request id for ReducerResult correlation. */ + UPROPERTY() + TMap PendingReducerCalls; UPROPERTY() TObjectPtr ProcedureCallbacks; - /** Get the next request id for a message. This is used to track requests and responses. */ - int32 NextRequestId; - /** Get the next subscription id for a subscription. This is used to track subscriptions and their responses. */ - int32 NextSubscriptionId; - /** Get the next request id for a message. This is used to track requests and responses. */ - int32 GetNextRequestId(); - /** Get the next subscription id for a subscription. This is used to track subscriptions and their responses. */ - int32 GetNextSubscriptionId(); + /** Get the next request id for a message. This is used to track requests and responses. */ + uint32 NextRequestId; + /** Get the next subscription id for a subscription. This is used to track subscriptions and their responses. */ + uint32 NextSubscriptionId; + /** Get the next request id for a message. This is used to track requests and responses. */ + uint32 GetNextRequestId(); + /** Get the next subscription id for a subscription. This is used to track subscriptions and their responses. */ + uint32 GetNextSubscriptionId(); /** The WebSocket manager used to connect to the server. */ UPROPERTY() @@ -355,8 +405,10 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam UPROPERTY() FSpacetimeDBConnectionId ConnectionId; - UPROPERTY() - bool bIsAutoTicking = false; + UPROPERTY() + bool bIsAutoTicking = false; + /** Guard to avoid repeatedly handling the same fatal protocol error. */ + FThreadSafeBool bProtocolViolationHandled = false; UPROPERTY() FOnConnectErrorDelegate OnConnectErrorDelegate; @@ -380,25 +432,30 @@ class SPACETIMEDBSDK_API UDbConnectionBase : public UObject, public FTickableGam } } - // If the table has a delete delegate, broadcast deletes - if (Table->OnDelete.IsBound()) - { - for (const TPair, RowType>& Pair : Diff.Deletes) - { - Table->OnDelete.Broadcast(Context, Pair.Value); - } - } - - // If the table has an update delegate, broadcast updates - if (Table->OnUpdate.IsBound()) - { - int32 Count = FMath::Min(Diff.UpdateDeletes.Num(), Diff.UpdateInserts.Num()); - for (int32 Index = 0; Index < Count; ++Index) - { - const RowType& OldRow = Diff.UpdateDeletes[Index]; - const RowType& NewRow = Diff.UpdateInserts[Index]; - Table->OnUpdate.Broadcast(Context, OldRow, NewRow); - } - } - } -}; + // Event tables intentionally omit delete/update delegates. + if constexpr (THasOnDeleteDelegate::value) + { + if (Table->OnDelete.IsBound()) + { + for (const TPair, RowType>& Pair : Diff.Deletes) + { + Table->OnDelete.Broadcast(Context, Pair.Value); + } + } + } + + if constexpr (THasOnUpdateDelegate::value) + { + if (Table->OnUpdate.IsBound()) + { + int32 Count = FMath::Min(Diff.UpdateDeletes.Num(), Diff.UpdateInserts.Num()); + for (int32 Index = 0; Index < Count; ++Index) + { + const RowType& OldRow = Diff.UpdateDeletes[Index]; + const RowType& NewRow = Diff.UpdateInserts[Index]; + Table->OnUpdate.Broadcast(Context, OldRow, NewRow); + } + } + } + } +}; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBuilder.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBuilder.h index 37b6c3ae76a..a828570bae1 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBuilder.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/DbConnectionBuilder.h @@ -3,7 +3,6 @@ #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Connection/DbConnectionBase.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" #include "DbConnectionBuilder.generated.h" UCLASS(BlueprintType) diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/README.md b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/README.md index 806c02675fa..85258bc9c36 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/README.md +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/README.md @@ -4,10 +4,9 @@ This folder contains the classes used to open and manage a connection to a Space ## Files -- `Callback.h` Defines `UStatus` and related enums used to report reducer results and statuses to the user. -- `Credentials.h` Static helper functions for persisting authentication tokens via Unreal's config system. -- `DbConnectionBase.h` Core connection object. Handles websocket events, table caches and reducer calls. Used as a base class for generated `DbConnection` class. -- `DbConnectionBuilder.h` Fluent builder used to configure a connection instance and bind event delegates. Used as a base class for generated `DbConnectionBuilder` class. -- `SetReducerFlags.h` Container for flags controlling reducer call behaviour (e.g. disabling/enabling success notifications). -- `Subscription.h` Classes for constructing and managing query subscriptions. -- `Websocket.h` Wrapper around UE's `IWebSocket` that sends/receives messages. \ No newline at end of file +- `Callback.h` � Defines `UStatus` and related enums used to report reducer results and statuses to the user. +- `Credentials.h` � Static helper functions for persisting authentication tokens via Unreal's config system. +- `DbConnectionBase.h` � Core connection object. Handles websocket events, table caches and reducer calls. Used as a base class for generated `DbConnection` class. +- `DbConnectionBuilder.h` � Fluent builder used to configure a connection instance and bind event delegates. Used as a base class for generated `DbConnectionBuilder` class. +- `Subscription.h` � Classes for constructing and managing query subscriptions. +- `Websocket.h` � Wrapper around UE's `IWebSocket` that sends/receives messages. diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/SetReducerFlags.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/SetReducerFlags.h deleted file mode 100644 index 27b8e26a93f..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/SetReducerFlags.h +++ /dev/null @@ -1,31 +0,0 @@ - -#pragma once - -#include "CoreMinimal.h" -#include "SetReducerFlags.generated.h" - - -/** Flags controlling reducer call behavior */ -UENUM(BlueprintType) -enum class ECallReducerFlags : uint8 -{ - /** Default behavior - server will send full update and success notification */ - FullUpdate UMETA(DisplayName = "FullUpdate"), - - /** Do not send success notification after reducer completes */ - NoSuccessNotify UMETA(DisplayName = "NoSuccessNotify"), -}; - -/** Container for per-reducer call flags */ -UCLASS(BlueprintType) -class SPACETIMEDBSDK_API USetReducerFlagsBase : public UObject -{ - GENERATED_BODY() - -protected: - - friend class UDbConnectionBase; - - UPROPERTY() - TMap FlagMap; -}; \ No newline at end of file diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Subscription.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Subscription.h index ba9096a22ee..18985312953 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Subscription.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Subscription.h @@ -70,7 +70,7 @@ class SPACETIMEDBSDK_API USubscriptionHandleBase : public UObject FSubscriptionEventDelegate EndDelegate; /** Identifier for this subscription */ - int32 QueryId = -1; + uint32 QuerySetId = 0; friend class USubscriptionBuilderBase; friend class UDbConnectionBase; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Websocket.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Websocket.h index 8ac2b396416..b9e6f91378d 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Websocket.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/Connection/Websocket.h @@ -1,10 +1,9 @@ #pragma once -#include "CoreMinimal.h" -#include "IWebSocket.h" -#include "ModuleBindings/Types/ServerMessageType.g.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" -#include "JsonObjectConverter.h" // for JSON debugging helpers +#include "CoreMinimal.h" +#include "IWebSocket.h" +#include "ModuleBindings/Types/ServerMessageType.g.h" +#include "JsonObjectConverter.h" // for JSON debugging helpers #include "Async/Async.h" #include "HAL/CriticalSection.h" #include "Misc/ScopeLock.h" @@ -111,13 +110,6 @@ class SPACETIMEDBSDK_API UWebsocketManager : public UObject /** Handler for socket close */ void HandleClosed(int32 StatusCode, const FString& Reason, bool bWasClean); - /** Decompresses a payload based on compression variant */ - bool DecompressPayload(ECompressableQueryUpdateTag Variant, const TArray& In, TArray& Out); - /** GZip decompression helper */ - bool DecompressGzip(const TArray& InData, TArray& OutData); - /** Brotli decompression helper */ - bool DecompressBrotli(const TArray& InData, TArray& OutData); - FString InitToken; /** Buffer used to accumulate binary fragments until a complete message @@ -172,4 +164,4 @@ static void LogAsJson(const StructType& InStruct, const TCHAR* TagName) UE_LOG(LogSpacetimeDb_Connection, Warning, TEXT("[%s] Failed to serialize object: %s"), TagName, *ObjectName); } } -} \ No newline at end of file +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalString.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalQueryRows.g.h similarity index 56% rename from sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalString.g.h rename to sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalQueryRows.g.h index 8f152dad9c3..7a26f02d506 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalString.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Optionals/SpacetimeDbSdkOptionalQueryRows.g.h @@ -4,10 +4,11 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "SpacetimeDbSdkOptionalString.g.generated.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "SpacetimeDbSdkOptionalQueryRows.g.generated.h" USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FSpacetimeDbSdkOptionalString +struct SPACETIMEDBSDK_API FSpacetimeDbSdkOptionalQueryRows { GENERATED_BODY() @@ -15,35 +16,35 @@ struct SPACETIMEDBSDK_API FSpacetimeDbSdkOptionalString bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FString Value; + FQueryRowsType Value; - FSpacetimeDbSdkOptionalString() = default; + FSpacetimeDbSdkOptionalQueryRows() = default; - explicit FSpacetimeDbSdkOptionalString(const FString& InValue) + explicit FSpacetimeDbSdkOptionalQueryRows(const FQueryRowsType& InValue) : bHasValue(true), Value(InValue) {} bool IsSet() const { return bHasValue; } void Reset() { bHasValue = false; } - FORCEINLINE bool operator==(const FSpacetimeDbSdkOptionalString& Other) const + FORCEINLINE bool operator==(const FSpacetimeDbSdkOptionalQueryRows& Other) const { if (bHasValue != Other.bHasValue) return false; return !bHasValue || Value == Other.Value; } - FORCEINLINE bool operator!=(const FSpacetimeDbSdkOptionalString& Other) const + FORCEINLINE bool operator!=(const FSpacetimeDbSdkOptionalQueryRows& Other) const { return !(*this == Other); } }; /** - * Custom hash function for FSpacetimeDbSdkOptionalString. + * Custom hash function for FSpacetimeDbSdkOptionalQueryRows. * Hashes the HasValue flag and the Value if present. - * @param Optional The FSpacetimeDbSdkOptionalString instance to hash. + * @param Optional The FSpacetimeDbSdkOptionalQueryRows instance to hash. * @return The combined hash value. */ -FORCEINLINE uint32 GetTypeHash(const FSpacetimeDbSdkOptionalString& Optional) +FORCEINLINE uint32 GetTypeHash(const FSpacetimeDbSdkOptionalQueryRows& Optional) { uint32 Hash = GetTypeHash(Optional.bHasValue); if (Optional.bHasValue) @@ -55,7 +56,7 @@ FORCEINLINE uint32 GetTypeHash(const FSpacetimeDbSdkOptionalString& Optional) namespace UE::SpacetimeDB { - UE_SPACETIMEDB_ENABLE_TARRAY(FSpacetimeDbSdkOptionalString); + UE_SPACETIMEDB_ENABLE_TARRAY(FSpacetimeDbSdkOptionalQueryRows); - UE_SPACETIMEDB_OPTIONAL(FSpacetimeDbSdkOptionalString, bHasValue, Value); + UE_SPACETIMEDB_OPTIONAL(FSpacetimeDbSdkOptionalQueryRows, bHasValue, Value); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Results/SpacetimeDbSdkResultQueryRowsString.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Results/SpacetimeDbSdkResultQueryRowsString.g.h new file mode 100644 index 00000000000..2f3d2ecb459 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Results/SpacetimeDbSdkResultQueryRowsString.g.h @@ -0,0 +1,101 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "SpacetimeDbSdkResultQueryRowsString.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FSpacetimeDbSdkResultQueryRowsString +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + bool bIsOk = false; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) + FQueryRowsType OkValue; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) + FString ErrValue; + + FSpacetimeDbSdkResultQueryRowsString() = default; + + static FSpacetimeDbSdkResultQueryRowsString Ok(const FQueryRowsType& InValue) + { + FSpacetimeDbSdkResultQueryRowsString Result; + Result.bIsOk = true; + Result.OkValue = InValue; + return Result; + } + + static FSpacetimeDbSdkResultQueryRowsString Err(const FString& InValue) + { + FSpacetimeDbSdkResultQueryRowsString Result; + Result.bIsOk = false; + Result.ErrValue = InValue; + return Result; + } + + bool IsOk() const { return bIsOk; } + bool IsErr() const { return !bIsOk; } + + const FQueryRowsType& GetOk() const + { + check(bIsOk); + return OkValue; + } + + const FString& GetErr() const + { + check(!bIsOk); + return ErrValue; + } + + FORCEINLINE bool operator==(const FSpacetimeDbSdkResultQueryRowsString& Other) const + { + if (bIsOk != Other.bIsOk) return false; + if (bIsOk) + { + return OkValue == Other.OkValue; + } + else + { + return ErrValue == Other.ErrValue; + } + } + + FORCEINLINE bool operator!=(const FSpacetimeDbSdkResultQueryRowsString& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FSpacetimeDbSdkResultQueryRowsString. + * Hashes the bIsOk flag and the appropriate value. + * @param Result The FSpacetimeDbSdkResultQueryRowsString instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FSpacetimeDbSdkResultQueryRowsString& Result) +{ + uint32 Hash = GetTypeHash(Result.bIsOk); + if (Result.bIsOk) + { + Hash = HashCombine(Hash, GetTypeHash(Result.OkValue)); + } + else + { + Hash = HashCombine(Hash, GetTypeHash(Result.ErrValue)); + } + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FSpacetimeDbSdkResultQueryRowsString); + + UE_SPACETIMEDB_RESULT(FSpacetimeDbSdkResultQueryRowsString, bIsOk, OkValue, ErrValue); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallProcedureType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallProcedureType.g.h index 10e8a529ba0..5584492e69f 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallProcedureType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallProcedureType.g.h @@ -11,21 +11,21 @@ struct SPACETIMEDBSDK_API FCallProcedureType { GENERATED_BODY() - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString Procedure; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Args; - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 RequestId = 0; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") uint8 Flags = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString Procedure; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Args; + FORCEINLINE bool operator==(const FCallProcedureType& Other) const { - return Procedure == Other.Procedure && Args == Other.Args && RequestId == Other.RequestId && Flags == Other.Flags; + return RequestId == Other.RequestId && Flags == Other.Flags && Procedure == Other.Procedure && Args == Other.Args; } FORCEINLINE bool operator!=(const FCallProcedureType& Other) const @@ -42,10 +42,10 @@ struct SPACETIMEDBSDK_API FCallProcedureType */ FORCEINLINE uint32 GetTypeHash(const FCallProcedureType& CallProcedureType) { - uint32 Hash = GetTypeHash(CallProcedureType.Procedure); - Hash = HashCombine(Hash, GetTypeHash(CallProcedureType.Args)); - Hash = HashCombine(Hash, GetTypeHash(CallProcedureType.RequestId)); + uint32 Hash = GetTypeHash(CallProcedureType.RequestId); Hash = HashCombine(Hash, GetTypeHash(CallProcedureType.Flags)); + Hash = HashCombine(Hash, GetTypeHash(CallProcedureType.Procedure)); + Hash = HashCombine(Hash, GetTypeHash(CallProcedureType.Args)); return Hash; } @@ -53,5 +53,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FCallProcedureType); - UE_SPACETIMEDB_STRUCT(FCallProcedureType, Procedure, Args, RequestId, Flags); + UE_SPACETIMEDB_STRUCT(FCallProcedureType, RequestId, Flags, Procedure, Args); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallReducerType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallReducerType.g.h index c8221f41d65..da1431282d6 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallReducerType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CallReducerType.g.h @@ -11,21 +11,21 @@ struct SPACETIMEDBSDK_API FCallReducerType { GENERATED_BODY() - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString Reducer; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Args; - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 RequestId = 0; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") uint8 Flags = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString Reducer; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Args; + FORCEINLINE bool operator==(const FCallReducerType& Other) const { - return Reducer == Other.Reducer && Args == Other.Args && RequestId == Other.RequestId && Flags == Other.Flags; + return RequestId == Other.RequestId && Flags == Other.Flags && Reducer == Other.Reducer && Args == Other.Args; } FORCEINLINE bool operator!=(const FCallReducerType& Other) const @@ -42,10 +42,10 @@ struct SPACETIMEDBSDK_API FCallReducerType */ FORCEINLINE uint32 GetTypeHash(const FCallReducerType& CallReducerType) { - uint32 Hash = GetTypeHash(CallReducerType.Reducer); - Hash = HashCombine(Hash, GetTypeHash(CallReducerType.Args)); - Hash = HashCombine(Hash, GetTypeHash(CallReducerType.RequestId)); + uint32 Hash = GetTypeHash(CallReducerType.RequestId); Hash = HashCombine(Hash, GetTypeHash(CallReducerType.Flags)); + Hash = HashCombine(Hash, GetTypeHash(CallReducerType.Reducer)); + Hash = HashCombine(Hash, GetTypeHash(CallReducerType.Args)); return Hash; } @@ -53,5 +53,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FCallReducerType); - UE_SPACETIMEDB_STRUCT(FCallReducerType, Reducer, Args, RequestId, Flags); + UE_SPACETIMEDB_STRUCT(FCallReducerType, RequestId, Flags, Reducer, Args); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ClientMessageType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ClientMessageType.g.h index bc2d3a23330..08315cfcf36 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ClientMessageType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ClientMessageType.g.h @@ -4,27 +4,21 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/SubscribeMultiType.g.h" +#include "ModuleBindings/Types/UnsubscribeType.g.h" #include "ModuleBindings/Types/CallReducerType.g.h" -#include "ModuleBindings/Types/OneOffQueryType.g.h" #include "ModuleBindings/Types/CallProcedureType.g.h" -#include "ModuleBindings/Types/UnsubscribeType.g.h" #include "ModuleBindings/Types/SubscribeType.g.h" #include "Kismet/BlueprintFunctionLibrary.h" -#include "ModuleBindings/Types/SubscribeSingleType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiType.g.h" +#include "ModuleBindings/Types/OneOffQueryType.g.h" #include "ClientMessageType.g.generated.h" UENUM(BlueprintType) enum class EClientMessageTag : uint8 { - CallReducer, Subscribe, - OneOffQuery, - SubscribeSingle, - SubscribeMulti, Unsubscribe, - UnsubscribeMulti, + OneOffQuery, + CallReducer, CallProcedure }; @@ -36,19 +30,11 @@ struct SPACETIMEDBSDK_API FClientMessageType public: FClientMessageType() = default; - TVariant MessageData; + TVariant MessageData; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + UPROPERTY(BlueprintReadOnly) EClientMessageTag Tag = static_cast(0); - static FClientMessageType CallReducer(const FCallReducerType& Value) - { - FClientMessageType Obj; - Obj.Tag = EClientMessageTag::CallReducer; - Obj.MessageData.Set(Value); - return Obj; - } - static FClientMessageType Subscribe(const FSubscribeType& Value) { FClientMessageType Obj; @@ -57,43 +43,27 @@ struct SPACETIMEDBSDK_API FClientMessageType return Obj; } - static FClientMessageType OneOffQuery(const FOneOffQueryType& Value) - { - FClientMessageType Obj; - Obj.Tag = EClientMessageTag::OneOffQuery; - Obj.MessageData.Set(Value); - return Obj; - } - - static FClientMessageType SubscribeSingle(const FSubscribeSingleType& Value) - { - FClientMessageType Obj; - Obj.Tag = EClientMessageTag::SubscribeSingle; - Obj.MessageData.Set(Value); - return Obj; - } - - static FClientMessageType SubscribeMulti(const FSubscribeMultiType& Value) + static FClientMessageType Unsubscribe(const FUnsubscribeType& Value) { FClientMessageType Obj; - Obj.Tag = EClientMessageTag::SubscribeMulti; - Obj.MessageData.Set(Value); + Obj.Tag = EClientMessageTag::Unsubscribe; + Obj.MessageData.Set(Value); return Obj; } - static FClientMessageType Unsubscribe(const FUnsubscribeType& Value) + static FClientMessageType OneOffQuery(const FOneOffQueryType& Value) { FClientMessageType Obj; - Obj.Tag = EClientMessageTag::Unsubscribe; - Obj.MessageData.Set(Value); + Obj.Tag = EClientMessageTag::OneOffQuery; + Obj.MessageData.Set(Value); return Obj; } - static FClientMessageType UnsubscribeMulti(const FUnsubscribeMultiType& Value) + static FClientMessageType CallReducer(const FCallReducerType& Value) { FClientMessageType Obj; - Obj.Tag = EClientMessageTag::UnsubscribeMulti; - Obj.MessageData.Set(Value); + Obj.Tag = EClientMessageTag::CallReducer; + Obj.MessageData.Set(Value); return Obj; } @@ -105,14 +75,6 @@ struct SPACETIMEDBSDK_API FClientMessageType return Obj; } - FORCEINLINE bool IsCallReducer() const { return Tag == EClientMessageTag::CallReducer; } - - FORCEINLINE FCallReducerType GetAsCallReducer() const - { - ensureMsgf(IsCallReducer(), TEXT("MessageData does not hold CallReducer!")); - return MessageData.Get(); - } - FORCEINLINE bool IsSubscribe() const { return Tag == EClientMessageTag::Subscribe; } FORCEINLINE FSubscribeType GetAsSubscribe() const @@ -121,30 +83,6 @@ struct SPACETIMEDBSDK_API FClientMessageType return MessageData.Get(); } - FORCEINLINE bool IsOneOffQuery() const { return Tag == EClientMessageTag::OneOffQuery; } - - FORCEINLINE FOneOffQueryType GetAsOneOffQuery() const - { - ensureMsgf(IsOneOffQuery(), TEXT("MessageData does not hold OneOffQuery!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsSubscribeSingle() const { return Tag == EClientMessageTag::SubscribeSingle; } - - FORCEINLINE FSubscribeSingleType GetAsSubscribeSingle() const - { - ensureMsgf(IsSubscribeSingle(), TEXT("MessageData does not hold SubscribeSingle!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsSubscribeMulti() const { return Tag == EClientMessageTag::SubscribeMulti; } - - FORCEINLINE FSubscribeMultiType GetAsSubscribeMulti() const - { - ensureMsgf(IsSubscribeMulti(), TEXT("MessageData does not hold SubscribeMulti!")); - return MessageData.Get(); - } - FORCEINLINE bool IsUnsubscribe() const { return Tag == EClientMessageTag::Unsubscribe; } FORCEINLINE FUnsubscribeType GetAsUnsubscribe() const @@ -153,12 +91,20 @@ struct SPACETIMEDBSDK_API FClientMessageType return MessageData.Get(); } - FORCEINLINE bool IsUnsubscribeMulti() const { return Tag == EClientMessageTag::UnsubscribeMulti; } + FORCEINLINE bool IsOneOffQuery() const { return Tag == EClientMessageTag::OneOffQuery; } - FORCEINLINE FUnsubscribeMultiType GetAsUnsubscribeMulti() const + FORCEINLINE FOneOffQueryType GetAsOneOffQuery() const { - ensureMsgf(IsUnsubscribeMulti(), TEXT("MessageData does not hold UnsubscribeMulti!")); - return MessageData.Get(); + ensureMsgf(IsOneOffQuery(), TEXT("MessageData does not hold OneOffQuery!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsCallReducer() const { return Tag == EClientMessageTag::CallReducer; } + + FORCEINLINE FCallReducerType GetAsCallReducer() const + { + ensureMsgf(IsCallReducer(), TEXT("MessageData does not hold CallReducer!")); + return MessageData.Get(); } FORCEINLINE bool IsCallProcedure() const { return Tag == EClientMessageTag::CallProcedure; } @@ -176,20 +122,14 @@ struct SPACETIMEDBSDK_API FClientMessageType switch (Tag) { - case EClientMessageTag::CallReducer: - return GetAsCallReducer() == Other.GetAsCallReducer(); case EClientMessageTag::Subscribe: return GetAsSubscribe() == Other.GetAsSubscribe(); - case EClientMessageTag::OneOffQuery: - return GetAsOneOffQuery() == Other.GetAsOneOffQuery(); - case EClientMessageTag::SubscribeSingle: - return GetAsSubscribeSingle() == Other.GetAsSubscribeSingle(); - case EClientMessageTag::SubscribeMulti: - return GetAsSubscribeMulti() == Other.GetAsSubscribeMulti(); case EClientMessageTag::Unsubscribe: return GetAsUnsubscribe() == Other.GetAsUnsubscribe(); - case EClientMessageTag::UnsubscribeMulti: - return GetAsUnsubscribeMulti() == Other.GetAsUnsubscribeMulti(); + case EClientMessageTag::OneOffQuery: + return GetAsOneOffQuery() == Other.GetAsOneOffQuery(); + case EClientMessageTag::CallReducer: + return GetAsCallReducer() == Other.GetAsCallReducer(); case EClientMessageTag::CallProcedure: return GetAsCallProcedure() == Other.GetAsCallProcedure(); default: @@ -214,13 +154,10 @@ FORCEINLINE uint32 GetTypeHash(const FClientMessageType& ClientMessage) const uint32 TagHash = GetTypeHash(static_cast(ClientMessage.Tag)); switch (ClientMessage.Tag) { - case EClientMessageTag::CallReducer: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsCallReducer())); case EClientMessageTag::Subscribe: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsSubscribe())); - case EClientMessageTag::OneOffQuery: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsOneOffQuery())); - case EClientMessageTag::SubscribeSingle: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsSubscribeSingle())); - case EClientMessageTag::SubscribeMulti: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsSubscribeMulti())); case EClientMessageTag::Unsubscribe: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsUnsubscribe())); - case EClientMessageTag::UnsubscribeMulti: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsUnsubscribeMulti())); + case EClientMessageTag::OneOffQuery: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsOneOffQuery())); + case EClientMessageTag::CallReducer: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsCallReducer())); case EClientMessageTag::CallProcedure: return HashCombine(TagHash, ::GetTypeHash(ClientMessage.GetAsCallProcedure())); default: return TagHash; } @@ -234,13 +171,10 @@ namespace UE::SpacetimeDB FClientMessageType, EClientMessageTag, MessageData, - CallReducer, FCallReducerType, Subscribe, FSubscribeType, - OneOffQuery, FOneOffQueryType, - SubscribeSingle, FSubscribeSingleType, - SubscribeMulti, FSubscribeMultiType, Unsubscribe, FUnsubscribeType, - UnsubscribeMulti, FUnsubscribeMultiType, + OneOffQuery, FOneOffQueryType, + CallReducer, FCallReducerType, CallProcedure, FCallProcedureType ); } @@ -251,21 +185,6 @@ class SPACETIMEDBSDK_API UClientMessageBpLib : public UBlueprintFunctionLibrary GENERATED_BODY() private: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType CallReducer(const FCallReducerType& InValue) - { - return FClientMessageType::CallReducer(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsCallReducer(const FClientMessageType& InValue) { return InValue.IsCallReducer(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FCallReducerType GetAsCallReducer(const FClientMessageType& InValue) - { - return InValue.GetAsCallReducer(); - } - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") static FClientMessageType Subscribe(const FSubscribeType& InValue) { @@ -282,78 +201,48 @@ class SPACETIMEDBSDK_API UClientMessageBpLib : public UBlueprintFunctionLibrary } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType OneOffQuery(const FOneOffQueryType& InValue) - { - return FClientMessageType::OneOffQuery(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsOneOffQuery(const FClientMessageType& InValue) { return InValue.IsOneOffQuery(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FOneOffQueryType GetAsOneOffQuery(const FClientMessageType& InValue) - { - return InValue.GetAsOneOffQuery(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType SubscribeSingle(const FSubscribeSingleType& InValue) - { - return FClientMessageType::SubscribeSingle(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsSubscribeSingle(const FClientMessageType& InValue) { return InValue.IsSubscribeSingle(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FSubscribeSingleType GetAsSubscribeSingle(const FClientMessageType& InValue) - { - return InValue.GetAsSubscribeSingle(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType SubscribeMulti(const FSubscribeMultiType& InValue) + static FClientMessageType Unsubscribe(const FUnsubscribeType& InValue) { - return FClientMessageType::SubscribeMulti(InValue); + return FClientMessageType::Unsubscribe(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsSubscribeMulti(const FClientMessageType& InValue) { return InValue.IsSubscribeMulti(); } + static bool IsUnsubscribe(const FClientMessageType& InValue) { return InValue.IsUnsubscribe(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FSubscribeMultiType GetAsSubscribeMulti(const FClientMessageType& InValue) + static FUnsubscribeType GetAsUnsubscribe(const FClientMessageType& InValue) { - return InValue.GetAsSubscribeMulti(); + return InValue.GetAsUnsubscribe(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType Unsubscribe(const FUnsubscribeType& InValue) + static FClientMessageType OneOffQuery(const FOneOffQueryType& InValue) { - return FClientMessageType::Unsubscribe(InValue); + return FClientMessageType::OneOffQuery(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsUnsubscribe(const FClientMessageType& InValue) { return InValue.IsUnsubscribe(); } + static bool IsOneOffQuery(const FClientMessageType& InValue) { return InValue.IsOneOffQuery(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FUnsubscribeType GetAsUnsubscribe(const FClientMessageType& InValue) + static FOneOffQueryType GetAsOneOffQuery(const FClientMessageType& InValue) { - return InValue.GetAsUnsubscribe(); + return InValue.GetAsOneOffQuery(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") - static FClientMessageType UnsubscribeMulti(const FUnsubscribeMultiType& InValue) + static FClientMessageType CallReducer(const FCallReducerType& InValue) { - return FClientMessageType::UnsubscribeMulti(InValue); + return FClientMessageType::CallReducer(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static bool IsUnsubscribeMulti(const FClientMessageType& InValue) { return InValue.IsUnsubscribeMulti(); } + static bool IsCallReducer(const FClientMessageType& InValue) { return InValue.IsCallReducer(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ClientMessage") - static FUnsubscribeMultiType GetAsUnsubscribeMulti(const FClientMessageType& InValue) + static FCallReducerType GetAsCallReducer(const FClientMessageType& InValue) { - return InValue.GetAsUnsubscribeMulti(); + return InValue.GetAsCallReducer(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ClientMessage") diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CompressableQueryUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CompressableQueryUpdateType.g.h deleted file mode 100644 index 7ffeefbd0a3..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/CompressableQueryUpdateType.g.h +++ /dev/null @@ -1,187 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryUpdateType.g.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "CompressableQueryUpdateType.g.generated.h" - -UENUM(BlueprintType) -enum class ECompressableQueryUpdateTag : uint8 -{ - Uncompressed, - Brotli, - Gzip -}; - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FCompressableQueryUpdateType -{ - GENERATED_BODY() - -public: - FCompressableQueryUpdateType() = default; - - TVariant> MessageData; - - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - ECompressableQueryUpdateTag Tag = static_cast(0); - - static FCompressableQueryUpdateType Uncompressed(const FQueryUpdateType& Value) - { - FCompressableQueryUpdateType Obj; - Obj.Tag = ECompressableQueryUpdateTag::Uncompressed; - Obj.MessageData.Set(Value); - return Obj; - } - - static FCompressableQueryUpdateType Brotli(const TArray& Value) - { - FCompressableQueryUpdateType Obj; - Obj.Tag = ECompressableQueryUpdateTag::Brotli; - Obj.MessageData.Set>(Value); - return Obj; - } - - static FCompressableQueryUpdateType Gzip(const TArray& Value) - { - FCompressableQueryUpdateType Obj; - Obj.Tag = ECompressableQueryUpdateTag::Gzip; - Obj.MessageData.Set>(Value); - return Obj; - } - - FORCEINLINE bool IsUncompressed() const { return Tag == ECompressableQueryUpdateTag::Uncompressed; } - - FORCEINLINE FQueryUpdateType GetAsUncompressed() const - { - ensureMsgf(IsUncompressed(), TEXT("MessageData does not hold Uncompressed!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsBrotli() const { return Tag == ECompressableQueryUpdateTag::Brotli; } - - FORCEINLINE TArray GetAsBrotli() const - { - ensureMsgf(IsBrotli(), TEXT("MessageData does not hold Brotli!")); - return MessageData.Get>(); - } - - FORCEINLINE bool IsGzip() const { return Tag == ECompressableQueryUpdateTag::Gzip; } - - FORCEINLINE TArray GetAsGzip() const - { - ensureMsgf(IsGzip(), TEXT("MessageData does not hold Gzip!")); - return MessageData.Get>(); - } - - // Inline equality operators - FORCEINLINE bool operator==(const FCompressableQueryUpdateType& Other) const - { - if (Tag != Other.Tag) return false; - - switch (Tag) - { - case ECompressableQueryUpdateTag::Uncompressed: - return GetAsUncompressed() == Other.GetAsUncompressed(); - case ECompressableQueryUpdateTag::Brotli: - return GetAsBrotli() == Other.GetAsBrotli(); - case ECompressableQueryUpdateTag::Gzip: - return GetAsGzip() == Other.GetAsGzip(); - default: - return false; - } - } - - FORCEINLINE bool operator!=(const FCompressableQueryUpdateType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FCompressableQueryUpdateType. - * Combines the hashes of all fields that are compared in operator==. - * @param CompressableQueryUpdateType The FCompressableQueryUpdateType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FCompressableQueryUpdateType& CompressableQueryUpdate) -{ - const uint32 TagHash = GetTypeHash(static_cast(CompressableQueryUpdate.Tag)); - switch (CompressableQueryUpdate.Tag) - { - case ECompressableQueryUpdateTag::Uncompressed: return HashCombine(TagHash, ::GetTypeHash(CompressableQueryUpdate.GetAsUncompressed())); - case ECompressableQueryUpdateTag::Brotli: return HashCombine(TagHash, ::GetTypeHash(CompressableQueryUpdate.GetAsBrotli())); - case ECompressableQueryUpdateTag::Gzip: return HashCombine(TagHash, ::GetTypeHash(CompressableQueryUpdate.GetAsGzip())); - default: return TagHash; - } -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FCompressableQueryUpdateType); - - UE_SPACETIMEDB_TAGGED_ENUM( - FCompressableQueryUpdateType, - ECompressableQueryUpdateTag, - MessageData, - Uncompressed, FQueryUpdateType, - Brotli, TArray, - Gzip, TArray - ); -} - -UCLASS() -class SPACETIMEDBSDK_API UCompressableQueryUpdateBpLib : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -private: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|CompressableQueryUpdate") - static FCompressableQueryUpdateType Uncompressed(const FQueryUpdateType& InValue) - { - return FCompressableQueryUpdateType::Uncompressed(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static bool IsUncompressed(const FCompressableQueryUpdateType& InValue) { return InValue.IsUncompressed(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static FQueryUpdateType GetAsUncompressed(const FCompressableQueryUpdateType& InValue) - { - return InValue.GetAsUncompressed(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|CompressableQueryUpdate") - static FCompressableQueryUpdateType Brotli(const TArray& InValue) - { - return FCompressableQueryUpdateType::Brotli(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static bool IsBrotli(const FCompressableQueryUpdateType& InValue) { return InValue.IsBrotli(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static TArray GetAsBrotli(const FCompressableQueryUpdateType& InValue) - { - return InValue.GetAsBrotli(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|CompressableQueryUpdate") - static FCompressableQueryUpdateType Gzip(const TArray& InValue) - { - return FCompressableQueryUpdateType::Gzip(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static bool IsGzip(const FCompressableQueryUpdateType& InValue) { return InValue.IsGzip(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|CompressableQueryUpdate") - static TArray GetAsGzip(const FCompressableQueryUpdateType& InValue) - { - return InValue.GetAsGzip(); - } - -}; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/DatabaseUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/DatabaseUpdateType.g.h deleted file mode 100644 index 4342fde61d0..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/DatabaseUpdateType.g.h +++ /dev/null @@ -1,46 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/TableUpdateType.g.h" -#include "DatabaseUpdateType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FDatabaseUpdateType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Tables; - - FORCEINLINE bool operator==(const FDatabaseUpdateType& Other) const - { - return Tables == Other.Tables; - } - - FORCEINLINE bool operator!=(const FDatabaseUpdateType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FDatabaseUpdateType. - * Combines the hashes of all fields that are compared in operator==. - * @param DatabaseUpdateType The FDatabaseUpdateType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FDatabaseUpdateType& DatabaseUpdateType) -{ - uint32 Hash = GetTypeHash(DatabaseUpdateType.Tables); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FDatabaseUpdateType); - - UE_SPACETIMEDB_STRUCT(FDatabaseUpdateType, Tables); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EnergyQuantaType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EnergyQuantaType.g.h deleted file mode 100644 index 3183608322f..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EnergyQuantaType.g.h +++ /dev/null @@ -1,46 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "Types/Builtins.h" -#include "EnergyQuantaType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FEnergyQuantaType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBUInt128 Quanta; - - FORCEINLINE bool operator==(const FEnergyQuantaType& Other) const - { - return Quanta == Other.Quanta; - } - - FORCEINLINE bool operator!=(const FEnergyQuantaType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FEnergyQuantaType. - * Combines the hashes of all fields that are compared in operator==. - * @param EnergyQuantaType The FEnergyQuantaType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FEnergyQuantaType& EnergyQuantaType) -{ - uint32 Hash = GetTypeHash(EnergyQuantaType.Quanta); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FEnergyQuantaType); - - UE_SPACETIMEDB_STRUCT(FEnergyQuantaType, Quanta); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EventTableRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EventTableRowsType.g.h new file mode 100644 index 00000000000..b333d4d17ff --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/EventTableRowsType.g.h @@ -0,0 +1,46 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/BsatnRowListType.g.h" +#include "EventTableRowsType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FEventTableRowsType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FBsatnRowListType Events; + + FORCEINLINE bool operator==(const FEventTableRowsType& Other) const + { + return Events == Other.Events; + } + + FORCEINLINE bool operator!=(const FEventTableRowsType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FEventTableRowsType. + * Combines the hashes of all fields that are compared in operator==. + * @param EventTableRowsType The FEventTableRowsType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FEventTableRowsType& EventTableRowsType) +{ + uint32 Hash = GetTypeHash(EventTableRowsType.Events); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FEventTableRowsType); + + UE_SPACETIMEDB_STRUCT(FEventTableRowsType, Events); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/IdentityTokenType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/IdentityTokenType.g.h deleted file mode 100644 index bc1aeac671f..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/IdentityTokenType.g.h +++ /dev/null @@ -1,54 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "Types/Builtins.h" -#include "IdentityTokenType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FIdentityTokenType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBIdentity Identity; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString Token; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBConnectionId ConnectionId; - - FORCEINLINE bool operator==(const FIdentityTokenType& Other) const - { - return Identity == Other.Identity && Token == Other.Token && ConnectionId == Other.ConnectionId; - } - - FORCEINLINE bool operator!=(const FIdentityTokenType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FIdentityTokenType. - * Combines the hashes of all fields that are compared in operator==. - * @param IdentityTokenType The FIdentityTokenType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FIdentityTokenType& IdentityTokenType) -{ - uint32 Hash = GetTypeHash(IdentityTokenType.Identity); - Hash = HashCombine(Hash, GetTypeHash(IdentityTokenType.Token)); - Hash = HashCombine(Hash, GetTypeHash(IdentityTokenType.ConnectionId)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FIdentityTokenType); - - UE_SPACETIMEDB_STRUCT(FIdentityTokenType, Identity, Token, ConnectionId); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialConnectionType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialConnectionType.g.h new file mode 100644 index 00000000000..0aaa1c010f9 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialConnectionType.g.h @@ -0,0 +1,54 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Types/Builtins.h" +#include "InitialConnectionType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FInitialConnectionType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDBIdentity Identity; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDBConnectionId ConnectionId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString Token; + + FORCEINLINE bool operator==(const FInitialConnectionType& Other) const + { + return Identity == Other.Identity && ConnectionId == Other.ConnectionId && Token == Other.Token; + } + + FORCEINLINE bool operator!=(const FInitialConnectionType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FInitialConnectionType. + * Combines the hashes of all fields that are compared in operator==. + * @param InitialConnectionType The FInitialConnectionType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FInitialConnectionType& InitialConnectionType) +{ + uint32 Hash = GetTypeHash(InitialConnectionType.Identity); + Hash = HashCombine(Hash, GetTypeHash(InitialConnectionType.ConnectionId)); + Hash = HashCombine(Hash, GetTypeHash(InitialConnectionType.Token)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FInitialConnectionType); + + UE_SPACETIMEDB_STRUCT(FInitialConnectionType, Identity, ConnectionId, Token); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialSubscriptionType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialSubscriptionType.g.h deleted file mode 100644 index 6222c3aea2c..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/InitialSubscriptionType.g.h +++ /dev/null @@ -1,55 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "Types/Builtins.h" -#include "InitialSubscriptionType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FInitialSubscriptionType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FDatabaseUpdateType DatabaseUpdate; - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBTimeDuration TotalHostExecutionDuration; - - FORCEINLINE bool operator==(const FInitialSubscriptionType& Other) const - { - return DatabaseUpdate == Other.DatabaseUpdate && RequestId == Other.RequestId && TotalHostExecutionDuration == Other.TotalHostExecutionDuration; - } - - FORCEINLINE bool operator!=(const FInitialSubscriptionType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FInitialSubscriptionType. - * Combines the hashes of all fields that are compared in operator==. - * @param InitialSubscriptionType The FInitialSubscriptionType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FInitialSubscriptionType& InitialSubscriptionType) -{ - uint32 Hash = GetTypeHash(InitialSubscriptionType.DatabaseUpdate); - Hash = HashCombine(Hash, GetTypeHash(InitialSubscriptionType.RequestId)); - Hash = HashCombine(Hash, GetTypeHash(InitialSubscriptionType.TotalHostExecutionDuration)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FInitialSubscriptionType); - - UE_SPACETIMEDB_STRUCT(FInitialSubscriptionType, DatabaseUpdate, RequestId, TotalHostExecutionDuration); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResponseType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResponseType.g.h deleted file mode 100644 index 52cf4140c6d..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResponseType.g.h +++ /dev/null @@ -1,60 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Optionals/SpacetimeDbSdkOptionalString.g.h" -#include "ModuleBindings/Types/OneOffTableType.g.h" -#include "Types/Builtins.h" -#include "OneOffQueryResponseType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FOneOffQueryResponseType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray MessageId; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDbSdkOptionalString Error; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Tables; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBTimeDuration TotalHostExecutionDuration; - - FORCEINLINE bool operator==(const FOneOffQueryResponseType& Other) const - { - return MessageId == Other.MessageId && Error == Other.Error && Tables == Other.Tables && TotalHostExecutionDuration == Other.TotalHostExecutionDuration; - } - - FORCEINLINE bool operator!=(const FOneOffQueryResponseType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FOneOffQueryResponseType. - * Combines the hashes of all fields that are compared in operator==. - * @param OneOffQueryResponseType The FOneOffQueryResponseType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FOneOffQueryResponseType& OneOffQueryResponseType) -{ - uint32 Hash = GetTypeHash(OneOffQueryResponseType.MessageId); - Hash = HashCombine(Hash, GetTypeHash(OneOffQueryResponseType.Error)); - Hash = HashCombine(Hash, GetTypeHash(OneOffQueryResponseType.Tables)); - Hash = HashCombine(Hash, GetTypeHash(OneOffQueryResponseType.TotalHostExecutionDuration)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FOneOffQueryResponseType); - - UE_SPACETIMEDB_STRUCT(FOneOffQueryResponseType, MessageId, Error, Tables, TotalHostExecutionDuration); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResultType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResultType.g.h new file mode 100644 index 00000000000..5dd4abc07cb --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryResultType.g.h @@ -0,0 +1,51 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Results/SpacetimeDbSdkResultQueryRowsString.g.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "OneOffQueryResultType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FOneOffQueryResultType +{ + GENERATED_BODY() + + // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements + uint32 RequestId = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDbSdkResultQueryRowsString Result; + + FORCEINLINE bool operator==(const FOneOffQueryResultType& Other) const + { + return RequestId == Other.RequestId && Result == Other.Result; + } + + FORCEINLINE bool operator!=(const FOneOffQueryResultType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FOneOffQueryResultType. + * Combines the hashes of all fields that are compared in operator==. + * @param OneOffQueryResultType The FOneOffQueryResultType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FOneOffQueryResultType& OneOffQueryResultType) +{ + uint32 Hash = GetTypeHash(OneOffQueryResultType.RequestId); + Hash = HashCombine(Hash, GetTypeHash(OneOffQueryResultType.Result)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FOneOffQueryResultType); + + UE_SPACETIMEDB_STRUCT(FOneOffQueryResultType, RequestId, Result); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryType.g.h index f32539e1fa0..242346cefb6 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffQueryType.g.h @@ -11,15 +11,15 @@ struct SPACETIMEDBSDK_API FOneOffQueryType { GENERATED_BODY() - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray MessageId; + // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements + uint32 RequestId = 0; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") FString QueryString; FORCEINLINE bool operator==(const FOneOffQueryType& Other) const { - return MessageId == Other.MessageId && QueryString == Other.QueryString; + return RequestId == Other.RequestId && QueryString == Other.QueryString; } FORCEINLINE bool operator!=(const FOneOffQueryType& Other) const @@ -36,7 +36,7 @@ struct SPACETIMEDBSDK_API FOneOffQueryType */ FORCEINLINE uint32 GetTypeHash(const FOneOffQueryType& OneOffQueryType) { - uint32 Hash = GetTypeHash(OneOffQueryType.MessageId); + uint32 Hash = GetTypeHash(OneOffQueryType.RequestId); Hash = HashCombine(Hash, GetTypeHash(OneOffQueryType.QueryString)); return Hash; } @@ -45,5 +45,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FOneOffQueryType); - UE_SPACETIMEDB_STRUCT(FOneOffQueryType, MessageId, QueryString); + UE_SPACETIMEDB_STRUCT(FOneOffQueryType, RequestId, QueryString); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffTableType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffTableType.g.h deleted file mode 100644 index 5f4f93a2672..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/OneOffTableType.g.h +++ /dev/null @@ -1,50 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/BsatnRowListType.g.h" -#include "OneOffTableType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FOneOffTableType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString TableName; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FBsatnRowListType Rows; - - FORCEINLINE bool operator==(const FOneOffTableType& Other) const - { - return TableName == Other.TableName && Rows == Other.Rows; - } - - FORCEINLINE bool operator!=(const FOneOffTableType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FOneOffTableType. - * Combines the hashes of all fields that are compared in operator==. - * @param OneOffTableType The FOneOffTableType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FOneOffTableType& OneOffTableType) -{ - uint32 Hash = GetTypeHash(OneOffTableType.TableName); - Hash = HashCombine(Hash, GetTypeHash(OneOffTableType.Rows)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FOneOffTableType); - - UE_SPACETIMEDB_STRUCT(FOneOffTableType, TableName, Rows); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/PersistentTableRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/PersistentTableRowsType.g.h new file mode 100644 index 00000000000..062402e47ad --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/PersistentTableRowsType.g.h @@ -0,0 +1,50 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/BsatnRowListType.g.h" +#include "PersistentTableRowsType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FPersistentTableRowsType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FBsatnRowListType Inserts; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FBsatnRowListType Deletes; + + FORCEINLINE bool operator==(const FPersistentTableRowsType& Other) const + { + return Inserts == Other.Inserts && Deletes == Other.Deletes; + } + + FORCEINLINE bool operator!=(const FPersistentTableRowsType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FPersistentTableRowsType. + * Combines the hashes of all fields that are compared in operator==. + * @param PersistentTableRowsType The FPersistentTableRowsType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FPersistentTableRowsType& PersistentTableRowsType) +{ + uint32 Hash = GetTypeHash(PersistentTableRowsType.Inserts); + Hash = HashCombine(Hash, GetTypeHash(PersistentTableRowsType.Deletes)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FPersistentTableRowsType); + + UE_SPACETIMEDB_STRUCT(FPersistentTableRowsType, Inserts, Deletes); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ProcedureStatusType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ProcedureStatusType.g.h index 76ff482d388..3f3936204bc 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ProcedureStatusType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ProcedureStatusType.g.h @@ -5,14 +5,12 @@ #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" #include "Kismet/BlueprintFunctionLibrary.h" -#include "Types/UnitType.h" #include "ProcedureStatusType.g.generated.h" UENUM(BlueprintType) enum class EProcedureStatusTag : uint8 { Returned, - OutOfEnergy, InternalError }; @@ -24,9 +22,9 @@ struct SPACETIMEDBSDK_API FProcedureStatusType public: FProcedureStatusType() = default; - TVariant> MessageData; + TVariant> MessageData; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + UPROPERTY(BlueprintReadOnly) EProcedureStatusTag Tag = static_cast(0); static FProcedureStatusType Returned(const TArray& Value) @@ -37,14 +35,6 @@ struct SPACETIMEDBSDK_API FProcedureStatusType return Obj; } - static FProcedureStatusType OutOfEnergy(const FSpacetimeDBUnit& Value) - { - FProcedureStatusType Obj; - Obj.Tag = EProcedureStatusTag::OutOfEnergy; - Obj.MessageData.Set(Value); - return Obj; - } - static FProcedureStatusType InternalError(const FString& Value) { FProcedureStatusType Obj; @@ -61,14 +51,6 @@ struct SPACETIMEDBSDK_API FProcedureStatusType return MessageData.Get>(); } - FORCEINLINE bool IsOutOfEnergy() const { return Tag == EProcedureStatusTag::OutOfEnergy; } - - FORCEINLINE FSpacetimeDBUnit GetAsOutOfEnergy() const - { - ensureMsgf(IsOutOfEnergy(), TEXT("MessageData does not hold OutOfEnergy!")); - return MessageData.Get(); - } - FORCEINLINE bool IsInternalError() const { return Tag == EProcedureStatusTag::InternalError; } FORCEINLINE FString GetAsInternalError() const @@ -86,8 +68,6 @@ struct SPACETIMEDBSDK_API FProcedureStatusType { case EProcedureStatusTag::Returned: return GetAsReturned() == Other.GetAsReturned(); - case EProcedureStatusTag::OutOfEnergy: - return GetAsOutOfEnergy() == Other.GetAsOutOfEnergy(); case EProcedureStatusTag::InternalError: return GetAsInternalError() == Other.GetAsInternalError(); default: @@ -113,7 +93,6 @@ FORCEINLINE uint32 GetTypeHash(const FProcedureStatusType& ProcedureStatus) switch (ProcedureStatus.Tag) { case EProcedureStatusTag::Returned: return HashCombine(TagHash, ::GetTypeHash(ProcedureStatus.GetAsReturned())); - case EProcedureStatusTag::OutOfEnergy: return HashCombine(TagHash, ::GetTypeHash(ProcedureStatus.GetAsOutOfEnergy())); case EProcedureStatusTag::InternalError: return HashCombine(TagHash, GetTypeHash(ProcedureStatus.GetAsInternalError())); default: return TagHash; } @@ -128,8 +107,44 @@ namespace UE::SpacetimeDB EProcedureStatusTag, MessageData, Returned, TArray, - OutOfEnergy, FSpacetimeDBUnit, InternalError, FString ); } +UCLASS() +class SPACETIMEDBSDK_API UProcedureStatusBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus") + static FProcedureStatusType Returned(const TArray& InValue) + { + return FProcedureStatusType::Returned(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") + static bool IsReturned(const FProcedureStatusType& InValue) { return InValue.IsReturned(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") + static TArray GetAsReturned(const FProcedureStatusType& InValue) + { + return InValue.GetAsReturned(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ProcedureStatus") + static FProcedureStatusType InternalError(const FString& InValue) + { + return FProcedureStatusType::InternalError(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") + static bool IsInternalError(const FProcedureStatusType& InValue) { return InValue.IsInternalError(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ProcedureStatus") + static FString GetAsInternalError(const FProcedureStatusType& InValue) + { + return InValue.GetAsInternalError(); + } + +}; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryRowsType.g.h new file mode 100644 index 00000000000..c90e50c70d0 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryRowsType.g.h @@ -0,0 +1,46 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/SingleTableRowsType.g.h" +#include "QueryRowsType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FQueryRowsType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Tables; + + FORCEINLINE bool operator==(const FQueryRowsType& Other) const + { + return Tables == Other.Tables; + } + + FORCEINLINE bool operator!=(const FQueryRowsType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FQueryRowsType. + * Combines the hashes of all fields that are compared in operator==. + * @param QueryRowsType The FQueryRowsType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FQueryRowsType& QueryRowsType) +{ + uint32 Hash = GetTypeHash(QueryRowsType.Tables); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FQueryRowsType); + + UE_SPACETIMEDB_STRUCT(FQueryRowsType, Tables); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryIdType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetIdType.g.h similarity index 53% rename from sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryIdType.g.h rename to sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetIdType.g.h index 2c5db9fbc1a..b0890f46132 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryIdType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetIdType.g.h @@ -4,42 +4,42 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "QueryIdType.g.generated.h" +#include "QuerySetIdType.g.generated.h" USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FQueryIdType +struct SPACETIMEDBSDK_API FQuerySetIdType { GENERATED_BODY() // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 Id = 0; - FORCEINLINE bool operator==(const FQueryIdType& Other) const + FORCEINLINE bool operator==(const FQuerySetIdType& Other) const { return Id == Other.Id; } - FORCEINLINE bool operator!=(const FQueryIdType& Other) const + FORCEINLINE bool operator!=(const FQuerySetIdType& Other) const { return !(*this == Other); } }; /** - * Custom hash function for FQueryIdType. + * Custom hash function for FQuerySetIdType. * Combines the hashes of all fields that are compared in operator==. - * @param QueryIdType The FQueryIdType instance to hash. + * @param QuerySetIdType The FQuerySetIdType instance to hash. * @return The combined hash value. */ -FORCEINLINE uint32 GetTypeHash(const FQueryIdType& QueryIdType) +FORCEINLINE uint32 GetTypeHash(const FQuerySetIdType& QuerySetIdType) { - uint32 Hash = GetTypeHash(QueryIdType.Id); + uint32 Hash = GetTypeHash(QuerySetIdType.Id); return Hash; } namespace UE::SpacetimeDB { - UE_SPACETIMEDB_ENABLE_TARRAY(FQueryIdType); + UE_SPACETIMEDB_ENABLE_TARRAY(FQuerySetIdType); - UE_SPACETIMEDB_STRUCT(FQueryIdType, Id); + UE_SPACETIMEDB_STRUCT(FQuerySetIdType, Id); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetUpdateType.g.h new file mode 100644 index 00000000000..6c3573697a0 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QuerySetUpdateType.g.h @@ -0,0 +1,51 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" +#include "ModuleBindings/Types/TableUpdateType.g.h" +#include "QuerySetUpdateType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FQuerySetUpdateType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FQuerySetIdType QuerySetId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray Tables; + + FORCEINLINE bool operator==(const FQuerySetUpdateType& Other) const + { + return QuerySetId == Other.QuerySetId && Tables == Other.Tables; + } + + FORCEINLINE bool operator!=(const FQuerySetUpdateType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FQuerySetUpdateType. + * Combines the hashes of all fields that are compared in operator==. + * @param QuerySetUpdateType The FQuerySetUpdateType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FQuerySetUpdateType& QuerySetUpdateType) +{ + uint32 Hash = GetTypeHash(QuerySetUpdateType.QuerySetId); + Hash = HashCombine(Hash, GetTypeHash(QuerySetUpdateType.Tables)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FQuerySetUpdateType); + + UE_SPACETIMEDB_STRUCT(FQuerySetUpdateType, QuerySetId, Tables); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryUpdateType.g.h deleted file mode 100644 index d710b49a324..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/QueryUpdateType.g.h +++ /dev/null @@ -1,50 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/BsatnRowListType.g.h" -#include "QueryUpdateType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FQueryUpdateType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FBsatnRowListType Deletes; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FBsatnRowListType Inserts; - - FORCEINLINE bool operator==(const FQueryUpdateType& Other) const - { - return Deletes == Other.Deletes && Inserts == Other.Inserts; - } - - FORCEINLINE bool operator!=(const FQueryUpdateType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FQueryUpdateType. - * Combines the hashes of all fields that are compared in operator==. - * @param QueryUpdateType The FQueryUpdateType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FQueryUpdateType& QueryUpdateType) -{ - uint32 Hash = GetTypeHash(QueryUpdateType.Deletes); - Hash = HashCombine(Hash, GetTypeHash(QueryUpdateType.Inserts)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FQueryUpdateType); - - UE_SPACETIMEDB_STRUCT(FQueryUpdateType, Deletes, Inserts); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerCallInfoType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerCallInfoType.g.h deleted file mode 100644 index 8eb26e8c05c..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerCallInfoType.g.h +++ /dev/null @@ -1,57 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ReducerCallInfoType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FReducerCallInfoType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString ReducerName; - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 ReducerId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Args; - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - FORCEINLINE bool operator==(const FReducerCallInfoType& Other) const - { - return ReducerName == Other.ReducerName && ReducerId == Other.ReducerId && Args == Other.Args && RequestId == Other.RequestId; - } - - FORCEINLINE bool operator!=(const FReducerCallInfoType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FReducerCallInfoType. - * Combines the hashes of all fields that are compared in operator==. - * @param ReducerCallInfoType The FReducerCallInfoType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FReducerCallInfoType& ReducerCallInfoType) -{ - uint32 Hash = GetTypeHash(ReducerCallInfoType.ReducerName); - Hash = HashCombine(Hash, GetTypeHash(ReducerCallInfoType.ReducerId)); - Hash = HashCombine(Hash, GetTypeHash(ReducerCallInfoType.Args)); - Hash = HashCombine(Hash, GetTypeHash(ReducerCallInfoType.RequestId)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FReducerCallInfoType); - - UE_SPACETIMEDB_STRUCT(FReducerCallInfoType, ReducerName, ReducerId, Args, RequestId); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOkType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOkType.g.h new file mode 100644 index 00000000000..84e56ac72f9 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOkType.g.h @@ -0,0 +1,50 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/TransactionUpdateType.g.h" +#include "ReducerOkType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FReducerOkType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray RetValue; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FTransactionUpdateType TransactionUpdate; + + FORCEINLINE bool operator==(const FReducerOkType& Other) const + { + return RetValue == Other.RetValue && TransactionUpdate == Other.TransactionUpdate; + } + + FORCEINLINE bool operator!=(const FReducerOkType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FReducerOkType. + * Combines the hashes of all fields that are compared in operator==. + * @param ReducerOkType The FReducerOkType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FReducerOkType& ReducerOkType) +{ + uint32 Hash = GetTypeHash(ReducerOkType.RetValue); + Hash = HashCombine(Hash, GetTypeHash(ReducerOkType.TransactionUpdate)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FReducerOkType); + + UE_SPACETIMEDB_STRUCT(FReducerOkType, RetValue, TransactionUpdate); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOutcomeType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOutcomeType.g.h new file mode 100644 index 00000000000..6f52f95f93c --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerOutcomeType.g.h @@ -0,0 +1,224 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "Types/UnitType.h" +#include "ModuleBindings/Types/ReducerOkType.g.h" +#include "ReducerOutcomeType.g.generated.h" + +UENUM(BlueprintType) +enum class EReducerOutcomeTag : uint8 +{ + Ok, + OkEmpty, + Err, + InternalError +}; + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FReducerOutcomeType +{ + GENERATED_BODY() + +public: + FReducerOutcomeType() = default; + + TVariant, FSpacetimeDBUnit> MessageData; + + UPROPERTY(BlueprintReadOnly) + EReducerOutcomeTag Tag = static_cast(0); + + static FReducerOutcomeType Ok(const FReducerOkType& Value) + { + FReducerOutcomeType Obj; + Obj.Tag = EReducerOutcomeTag::Ok; + Obj.MessageData.Set(Value); + return Obj; + } + + static FReducerOutcomeType OkEmpty(const FSpacetimeDBUnit& Value) + { + FReducerOutcomeType Obj; + Obj.Tag = EReducerOutcomeTag::OkEmpty; + Obj.MessageData.Set(Value); + return Obj; + } + + static FReducerOutcomeType Err(const TArray& Value) + { + FReducerOutcomeType Obj; + Obj.Tag = EReducerOutcomeTag::Err; + Obj.MessageData.Set>(Value); + return Obj; + } + + static FReducerOutcomeType InternalError(const FString& Value) + { + FReducerOutcomeType Obj; + Obj.Tag = EReducerOutcomeTag::InternalError; + Obj.MessageData.Set(Value); + return Obj; + } + + FORCEINLINE bool IsOk() const { return Tag == EReducerOutcomeTag::Ok; } + + FORCEINLINE FReducerOkType GetAsOk() const + { + ensureMsgf(IsOk(), TEXT("MessageData does not hold Ok!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsOkEmpty() const { return Tag == EReducerOutcomeTag::OkEmpty; } + + FORCEINLINE FSpacetimeDBUnit GetAsOkEmpty() const + { + ensureMsgf(IsOkEmpty(), TEXT("MessageData does not hold OkEmpty!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsErr() const { return Tag == EReducerOutcomeTag::Err; } + + FORCEINLINE TArray GetAsErr() const + { + ensureMsgf(IsErr(), TEXT("MessageData does not hold Err!")); + return MessageData.Get>(); + } + + FORCEINLINE bool IsInternalError() const { return Tag == EReducerOutcomeTag::InternalError; } + + FORCEINLINE FString GetAsInternalError() const + { + ensureMsgf(IsInternalError(), TEXT("MessageData does not hold InternalError!")); + return MessageData.Get(); + } + + // Inline equality operators + FORCEINLINE bool operator==(const FReducerOutcomeType& Other) const + { + if (Tag != Other.Tag) return false; + + switch (Tag) + { + case EReducerOutcomeTag::Ok: + return GetAsOk() == Other.GetAsOk(); + case EReducerOutcomeTag::OkEmpty: + return GetAsOkEmpty() == Other.GetAsOkEmpty(); + case EReducerOutcomeTag::Err: + return GetAsErr() == Other.GetAsErr(); + case EReducerOutcomeTag::InternalError: + return GetAsInternalError() == Other.GetAsInternalError(); + default: + return false; + } + } + + FORCEINLINE bool operator!=(const FReducerOutcomeType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FReducerOutcomeType. + * Combines the hashes of all fields that are compared in operator==. + * @param ReducerOutcomeType The FReducerOutcomeType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FReducerOutcomeType& ReducerOutcome) +{ + const uint32 TagHash = GetTypeHash(static_cast(ReducerOutcome.Tag)); + switch (ReducerOutcome.Tag) + { + case EReducerOutcomeTag::Ok: return HashCombine(TagHash, ::GetTypeHash(ReducerOutcome.GetAsOk())); + case EReducerOutcomeTag::OkEmpty: return HashCombine(TagHash, ::GetTypeHash(ReducerOutcome.GetAsOkEmpty())); + case EReducerOutcomeTag::Err: return HashCombine(TagHash, ::GetTypeHash(ReducerOutcome.GetAsErr())); + case EReducerOutcomeTag::InternalError: return HashCombine(TagHash, GetTypeHash(ReducerOutcome.GetAsInternalError())); + default: return TagHash; + } +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FReducerOutcomeType); + + UE_SPACETIMEDB_TAGGED_ENUM( + FReducerOutcomeType, + EReducerOutcomeTag, + MessageData, + Ok, FReducerOkType, + OkEmpty, FSpacetimeDBUnit, + Err, TArray, + InternalError, FString + ); +} + +UCLASS() +class SPACETIMEDBSDK_API UReducerOutcomeBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ReducerOutcome") + static FReducerOutcomeType Ok(const FReducerOkType& InValue) + { + return FReducerOutcomeType::Ok(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static bool IsOk(const FReducerOutcomeType& InValue) { return InValue.IsOk(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static FReducerOkType GetAsOk(const FReducerOutcomeType& InValue) + { + return InValue.GetAsOk(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ReducerOutcome") + static FReducerOutcomeType OkEmpty(const FSpacetimeDBUnit& InValue) + { + return FReducerOutcomeType::OkEmpty(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static bool IsOkEmpty(const FReducerOutcomeType& InValue) { return InValue.IsOkEmpty(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static FSpacetimeDBUnit GetAsOkEmpty(const FReducerOutcomeType& InValue) + { + return InValue.GetAsOkEmpty(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ReducerOutcome") + static FReducerOutcomeType Err(const TArray& InValue) + { + return FReducerOutcomeType::Err(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static bool IsErr(const FReducerOutcomeType& InValue) { return InValue.IsErr(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static TArray GetAsErr(const FReducerOutcomeType& InValue) + { + return InValue.GetAsErr(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ReducerOutcome") + static FReducerOutcomeType InternalError(const FString& InValue) + { + return FReducerOutcomeType::InternalError(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static bool IsInternalError(const FReducerOutcomeType& InValue) { return InValue.IsInternalError(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ReducerOutcome") + static FString GetAsInternalError(const FReducerOutcomeType& InValue) + { + return InValue.GetAsInternalError(); + } + +}; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerResultType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerResultType.g.h new file mode 100644 index 00000000000..415d30bb692 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ReducerResultType.g.h @@ -0,0 +1,55 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/ReducerOutcomeType.g.h" +#include "Types/Builtins.h" +#include "ReducerResultType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FReducerResultType +{ + GENERATED_BODY() + + // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements + uint32 RequestId = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FSpacetimeDBTimestamp Timestamp; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FReducerOutcomeType Result; + + FORCEINLINE bool operator==(const FReducerResultType& Other) const + { + return RequestId == Other.RequestId && Timestamp == Other.Timestamp && Result == Other.Result; + } + + FORCEINLINE bool operator!=(const FReducerResultType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FReducerResultType. + * Combines the hashes of all fields that are compared in operator==. + * @param ReducerResultType The FReducerResultType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FReducerResultType& ReducerResultType) +{ + uint32 Hash = GetTypeHash(ReducerResultType.RequestId); + Hash = HashCombine(Hash, GetTypeHash(ReducerResultType.Timestamp)); + Hash = HashCombine(Hash, GetTypeHash(ReducerResultType.Result)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FReducerResultType); + + UE_SPACETIMEDB_STRUCT(FReducerResultType, RequestId, Timestamp, Result); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/RowSizeHintType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/RowSizeHintType.g.h index 1a7fd221198..45166ef6ec0 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/RowSizeHintType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/RowSizeHintType.g.h @@ -22,9 +22,9 @@ struct SPACETIMEDBSDK_API FRowSizeHintType public: FRowSizeHintType() = default; - TVariant, uint16> MessageData; + TVariant> MessageData; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + UPROPERTY(BlueprintReadOnly) ERowSizeHintTag Tag = static_cast(0); static FRowSizeHintType FixedSize(const uint16& Value) diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ServerMessageType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ServerMessageType.g.h index e8cb743fdbd..a53ebf9ed0e 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ServerMessageType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/ServerMessageType.g.h @@ -4,33 +4,27 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/SubscribeMultiAppliedType.g.h" -#include "ModuleBindings/Types/TransactionUpdateLightType.g.h" +#include "ModuleBindings/Types/SubscribeAppliedType.g.h" +#include "ModuleBindings/Types/SubscriptionErrorType.g.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "ModuleBindings/Types/ReducerResultType.g.h" #include "ModuleBindings/Types/TransactionUpdateType.g.h" -#include "ModuleBindings/Types/InitialSubscriptionType.g.h" #include "ModuleBindings/Types/UnsubscribeAppliedType.g.h" -#include "ModuleBindings/Types/SubscriptionErrorType.g.h" -#include "ModuleBindings/Types/OneOffQueryResponseType.g.h" -#include "ModuleBindings/Types/SubscribeAppliedType.g.h" -#include "ModuleBindings/Types/IdentityTokenType.g.h" -#include "ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h" #include "ModuleBindings/Types/ProcedureResultType.g.h" -#include "Kismet/BlueprintFunctionLibrary.h" +#include "ModuleBindings/Types/InitialConnectionType.g.h" +#include "ModuleBindings/Types/OneOffQueryResultType.g.h" #include "ServerMessageType.g.generated.h" UENUM(BlueprintType) enum class EServerMessageTag : uint8 { - InitialSubscription, - TransactionUpdate, - TransactionUpdateLight, - IdentityToken, - OneOffQueryResponse, + InitialConnection, SubscribeApplied, UnsubscribeApplied, SubscriptionError, - SubscribeMultiApplied, - UnsubscribeMultiApplied, + TransactionUpdate, + OneOffQueryResult, + ReducerResult, ProcedureResult }; @@ -42,48 +36,16 @@ struct SPACETIMEDBSDK_API FServerMessageType public: FServerMessageType() = default; - TVariant MessageData; + TVariant MessageData; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") + UPROPERTY(BlueprintReadOnly) EServerMessageTag Tag = static_cast(0); - static FServerMessageType InitialSubscription(const FInitialSubscriptionType& Value) - { - FServerMessageType Obj; - Obj.Tag = EServerMessageTag::InitialSubscription; - Obj.MessageData.Set(Value); - return Obj; - } - - static FServerMessageType TransactionUpdate(const FTransactionUpdateType& Value) - { - FServerMessageType Obj; - Obj.Tag = EServerMessageTag::TransactionUpdate; - Obj.MessageData.Set(Value); - return Obj; - } - - static FServerMessageType TransactionUpdateLight(const FTransactionUpdateLightType& Value) - { - FServerMessageType Obj; - Obj.Tag = EServerMessageTag::TransactionUpdateLight; - Obj.MessageData.Set(Value); - return Obj; - } - - static FServerMessageType IdentityToken(const FIdentityTokenType& Value) + static FServerMessageType InitialConnection(const FInitialConnectionType& Value) { FServerMessageType Obj; - Obj.Tag = EServerMessageTag::IdentityToken; - Obj.MessageData.Set(Value); - return Obj; - } - - static FServerMessageType OneOffQueryResponse(const FOneOffQueryResponseType& Value) - { - FServerMessageType Obj; - Obj.Tag = EServerMessageTag::OneOffQueryResponse; - Obj.MessageData.Set(Value); + Obj.Tag = EServerMessageTag::InitialConnection; + Obj.MessageData.Set(Value); return Obj; } @@ -111,19 +73,27 @@ struct SPACETIMEDBSDK_API FServerMessageType return Obj; } - static FServerMessageType SubscribeMultiApplied(const FSubscribeMultiAppliedType& Value) + static FServerMessageType TransactionUpdate(const FTransactionUpdateType& Value) + { + FServerMessageType Obj; + Obj.Tag = EServerMessageTag::TransactionUpdate; + Obj.MessageData.Set(Value); + return Obj; + } + + static FServerMessageType OneOffQueryResult(const FOneOffQueryResultType& Value) { FServerMessageType Obj; - Obj.Tag = EServerMessageTag::SubscribeMultiApplied; - Obj.MessageData.Set(Value); + Obj.Tag = EServerMessageTag::OneOffQueryResult; + Obj.MessageData.Set(Value); return Obj; } - static FServerMessageType UnsubscribeMultiApplied(const FUnsubscribeMultiAppliedType& Value) + static FServerMessageType ReducerResult(const FReducerResultType& Value) { FServerMessageType Obj; - Obj.Tag = EServerMessageTag::UnsubscribeMultiApplied; - Obj.MessageData.Set(Value); + Obj.Tag = EServerMessageTag::ReducerResult; + Obj.MessageData.Set(Value); return Obj; } @@ -135,44 +105,12 @@ struct SPACETIMEDBSDK_API FServerMessageType return Obj; } - FORCEINLINE bool IsInitialSubscription() const { return Tag == EServerMessageTag::InitialSubscription; } - - FORCEINLINE FInitialSubscriptionType GetAsInitialSubscription() const - { - ensureMsgf(IsInitialSubscription(), TEXT("MessageData does not hold InitialSubscription!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsTransactionUpdate() const { return Tag == EServerMessageTag::TransactionUpdate; } - - FORCEINLINE FTransactionUpdateType GetAsTransactionUpdate() const - { - ensureMsgf(IsTransactionUpdate(), TEXT("MessageData does not hold TransactionUpdate!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsTransactionUpdateLight() const { return Tag == EServerMessageTag::TransactionUpdateLight; } + FORCEINLINE bool IsInitialConnection() const { return Tag == EServerMessageTag::InitialConnection; } - FORCEINLINE FTransactionUpdateLightType GetAsTransactionUpdateLight() const + FORCEINLINE FInitialConnectionType GetAsInitialConnection() const { - ensureMsgf(IsTransactionUpdateLight(), TEXT("MessageData does not hold TransactionUpdateLight!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsIdentityToken() const { return Tag == EServerMessageTag::IdentityToken; } - - FORCEINLINE FIdentityTokenType GetAsIdentityToken() const - { - ensureMsgf(IsIdentityToken(), TEXT("MessageData does not hold IdentityToken!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsOneOffQueryResponse() const { return Tag == EServerMessageTag::OneOffQueryResponse; } - - FORCEINLINE FOneOffQueryResponseType GetAsOneOffQueryResponse() const - { - ensureMsgf(IsOneOffQueryResponse(), TEXT("MessageData does not hold OneOffQueryResponse!")); - return MessageData.Get(); + ensureMsgf(IsInitialConnection(), TEXT("MessageData does not hold InitialConnection!")); + return MessageData.Get(); } FORCEINLINE bool IsSubscribeApplied() const { return Tag == EServerMessageTag::SubscribeApplied; } @@ -199,20 +137,28 @@ struct SPACETIMEDBSDK_API FServerMessageType return MessageData.Get(); } - FORCEINLINE bool IsSubscribeMultiApplied() const { return Tag == EServerMessageTag::SubscribeMultiApplied; } + FORCEINLINE bool IsTransactionUpdate() const { return Tag == EServerMessageTag::TransactionUpdate; } - FORCEINLINE FSubscribeMultiAppliedType GetAsSubscribeMultiApplied() const + FORCEINLINE FTransactionUpdateType GetAsTransactionUpdate() const + { + ensureMsgf(IsTransactionUpdate(), TEXT("MessageData does not hold TransactionUpdate!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsOneOffQueryResult() const { return Tag == EServerMessageTag::OneOffQueryResult; } + + FORCEINLINE FOneOffQueryResultType GetAsOneOffQueryResult() const { - ensureMsgf(IsSubscribeMultiApplied(), TEXT("MessageData does not hold SubscribeMultiApplied!")); - return MessageData.Get(); + ensureMsgf(IsOneOffQueryResult(), TEXT("MessageData does not hold OneOffQueryResult!")); + return MessageData.Get(); } - FORCEINLINE bool IsUnsubscribeMultiApplied() const { return Tag == EServerMessageTag::UnsubscribeMultiApplied; } + FORCEINLINE bool IsReducerResult() const { return Tag == EServerMessageTag::ReducerResult; } - FORCEINLINE FUnsubscribeMultiAppliedType GetAsUnsubscribeMultiApplied() const + FORCEINLINE FReducerResultType GetAsReducerResult() const { - ensureMsgf(IsUnsubscribeMultiApplied(), TEXT("MessageData does not hold UnsubscribeMultiApplied!")); - return MessageData.Get(); + ensureMsgf(IsReducerResult(), TEXT("MessageData does not hold ReducerResult!")); + return MessageData.Get(); } FORCEINLINE bool IsProcedureResult() const { return Tag == EServerMessageTag::ProcedureResult; } @@ -230,26 +176,20 @@ struct SPACETIMEDBSDK_API FServerMessageType switch (Tag) { - case EServerMessageTag::InitialSubscription: - return GetAsInitialSubscription() == Other.GetAsInitialSubscription(); - case EServerMessageTag::TransactionUpdate: - return GetAsTransactionUpdate() == Other.GetAsTransactionUpdate(); - case EServerMessageTag::TransactionUpdateLight: - return GetAsTransactionUpdateLight() == Other.GetAsTransactionUpdateLight(); - case EServerMessageTag::IdentityToken: - return GetAsIdentityToken() == Other.GetAsIdentityToken(); - case EServerMessageTag::OneOffQueryResponse: - return GetAsOneOffQueryResponse() == Other.GetAsOneOffQueryResponse(); + case EServerMessageTag::InitialConnection: + return GetAsInitialConnection() == Other.GetAsInitialConnection(); case EServerMessageTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); case EServerMessageTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case EServerMessageTag::SubscriptionError: return GetAsSubscriptionError() == Other.GetAsSubscriptionError(); - case EServerMessageTag::SubscribeMultiApplied: - return GetAsSubscribeMultiApplied() == Other.GetAsSubscribeMultiApplied(); - case EServerMessageTag::UnsubscribeMultiApplied: - return GetAsUnsubscribeMultiApplied() == Other.GetAsUnsubscribeMultiApplied(); + case EServerMessageTag::TransactionUpdate: + return GetAsTransactionUpdate() == Other.GetAsTransactionUpdate(); + case EServerMessageTag::OneOffQueryResult: + return GetAsOneOffQueryResult() == Other.GetAsOneOffQueryResult(); + case EServerMessageTag::ReducerResult: + return GetAsReducerResult() == Other.GetAsReducerResult(); case EServerMessageTag::ProcedureResult: return GetAsProcedureResult() == Other.GetAsProcedureResult(); default: @@ -274,16 +214,13 @@ FORCEINLINE uint32 GetTypeHash(const FServerMessageType& ServerMessage) const uint32 TagHash = GetTypeHash(static_cast(ServerMessage.Tag)); switch (ServerMessage.Tag) { - case EServerMessageTag::InitialSubscription: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsInitialSubscription())); - case EServerMessageTag::TransactionUpdate: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsTransactionUpdate())); - case EServerMessageTag::TransactionUpdateLight: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsTransactionUpdateLight())); - case EServerMessageTag::IdentityToken: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsIdentityToken())); - case EServerMessageTag::OneOffQueryResponse: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsOneOffQueryResponse())); + case EServerMessageTag::InitialConnection: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsInitialConnection())); case EServerMessageTag::SubscribeApplied: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsSubscribeApplied())); case EServerMessageTag::UnsubscribeApplied: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsUnsubscribeApplied())); case EServerMessageTag::SubscriptionError: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsSubscriptionError())); - case EServerMessageTag::SubscribeMultiApplied: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsSubscribeMultiApplied())); - case EServerMessageTag::UnsubscribeMultiApplied: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsUnsubscribeMultiApplied())); + case EServerMessageTag::TransactionUpdate: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsTransactionUpdate())); + case EServerMessageTag::OneOffQueryResult: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsOneOffQueryResult())); + case EServerMessageTag::ReducerResult: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsReducerResult())); case EServerMessageTag::ProcedureResult: return HashCombine(TagHash, ::GetTypeHash(ServerMessage.GetAsProcedureResult())); default: return TagHash; } @@ -297,16 +234,13 @@ namespace UE::SpacetimeDB FServerMessageType, EServerMessageTag, MessageData, - InitialSubscription, FInitialSubscriptionType, - TransactionUpdate, FTransactionUpdateType, - TransactionUpdateLight, FTransactionUpdateLightType, - IdentityToken, FIdentityTokenType, - OneOffQueryResponse, FOneOffQueryResponseType, + InitialConnection, FInitialConnectionType, SubscribeApplied, FSubscribeAppliedType, UnsubscribeApplied, FUnsubscribeAppliedType, SubscriptionError, FSubscriptionErrorType, - SubscribeMultiApplied, FSubscribeMultiAppliedType, - UnsubscribeMultiApplied, FUnsubscribeMultiAppliedType, + TransactionUpdate, FTransactionUpdateType, + OneOffQueryResult, FOneOffQueryResultType, + ReducerResult, FReducerResultType, ProcedureResult, FProcedureResultType ); } @@ -318,78 +252,18 @@ class SPACETIMEDBSDK_API UServerMessageBpLib : public UBlueprintFunctionLibrary private: UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType InitialSubscription(const FInitialSubscriptionType& InValue) - { - return FServerMessageType::InitialSubscription(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsInitialSubscription(const FServerMessageType& InValue) { return InValue.IsInitialSubscription(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FInitialSubscriptionType GetAsInitialSubscription(const FServerMessageType& InValue) - { - return InValue.GetAsInitialSubscription(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType TransactionUpdate(const FTransactionUpdateType& InValue) + static FServerMessageType InitialConnection(const FInitialConnectionType& InValue) { - return FServerMessageType::TransactionUpdate(InValue); + return FServerMessageType::InitialConnection(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsTransactionUpdate(const FServerMessageType& InValue) { return InValue.IsTransactionUpdate(); } + static bool IsInitialConnection(const FServerMessageType& InValue) { return InValue.IsInitialConnection(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FTransactionUpdateType GetAsTransactionUpdate(const FServerMessageType& InValue) + static FInitialConnectionType GetAsInitialConnection(const FServerMessageType& InValue) { - return InValue.GetAsTransactionUpdate(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType TransactionUpdateLight(const FTransactionUpdateLightType& InValue) - { - return FServerMessageType::TransactionUpdateLight(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsTransactionUpdateLight(const FServerMessageType& InValue) { return InValue.IsTransactionUpdateLight(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FTransactionUpdateLightType GetAsTransactionUpdateLight(const FServerMessageType& InValue) - { - return InValue.GetAsTransactionUpdateLight(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType IdentityToken(const FIdentityTokenType& InValue) - { - return FServerMessageType::IdentityToken(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsIdentityToken(const FServerMessageType& InValue) { return InValue.IsIdentityToken(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FIdentityTokenType GetAsIdentityToken(const FServerMessageType& InValue) - { - return InValue.GetAsIdentityToken(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType OneOffQueryResponse(const FOneOffQueryResponseType& InValue) - { - return FServerMessageType::OneOffQueryResponse(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsOneOffQueryResponse(const FServerMessageType& InValue) { return InValue.IsOneOffQueryResponse(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FOneOffQueryResponseType GetAsOneOffQueryResponse(const FServerMessageType& InValue) - { - return InValue.GetAsOneOffQueryResponse(); + return InValue.GetAsInitialConnection(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") @@ -438,33 +312,48 @@ class SPACETIMEDBSDK_API UServerMessageBpLib : public UBlueprintFunctionLibrary } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType SubscribeMultiApplied(const FSubscribeMultiAppliedType& InValue) + static FServerMessageType TransactionUpdate(const FTransactionUpdateType& InValue) + { + return FServerMessageType::TransactionUpdate(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") + static bool IsTransactionUpdate(const FServerMessageType& InValue) { return InValue.IsTransactionUpdate(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") + static FTransactionUpdateType GetAsTransactionUpdate(const FServerMessageType& InValue) + { + return InValue.GetAsTransactionUpdate(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") + static FServerMessageType OneOffQueryResult(const FOneOffQueryResultType& InValue) { - return FServerMessageType::SubscribeMultiApplied(InValue); + return FServerMessageType::OneOffQueryResult(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsSubscribeMultiApplied(const FServerMessageType& InValue) { return InValue.IsSubscribeMultiApplied(); } + static bool IsOneOffQueryResult(const FServerMessageType& InValue) { return InValue.IsOneOffQueryResult(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FSubscribeMultiAppliedType GetAsSubscribeMultiApplied(const FServerMessageType& InValue) + static FOneOffQueryResultType GetAsOneOffQueryResult(const FServerMessageType& InValue) { - return InValue.GetAsSubscribeMultiApplied(); + return InValue.GetAsOneOffQueryResult(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") - static FServerMessageType UnsubscribeMultiApplied(const FUnsubscribeMultiAppliedType& InValue) + static FServerMessageType ReducerResult(const FReducerResultType& InValue) { - return FServerMessageType::UnsubscribeMultiApplied(InValue); + return FServerMessageType::ReducerResult(InValue); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static bool IsUnsubscribeMultiApplied(const FServerMessageType& InValue) { return InValue.IsUnsubscribeMultiApplied(); } + static bool IsReducerResult(const FServerMessageType& InValue) { return InValue.IsReducerResult(); } UFUNCTION(BlueprintPure, Category = "SpacetimeDB|ServerMessage") - static FUnsubscribeMultiAppliedType GetAsUnsubscribeMultiApplied(const FServerMessageType& InValue) + static FReducerResultType GetAsReducerResult(const FServerMessageType& InValue) { - return InValue.GetAsUnsubscribeMultiApplied(); + return InValue.GetAsReducerResult(); } UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|ServerMessage") diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SingleTableRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SingleTableRowsType.g.h new file mode 100644 index 00000000000..a1e6151fc61 --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SingleTableRowsType.g.h @@ -0,0 +1,50 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/BsatnRowListType.g.h" +#include "SingleTableRowsType.g.generated.h" + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FSingleTableRowsType +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FString Table; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FBsatnRowListType Rows; + + FORCEINLINE bool operator==(const FSingleTableRowsType& Other) const + { + return Table == Other.Table && Rows == Other.Rows; + } + + FORCEINLINE bool operator!=(const FSingleTableRowsType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FSingleTableRowsType. + * Combines the hashes of all fields that are compared in operator==. + * @param SingleTableRowsType The FSingleTableRowsType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FSingleTableRowsType& SingleTableRowsType) +{ + uint32 Hash = GetTypeHash(SingleTableRowsType.Table); + Hash = HashCombine(Hash, GetTypeHash(SingleTableRowsType.Rows)); + return Hash; +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FSingleTableRowsType); + + UE_SPACETIMEDB_STRUCT(FSingleTableRowsType, Table, Rows); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeAppliedType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeAppliedType.g.h index fcc7107e437..64636c51f09 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeAppliedType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeAppliedType.g.h @@ -4,8 +4,8 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "ModuleBindings/Types/SubscribeRowsType.g.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" #include "SubscribeAppliedType.g.generated.h" USTRUCT(BlueprintType) @@ -16,18 +16,15 @@ struct SPACETIMEDBSDK_API FSubscribeAppliedType // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 RequestId = 0; - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 TotalHostExecutionDurationMicros = 0; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; + FQuerySetIdType QuerySetId; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSubscribeRowsType Rows; + FQueryRowsType Rows; FORCEINLINE bool operator==(const FSubscribeAppliedType& Other) const { - return RequestId == Other.RequestId && TotalHostExecutionDurationMicros == Other.TotalHostExecutionDurationMicros && QueryId == Other.QueryId && Rows == Other.Rows; + return RequestId == Other.RequestId && QuerySetId == Other.QuerySetId && Rows == Other.Rows; } FORCEINLINE bool operator!=(const FSubscribeAppliedType& Other) const @@ -45,8 +42,7 @@ struct SPACETIMEDBSDK_API FSubscribeAppliedType FORCEINLINE uint32 GetTypeHash(const FSubscribeAppliedType& SubscribeAppliedType) { uint32 Hash = GetTypeHash(SubscribeAppliedType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(SubscribeAppliedType.TotalHostExecutionDurationMicros)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeAppliedType.QueryId)); + Hash = HashCombine(Hash, GetTypeHash(SubscribeAppliedType.QuerySetId)); Hash = HashCombine(Hash, GetTypeHash(SubscribeAppliedType.Rows)); return Hash; } @@ -55,5 +51,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeAppliedType); - UE_SPACETIMEDB_STRUCT(FSubscribeAppliedType, RequestId, TotalHostExecutionDurationMicros, QueryId, Rows); + UE_SPACETIMEDB_STRUCT(FSubscribeAppliedType, RequestId, QuerySetId, Rows); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiAppliedType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiAppliedType.g.h deleted file mode 100644 index b97c25dc8aa..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiAppliedType.g.h +++ /dev/null @@ -1,59 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "SubscribeMultiAppliedType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FSubscribeMultiAppliedType -{ - GENERATED_BODY() - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 TotalHostExecutionDurationMicros = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FDatabaseUpdateType Update; - - FORCEINLINE bool operator==(const FSubscribeMultiAppliedType& Other) const - { - return RequestId == Other.RequestId && TotalHostExecutionDurationMicros == Other.TotalHostExecutionDurationMicros && QueryId == Other.QueryId && Update == Other.Update; - } - - FORCEINLINE bool operator!=(const FSubscribeMultiAppliedType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FSubscribeMultiAppliedType. - * Combines the hashes of all fields that are compared in operator==. - * @param SubscribeMultiAppliedType The FSubscribeMultiAppliedType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FSubscribeMultiAppliedType& SubscribeMultiAppliedType) -{ - uint32 Hash = GetTypeHash(SubscribeMultiAppliedType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(SubscribeMultiAppliedType.TotalHostExecutionDurationMicros)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeMultiAppliedType.QueryId)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeMultiAppliedType.Update)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeMultiAppliedType); - - UE_SPACETIMEDB_STRUCT(FSubscribeMultiAppliedType, RequestId, TotalHostExecutionDurationMicros, QueryId, Update); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiType.g.h deleted file mode 100644 index 1794d8f39f0..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeMultiType.g.h +++ /dev/null @@ -1,54 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "SubscribeMultiType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FSubscribeMultiType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray QueryStrings; - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; - - FORCEINLINE bool operator==(const FSubscribeMultiType& Other) const - { - return QueryStrings == Other.QueryStrings && RequestId == Other.RequestId && QueryId == Other.QueryId; - } - - FORCEINLINE bool operator!=(const FSubscribeMultiType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FSubscribeMultiType. - * Combines the hashes of all fields that are compared in operator==. - * @param SubscribeMultiType The FSubscribeMultiType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FSubscribeMultiType& SubscribeMultiType) -{ - uint32 Hash = GetTypeHash(SubscribeMultiType.QueryStrings); - Hash = HashCombine(Hash, GetTypeHash(SubscribeMultiType.RequestId)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeMultiType.QueryId)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeMultiType); - - UE_SPACETIMEDB_STRUCT(FSubscribeMultiType, QueryStrings, RequestId, QueryId); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeRowsType.g.h deleted file mode 100644 index 70a463d2bc2..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeRowsType.g.h +++ /dev/null @@ -1,54 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/TableUpdateType.g.h" -#include "SubscribeRowsType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FSubscribeRowsType -{ - GENERATED_BODY() - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 TableId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString TableName; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FTableUpdateType TableRows; - - FORCEINLINE bool operator==(const FSubscribeRowsType& Other) const - { - return TableId == Other.TableId && TableName == Other.TableName && TableRows == Other.TableRows; - } - - FORCEINLINE bool operator!=(const FSubscribeRowsType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FSubscribeRowsType. - * Combines the hashes of all fields that are compared in operator==. - * @param SubscribeRowsType The FSubscribeRowsType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FSubscribeRowsType& SubscribeRowsType) -{ - uint32 Hash = GetTypeHash(SubscribeRowsType.TableId); - Hash = HashCombine(Hash, GetTypeHash(SubscribeRowsType.TableName)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeRowsType.TableRows)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeRowsType); - - UE_SPACETIMEDB_STRUCT(FSubscribeRowsType, TableId, TableName, TableRows); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeSingleType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeSingleType.g.h deleted file mode 100644 index 828171789bc..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeSingleType.g.h +++ /dev/null @@ -1,54 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "SubscribeSingleType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FSubscribeSingleType -{ - GENERATED_BODY() - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FString Query; - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; - - FORCEINLINE bool operator==(const FSubscribeSingleType& Other) const - { - return Query == Other.Query && RequestId == Other.RequestId && QueryId == Other.QueryId; - } - - FORCEINLINE bool operator!=(const FSubscribeSingleType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FSubscribeSingleType. - * Combines the hashes of all fields that are compared in operator==. - * @param SubscribeSingleType The FSubscribeSingleType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FSubscribeSingleType& SubscribeSingleType) -{ - uint32 Hash = GetTypeHash(SubscribeSingleType.Query); - Hash = HashCombine(Hash, GetTypeHash(SubscribeSingleType.RequestId)); - Hash = HashCombine(Hash, GetTypeHash(SubscribeSingleType.QueryId)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeSingleType); - - UE_SPACETIMEDB_STRUCT(FSubscribeSingleType, Query, RequestId, QueryId); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeType.g.h index a7e09710577..07487d3b347 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscribeType.g.h @@ -4,6 +4,7 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" #include "SubscribeType.g.generated.h" USTRUCT(BlueprintType) @@ -11,15 +12,18 @@ struct SPACETIMEDBSDK_API FSubscribeType { GENERATED_BODY() - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray QueryStrings; - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 RequestId = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FQuerySetIdType QuerySetId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + TArray QueryStrings; + FORCEINLINE bool operator==(const FSubscribeType& Other) const { - return QueryStrings == Other.QueryStrings && RequestId == Other.RequestId; + return RequestId == Other.RequestId && QuerySetId == Other.QuerySetId && QueryStrings == Other.QueryStrings; } FORCEINLINE bool operator!=(const FSubscribeType& Other) const @@ -36,8 +40,9 @@ struct SPACETIMEDBSDK_API FSubscribeType */ FORCEINLINE uint32 GetTypeHash(const FSubscribeType& SubscribeType) { - uint32 Hash = GetTypeHash(SubscribeType.QueryStrings); - Hash = HashCombine(Hash, GetTypeHash(SubscribeType.RequestId)); + uint32 Hash = GetTypeHash(SubscribeType.RequestId); + Hash = HashCombine(Hash, GetTypeHash(SubscribeType.QuerySetId)); + Hash = HashCombine(Hash, GetTypeHash(SubscribeType.QueryStrings)); return Hash; } @@ -45,5 +50,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FSubscribeType); - UE_SPACETIMEDB_STRUCT(FSubscribeType, QueryStrings, RequestId); + UE_SPACETIMEDB_STRUCT(FSubscribeType, RequestId, QuerySetId, QueryStrings); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscriptionErrorType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscriptionErrorType.g.h index d8a9bc82066..2827ca93d46 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscriptionErrorType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/SubscriptionErrorType.g.h @@ -5,6 +5,7 @@ #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" #include "ModuleBindings/Optionals/SpacetimeDbSdkOptionalUInt32.g.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" #include "SubscriptionErrorType.g.generated.h" USTRUCT(BlueprintType) @@ -12,24 +13,18 @@ struct SPACETIMEDBSDK_API FSubscriptionErrorType { GENERATED_BODY() - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 TotalHostExecutionDurationMicros = 0; - // NOTE: FSpacetimeDbSdkOptionalUInt32 field not exposed to Blueprint due to non-blueprintable elements FSpacetimeDbSdkOptionalUInt32 RequestId; - // NOTE: FSpacetimeDbSdkOptionalUInt32 field not exposed to Blueprint due to non-blueprintable elements - FSpacetimeDbSdkOptionalUInt32 QueryId; - - // NOTE: FSpacetimeDbSdkOptionalUInt32 field not exposed to Blueprint due to non-blueprintable elements - FSpacetimeDbSdkOptionalUInt32 TableId; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + FQuerySetIdType QuerySetId; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") FString Error; FORCEINLINE bool operator==(const FSubscriptionErrorType& Other) const { - return TotalHostExecutionDurationMicros == Other.TotalHostExecutionDurationMicros && RequestId == Other.RequestId && QueryId == Other.QueryId && TableId == Other.TableId && Error == Other.Error; + return RequestId == Other.RequestId && QuerySetId == Other.QuerySetId && Error == Other.Error; } FORCEINLINE bool operator!=(const FSubscriptionErrorType& Other) const @@ -46,10 +41,8 @@ struct SPACETIMEDBSDK_API FSubscriptionErrorType */ FORCEINLINE uint32 GetTypeHash(const FSubscriptionErrorType& SubscriptionErrorType) { - uint32 Hash = GetTypeHash(SubscriptionErrorType.TotalHostExecutionDurationMicros); - Hash = HashCombine(Hash, GetTypeHash(SubscriptionErrorType.RequestId)); - Hash = HashCombine(Hash, GetTypeHash(SubscriptionErrorType.QueryId)); - Hash = HashCombine(Hash, GetTypeHash(SubscriptionErrorType.TableId)); + uint32 Hash = GetTypeHash(SubscriptionErrorType.RequestId); + Hash = HashCombine(Hash, GetTypeHash(SubscriptionErrorType.QuerySetId)); Hash = HashCombine(Hash, GetTypeHash(SubscriptionErrorType.Error)); return Hash; } @@ -58,5 +51,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FSubscriptionErrorType); - UE_SPACETIMEDB_STRUCT(FSubscriptionErrorType, TotalHostExecutionDurationMicros, RequestId, QueryId, TableId, Error); + UE_SPACETIMEDB_STRUCT(FSubscriptionErrorType, RequestId, QuerySetId, Error); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateRowsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateRowsType.g.h new file mode 100644 index 00000000000..d4a2589a73a --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateRowsType.g.h @@ -0,0 +1,152 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "ModuleBindings/Types/PersistentTableRowsType.g.h" +#include "ModuleBindings/Types/EventTableRowsType.g.h" +#include "TableUpdateRowsType.g.generated.h" + +UENUM(BlueprintType) +enum class ETableUpdateRowsTag : uint8 +{ + PersistentTable, + EventTable +}; + +USTRUCT(BlueprintType) +struct SPACETIMEDBSDK_API FTableUpdateRowsType +{ + GENERATED_BODY() + +public: + FTableUpdateRowsType() = default; + + TVariant MessageData; + + UPROPERTY(BlueprintReadOnly) + ETableUpdateRowsTag Tag = static_cast(0); + + static FTableUpdateRowsType PersistentTable(const FPersistentTableRowsType& Value) + { + FTableUpdateRowsType Obj; + Obj.Tag = ETableUpdateRowsTag::PersistentTable; + Obj.MessageData.Set(Value); + return Obj; + } + + static FTableUpdateRowsType EventTable(const FEventTableRowsType& Value) + { + FTableUpdateRowsType Obj; + Obj.Tag = ETableUpdateRowsTag::EventTable; + Obj.MessageData.Set(Value); + return Obj; + } + + FORCEINLINE bool IsPersistentTable() const { return Tag == ETableUpdateRowsTag::PersistentTable; } + + FORCEINLINE FPersistentTableRowsType GetAsPersistentTable() const + { + ensureMsgf(IsPersistentTable(), TEXT("MessageData does not hold PersistentTable!")); + return MessageData.Get(); + } + + FORCEINLINE bool IsEventTable() const { return Tag == ETableUpdateRowsTag::EventTable; } + + FORCEINLINE FEventTableRowsType GetAsEventTable() const + { + ensureMsgf(IsEventTable(), TEXT("MessageData does not hold EventTable!")); + return MessageData.Get(); + } + + // Inline equality operators + FORCEINLINE bool operator==(const FTableUpdateRowsType& Other) const + { + if (Tag != Other.Tag) return false; + + switch (Tag) + { + case ETableUpdateRowsTag::PersistentTable: + return GetAsPersistentTable() == Other.GetAsPersistentTable(); + case ETableUpdateRowsTag::EventTable: + return GetAsEventTable() == Other.GetAsEventTable(); + default: + return false; + } + } + + FORCEINLINE bool operator!=(const FTableUpdateRowsType& Other) const + { + return !(*this == Other); + } +}; + +/** + * Custom hash function for FTableUpdateRowsType. + * Combines the hashes of all fields that are compared in operator==. + * @param TableUpdateRowsType The FTableUpdateRowsType instance to hash. + * @return The combined hash value. + */ +FORCEINLINE uint32 GetTypeHash(const FTableUpdateRowsType& TableUpdateRows) +{ + const uint32 TagHash = GetTypeHash(static_cast(TableUpdateRows.Tag)); + switch (TableUpdateRows.Tag) + { + case ETableUpdateRowsTag::PersistentTable: return HashCombine(TagHash, ::GetTypeHash(TableUpdateRows.GetAsPersistentTable())); + case ETableUpdateRowsTag::EventTable: return HashCombine(TagHash, ::GetTypeHash(TableUpdateRows.GetAsEventTable())); + default: return TagHash; + } +} + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(FTableUpdateRowsType); + + UE_SPACETIMEDB_TAGGED_ENUM( + FTableUpdateRowsType, + ETableUpdateRowsTag, + MessageData, + PersistentTable, FPersistentTableRowsType, + EventTable, FEventTableRowsType + ); +} + +UCLASS() +class SPACETIMEDBSDK_API UTableUpdateRowsBpLib : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +private: + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TableUpdateRows") + static FTableUpdateRowsType PersistentTable(const FPersistentTableRowsType& InValue) + { + return FTableUpdateRowsType::PersistentTable(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TableUpdateRows") + static bool IsPersistentTable(const FTableUpdateRowsType& InValue) { return InValue.IsPersistentTable(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TableUpdateRows") + static FPersistentTableRowsType GetAsPersistentTable(const FTableUpdateRowsType& InValue) + { + return InValue.GetAsPersistentTable(); + } + + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TableUpdateRows") + static FTableUpdateRowsType EventTable(const FEventTableRowsType& InValue) + { + return FTableUpdateRowsType::EventTable(InValue); + } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TableUpdateRows") + static bool IsEventTable(const FTableUpdateRowsType& InValue) { return InValue.IsEventTable(); } + + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TableUpdateRows") + static FEventTableRowsType GetAsEventTable(const FTableUpdateRowsType& InValue) + { + return InValue.GetAsEventTable(); + } + +}; diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateType.g.h index 029c672e60f..25be9117a8a 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TableUpdateType.g.h @@ -4,7 +4,7 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/CompressableQueryUpdateType.g.h" +#include "ModuleBindings/Types/TableUpdateRowsType.g.h" #include "TableUpdateType.g.generated.h" USTRUCT(BlueprintType) @@ -12,21 +12,15 @@ struct SPACETIMEDBSDK_API FTableUpdateType { GENERATED_BODY() - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 TableId = 0; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") FString TableName; - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 NumRows = 0; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - TArray Updates; + TArray Rows; FORCEINLINE bool operator==(const FTableUpdateType& Other) const { - return TableId == Other.TableId && TableName == Other.TableName && NumRows == Other.NumRows && Updates == Other.Updates; + return TableName == Other.TableName && Rows == Other.Rows; } FORCEINLINE bool operator!=(const FTableUpdateType& Other) const @@ -43,10 +37,8 @@ struct SPACETIMEDBSDK_API FTableUpdateType */ FORCEINLINE uint32 GetTypeHash(const FTableUpdateType& TableUpdateType) { - uint32 Hash = GetTypeHash(TableUpdateType.TableId); - Hash = HashCombine(Hash, GetTypeHash(TableUpdateType.TableName)); - Hash = HashCombine(Hash, GetTypeHash(TableUpdateType.NumRows)); - Hash = HashCombine(Hash, GetTypeHash(TableUpdateType.Updates)); + uint32 Hash = GetTypeHash(TableUpdateType.TableName); + Hash = HashCombine(Hash, GetTypeHash(TableUpdateType.Rows)); return Hash; } @@ -54,5 +46,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FTableUpdateType); - UE_SPACETIMEDB_STRUCT(FTableUpdateType, TableId, TableName, NumRows, Updates); + UE_SPACETIMEDB_STRUCT(FTableUpdateType, TableName, Rows); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateLightType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateLightType.g.h deleted file mode 100644 index 8e3f8fa32b5..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateLightType.g.h +++ /dev/null @@ -1,50 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "TransactionUpdateLightType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FTransactionUpdateLightType -{ - GENERATED_BODY() - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FDatabaseUpdateType Update; - - FORCEINLINE bool operator==(const FTransactionUpdateLightType& Other) const - { - return RequestId == Other.RequestId && Update == Other.Update; - } - - FORCEINLINE bool operator!=(const FTransactionUpdateLightType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FTransactionUpdateLightType. - * Combines the hashes of all fields that are compared in operator==. - * @param TransactionUpdateLightType The FTransactionUpdateLightType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FTransactionUpdateLightType& TransactionUpdateLightType) -{ - uint32 Hash = GetTypeHash(TransactionUpdateLightType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateLightType.Update)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FTransactionUpdateLightType); - - UE_SPACETIMEDB_STRUCT(FTransactionUpdateLightType, RequestId, Update); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateType.g.h index 18c0d727cd3..d449805bad8 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/TransactionUpdateType.g.h @@ -4,10 +4,7 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/EnergyQuantaType.g.h" -#include "ModuleBindings/Types/ReducerCallInfoType.g.h" -#include "ModuleBindings/Types/UpdateStatusType.g.h" -#include "Types/Builtins.h" +#include "ModuleBindings/Types/QuerySetUpdateType.g.h" #include "TransactionUpdateType.g.generated.h" USTRUCT(BlueprintType) @@ -16,29 +13,11 @@ struct SPACETIMEDBSDK_API FTransactionUpdateType GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FUpdateStatusType Status; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBTimestamp Timestamp; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBIdentity CallerIdentity; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBConnectionId CallerConnectionId; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FReducerCallInfoType ReducerCall; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FEnergyQuantaType EnergyQuantaUsed; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSpacetimeDBTimeDuration TotalHostExecutionDuration; + TArray QuerySets; FORCEINLINE bool operator==(const FTransactionUpdateType& Other) const { - return Status == Other.Status && Timestamp == Other.Timestamp && CallerIdentity == Other.CallerIdentity && CallerConnectionId == Other.CallerConnectionId && ReducerCall == Other.ReducerCall && EnergyQuantaUsed == Other.EnergyQuantaUsed && TotalHostExecutionDuration == Other.TotalHostExecutionDuration; + return QuerySets == Other.QuerySets; } FORCEINLINE bool operator!=(const FTransactionUpdateType& Other) const @@ -55,13 +34,7 @@ struct SPACETIMEDBSDK_API FTransactionUpdateType */ FORCEINLINE uint32 GetTypeHash(const FTransactionUpdateType& TransactionUpdateType) { - uint32 Hash = GetTypeHash(TransactionUpdateType.Status); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.Timestamp)); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.CallerIdentity)); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.CallerConnectionId)); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.ReducerCall)); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.EnergyQuantaUsed)); - Hash = HashCombine(Hash, GetTypeHash(TransactionUpdateType.TotalHostExecutionDuration)); + uint32 Hash = GetTypeHash(TransactionUpdateType.QuerySets); return Hash; } @@ -69,5 +42,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FTransactionUpdateType); - UE_SPACETIMEDB_STRUCT(FTransactionUpdateType, Status, Timestamp, CallerIdentity, CallerConnectionId, ReducerCall, EnergyQuantaUsed, TotalHostExecutionDuration); + UE_SPACETIMEDB_STRUCT(FTransactionUpdateType, QuerySets); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeAppliedType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeAppliedType.g.h index 6aee42d8a67..db0992379b0 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeAppliedType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeAppliedType.g.h @@ -4,8 +4,9 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "ModuleBindings/Types/SubscribeRowsType.g.h" +#include "ModuleBindings/Optionals/SpacetimeDbSdkOptionalQueryRows.g.h" +#include "ModuleBindings/Types/QueryRowsType.g.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" #include "UnsubscribeAppliedType.g.generated.h" USTRUCT(BlueprintType) @@ -16,18 +17,15 @@ struct SPACETIMEDBSDK_API FUnsubscribeAppliedType // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements uint32 RequestId = 0; - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 TotalHostExecutionDurationMicros = 0; - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; + FQuerySetIdType QuerySetId; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FSubscribeRowsType Rows; + FSpacetimeDbSdkOptionalQueryRows Rows; FORCEINLINE bool operator==(const FUnsubscribeAppliedType& Other) const { - return RequestId == Other.RequestId && TotalHostExecutionDurationMicros == Other.TotalHostExecutionDurationMicros && QueryId == Other.QueryId && Rows == Other.Rows; + return RequestId == Other.RequestId && QuerySetId == Other.QuerySetId && Rows == Other.Rows; } FORCEINLINE bool operator!=(const FUnsubscribeAppliedType& Other) const @@ -45,8 +43,7 @@ struct SPACETIMEDBSDK_API FUnsubscribeAppliedType FORCEINLINE uint32 GetTypeHash(const FUnsubscribeAppliedType& UnsubscribeAppliedType) { uint32 Hash = GetTypeHash(UnsubscribeAppliedType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeAppliedType.TotalHostExecutionDurationMicros)); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeAppliedType.QueryId)); + Hash = HashCombine(Hash, GetTypeHash(UnsubscribeAppliedType.QuerySetId)); Hash = HashCombine(Hash, GetTypeHash(UnsubscribeAppliedType.Rows)); return Hash; } @@ -55,5 +52,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FUnsubscribeAppliedType); - UE_SPACETIMEDB_STRUCT(FUnsubscribeAppliedType, RequestId, TotalHostExecutionDurationMicros, QueryId, Rows); + UE_SPACETIMEDB_STRUCT(FUnsubscribeAppliedType, RequestId, QuerySetId, Rows); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeFlagsType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeFlagsType.g.h new file mode 100644 index 00000000000..46120a986af --- /dev/null +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeFlagsType.g.h @@ -0,0 +1,19 @@ +// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE +// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. + +#pragma once +#include "CoreMinimal.h" +#include "BSATN/UESpacetimeDB.h" +#include "UnsubscribeFlagsType.g.generated.h" + +UENUM(BlueprintType) +enum class EUnsubscribeFlagsType : uint8 +{ + Default, + SendDroppedRows, +}; + +namespace UE::SpacetimeDB +{ + UE_SPACETIMEDB_ENABLE_TARRAY(EUnsubscribeFlagsType); +} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h deleted file mode 100644 index 80415dec1bf..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiAppliedType.g.h +++ /dev/null @@ -1,59 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "UnsubscribeMultiAppliedType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FUnsubscribeMultiAppliedType -{ - GENERATED_BODY() - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - // NOTE: uint64 field not exposed to Blueprint due to non-blueprintable elements - uint64 TotalHostExecutionDurationMicros = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FDatabaseUpdateType Update; - - FORCEINLINE bool operator==(const FUnsubscribeMultiAppliedType& Other) const - { - return RequestId == Other.RequestId && TotalHostExecutionDurationMicros == Other.TotalHostExecutionDurationMicros && QueryId == Other.QueryId && Update == Other.Update; - } - - FORCEINLINE bool operator!=(const FUnsubscribeMultiAppliedType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FUnsubscribeMultiAppliedType. - * Combines the hashes of all fields that are compared in operator==. - * @param UnsubscribeMultiAppliedType The FUnsubscribeMultiAppliedType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FUnsubscribeMultiAppliedType& UnsubscribeMultiAppliedType) -{ - uint32 Hash = GetTypeHash(UnsubscribeMultiAppliedType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeMultiAppliedType.TotalHostExecutionDurationMicros)); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeMultiAppliedType.QueryId)); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeMultiAppliedType.Update)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FUnsubscribeMultiAppliedType); - - UE_SPACETIMEDB_STRUCT(FUnsubscribeMultiAppliedType, RequestId, TotalHostExecutionDurationMicros, QueryId, Update); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiType.g.h deleted file mode 100644 index a490a73daaa..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeMultiType.g.h +++ /dev/null @@ -1,50 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" -#include "UnsubscribeMultiType.g.generated.h" - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FUnsubscribeMultiType -{ - GENERATED_BODY() - - // NOTE: uint32 field not exposed to Blueprint due to non-blueprintable elements - uint32 RequestId = 0; - - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; - - FORCEINLINE bool operator==(const FUnsubscribeMultiType& Other) const - { - return RequestId == Other.RequestId && QueryId == Other.QueryId; - } - - FORCEINLINE bool operator!=(const FUnsubscribeMultiType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FUnsubscribeMultiType. - * Combines the hashes of all fields that are compared in operator==. - * @param UnsubscribeMultiType The FUnsubscribeMultiType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FUnsubscribeMultiType& UnsubscribeMultiType) -{ - uint32 Hash = GetTypeHash(UnsubscribeMultiType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeMultiType.QueryId)); - return Hash; -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FUnsubscribeMultiType); - - UE_SPACETIMEDB_STRUCT(FUnsubscribeMultiType, RequestId, QueryId); -} diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeType.g.h index 37530918737..04ce34c727f 100644 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeType.g.h +++ b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UnsubscribeType.g.h @@ -4,7 +4,8 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "ModuleBindings/Types/QueryIdType.g.h" +#include "ModuleBindings/Types/QuerySetIdType.g.h" +#include "ModuleBindings/Types/UnsubscribeFlagsType.g.h" #include "UnsubscribeType.g.generated.h" USTRUCT(BlueprintType) @@ -16,11 +17,14 @@ struct SPACETIMEDBSDK_API FUnsubscribeType uint32 RequestId = 0; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") - FQueryIdType QueryId; + FQuerySetIdType QuerySetId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB") + EUnsubscribeFlagsType Flags = EUnsubscribeFlagsType::Default; FORCEINLINE bool operator==(const FUnsubscribeType& Other) const { - return RequestId == Other.RequestId && QueryId == Other.QueryId; + return RequestId == Other.RequestId && QuerySetId == Other.QuerySetId && Flags == Other.Flags; } FORCEINLINE bool operator!=(const FUnsubscribeType& Other) const @@ -38,7 +42,8 @@ struct SPACETIMEDBSDK_API FUnsubscribeType FORCEINLINE uint32 GetTypeHash(const FUnsubscribeType& UnsubscribeType) { uint32 Hash = GetTypeHash(UnsubscribeType.RequestId); - Hash = HashCombine(Hash, GetTypeHash(UnsubscribeType.QueryId)); + Hash = HashCombine(Hash, GetTypeHash(UnsubscribeType.QuerySetId)); + Hash = HashCombine(Hash, GetTypeHash(UnsubscribeType.Flags)); return Hash; } @@ -46,5 +51,5 @@ namespace UE::SpacetimeDB { UE_SPACETIMEDB_ENABLE_TARRAY(FUnsubscribeType); - UE_SPACETIMEDB_STRUCT(FUnsubscribeType, RequestId, QueryId); + UE_SPACETIMEDB_STRUCT(FUnsubscribeType, RequestId, QuerySetId, Flags); } diff --git a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UpdateStatusType.g.h b/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UpdateStatusType.g.h deleted file mode 100644 index 3ad273dd2d8..00000000000 --- a/sdks/unreal/src/SpacetimeDbSdk/Source/SpacetimeDbSdk/Public/ModuleBindings/Types/UpdateStatusType.g.h +++ /dev/null @@ -1,188 +0,0 @@ -// THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE -// WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. - -#pragma once -#include "CoreMinimal.h" -#include "BSATN/UESpacetimeDB.h" -#include "Kismet/BlueprintFunctionLibrary.h" -#include "ModuleBindings/Types/DatabaseUpdateType.g.h" -#include "Types/UnitType.h" -#include "UpdateStatusType.g.generated.h" - -UENUM(BlueprintType) -enum class EUpdateStatusTag : uint8 -{ - Committed, - Failed, - OutOfEnergy -}; - -USTRUCT(BlueprintType) -struct SPACETIMEDBSDK_API FUpdateStatusType -{ - GENERATED_BODY() - -public: - FUpdateStatusType() = default; - - TVariant MessageData; - - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - EUpdateStatusTag Tag = static_cast(0); - - static FUpdateStatusType Committed(const FDatabaseUpdateType& Value) - { - FUpdateStatusType Obj; - Obj.Tag = EUpdateStatusTag::Committed; - Obj.MessageData.Set(Value); - return Obj; - } - - static FUpdateStatusType Failed(const FString& Value) - { - FUpdateStatusType Obj; - Obj.Tag = EUpdateStatusTag::Failed; - Obj.MessageData.Set(Value); - return Obj; - } - - static FUpdateStatusType OutOfEnergy(const FSpacetimeDBUnit& Value) - { - FUpdateStatusType Obj; - Obj.Tag = EUpdateStatusTag::OutOfEnergy; - Obj.MessageData.Set(Value); - return Obj; - } - - FORCEINLINE bool IsCommitted() const { return Tag == EUpdateStatusTag::Committed; } - - FORCEINLINE FDatabaseUpdateType GetAsCommitted() const - { - ensureMsgf(IsCommitted(), TEXT("MessageData does not hold Committed!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsFailed() const { return Tag == EUpdateStatusTag::Failed; } - - FORCEINLINE FString GetAsFailed() const - { - ensureMsgf(IsFailed(), TEXT("MessageData does not hold Failed!")); - return MessageData.Get(); - } - - FORCEINLINE bool IsOutOfEnergy() const { return Tag == EUpdateStatusTag::OutOfEnergy; } - - FORCEINLINE FSpacetimeDBUnit GetAsOutOfEnergy() const - { - ensureMsgf(IsOutOfEnergy(), TEXT("MessageData does not hold OutOfEnergy!")); - return MessageData.Get(); - } - - // Inline equality operators - FORCEINLINE bool operator==(const FUpdateStatusType& Other) const - { - if (Tag != Other.Tag) return false; - - switch (Tag) - { - case EUpdateStatusTag::Committed: - return GetAsCommitted() == Other.GetAsCommitted(); - case EUpdateStatusTag::Failed: - return GetAsFailed() == Other.GetAsFailed(); - case EUpdateStatusTag::OutOfEnergy: - return GetAsOutOfEnergy() == Other.GetAsOutOfEnergy(); - default: - return false; - } - } - - FORCEINLINE bool operator!=(const FUpdateStatusType& Other) const - { - return !(*this == Other); - } -}; - -/** - * Custom hash function for FUpdateStatusType. - * Combines the hashes of all fields that are compared in operator==. - * @param UpdateStatusType The FUpdateStatusType instance to hash. - * @return The combined hash value. - */ -FORCEINLINE uint32 GetTypeHash(const FUpdateStatusType& UpdateStatus) -{ - const uint32 TagHash = GetTypeHash(static_cast(UpdateStatus.Tag)); - switch (UpdateStatus.Tag) - { - case EUpdateStatusTag::Committed: return HashCombine(TagHash, ::GetTypeHash(UpdateStatus.GetAsCommitted())); - case EUpdateStatusTag::Failed: return HashCombine(TagHash, GetTypeHash(UpdateStatus.GetAsFailed())); - case EUpdateStatusTag::OutOfEnergy: return HashCombine(TagHash, ::GetTypeHash(UpdateStatus.GetAsOutOfEnergy())); - default: return TagHash; - } -} - -namespace UE::SpacetimeDB -{ - UE_SPACETIMEDB_ENABLE_TARRAY(FUpdateStatusType); - - UE_SPACETIMEDB_TAGGED_ENUM( - FUpdateStatusType, - EUpdateStatusTag, - MessageData, - Committed, FDatabaseUpdateType, - Failed, FString, - OutOfEnergy, FSpacetimeDBUnit - ); -} - -UCLASS() -class SPACETIMEDBSDK_API UUpdateStatusBpLib : public UBlueprintFunctionLibrary -{ - GENERATED_BODY() - -private: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|UpdateStatus") - static FUpdateStatusType Committed(const FDatabaseUpdateType& InValue) - { - return FUpdateStatusType::Committed(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static bool IsCommitted(const FUpdateStatusType& InValue) { return InValue.IsCommitted(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static FDatabaseUpdateType GetAsCommitted(const FUpdateStatusType& InValue) - { - return InValue.GetAsCommitted(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|UpdateStatus") - static FUpdateStatusType Failed(const FString& InValue) - { - return FUpdateStatusType::Failed(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static bool IsFailed(const FUpdateStatusType& InValue) { return InValue.IsFailed(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static FString GetAsFailed(const FUpdateStatusType& InValue) - { - return InValue.GetAsFailed(); - } - - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|UpdateStatus") - static FUpdateStatusType OutOfEnergy(const FSpacetimeDBUnit& InValue) - { - return FUpdateStatusType::OutOfEnergy(InValue); - } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static bool IsOutOfEnergy(const FUpdateStatusType& InValue) { return InValue.IsOutOfEnergy(); } - - UFUNCTION(BlueprintPure, Category = "SpacetimeDB|UpdateStatus") - static FSpacetimeDBUnit GetAsOutOfEnergy(const FUpdateStatusType& InValue) - { - return InValue.GetAsOutOfEnergy(); - } - -}; diff --git a/sdks/unreal/tests/TestClient/Config/DefaultEngine.ini b/sdks/unreal/tests/TestClient/Config/DefaultEngine.ini index 92c3bae9b3e..0239c099c52 100644 --- a/sdks/unreal/tests/TestClient/Config/DefaultEngine.ini +++ b/sdks/unreal/tests/TestClient/Config/DefaultEngine.ini @@ -23,7 +23,7 @@ DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 [/Script/Engine.RendererSettings] r.AllowStaticLighting=0 -r.GenerateMeshDistanceFields=True +r.GenerateMeshDistanceFields=False r.DynamicGlobalIlluminationMethod=1 r.ReflectionMethod=1 r.Shadow.Virtual.Enable=1 diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp index 91dc96f168e..73ff83aeee0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -112,2358 +112,376 @@ #include "ModuleBindings/Tables/VecUnitStructTable.g.h" #include "ModuleBindings/Tables/VecUuidTable.g.h" -static FReducer DecodeReducer(const FReducerEvent& Event) +UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - const FString& ReducerName = Event.ReducerCall.ReducerName; - - if (ReducerName == TEXT("delete_from_btree_u32")) - { - FDeleteFromBtreeU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteFromBtreeU32(Args); - } - - if (ReducerName == TEXT("delete_large_table")) - { - FDeleteLargeTableArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteLargeTable(Args); - } - - if (ReducerName == TEXT("delete_pk_bool")) - { - FDeletePkBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkBool(Args); - } - - if (ReducerName == TEXT("delete_pk_connection_id")) - { - FDeletePkConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkConnectionId(Args); - } - - if (ReducerName == TEXT("delete_pk_i128")) - { - FDeletePkI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI128(Args); - } - - if (ReducerName == TEXT("delete_pk_i16")) - { - FDeletePkI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI16(Args); - } - - if (ReducerName == TEXT("delete_pk_i256")) - { - FDeletePkI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI256(Args); - } - - if (ReducerName == TEXT("delete_pk_i32")) - { - FDeletePkI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI32(Args); - } - - if (ReducerName == TEXT("delete_pk_i64")) - { - FDeletePkI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI64(Args); - } - - if (ReducerName == TEXT("delete_pk_i8")) - { - FDeletePkI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkI8(Args); - } - - if (ReducerName == TEXT("delete_pk_identity")) - { - FDeletePkIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkIdentity(Args); - } - - if (ReducerName == TEXT("delete_pk_string")) - { - FDeletePkStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkString(Args); - } - - if (ReducerName == TEXT("delete_pk_u128")) - { - FDeletePkU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU128(Args); - } - - if (ReducerName == TEXT("delete_pk_u16")) - { - FDeletePkU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU16(Args); - } - - if (ReducerName == TEXT("delete_pk_u256")) - { - FDeletePkU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU256(Args); - } - - if (ReducerName == TEXT("delete_pk_u32")) - { - FDeletePkU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU32(Args); - } - - if (ReducerName == TEXT("delete_pk_u32_insert_pk_u32_two")) - { - FDeletePkU32InsertPkU32TwoArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU32InsertPkU32Two(Args); - } - - if (ReducerName == TEXT("delete_pk_u32_two")) - { - FDeletePkU32TwoArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU32Two(Args); - } - - if (ReducerName == TEXT("delete_pk_u64")) - { - FDeletePkU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU64(Args); - } - - if (ReducerName == TEXT("delete_pk_u8")) - { - FDeletePkU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkU8(Args); - } - - if (ReducerName == TEXT("delete_pk_uuid")) - { - FDeletePkUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeletePkUuid(Args); - } - - if (ReducerName == TEXT("delete_unique_bool")) - { - FDeleteUniqueBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueBool(Args); - } - - if (ReducerName == TEXT("delete_unique_connection_id")) - { - FDeleteUniqueConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueConnectionId(Args); - } - - if (ReducerName == TEXT("delete_unique_i128")) - { - FDeleteUniqueI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI128(Args); - } - - if (ReducerName == TEXT("delete_unique_i16")) - { - FDeleteUniqueI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI16(Args); - } - - if (ReducerName == TEXT("delete_unique_i256")) - { - FDeleteUniqueI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI256(Args); - } - - if (ReducerName == TEXT("delete_unique_i32")) - { - FDeleteUniqueI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI32(Args); - } - - if (ReducerName == TEXT("delete_unique_i64")) - { - FDeleteUniqueI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI64(Args); - } - - if (ReducerName == TEXT("delete_unique_i8")) - { - FDeleteUniqueI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueI8(Args); - } - - if (ReducerName == TEXT("delete_unique_identity")) - { - FDeleteUniqueIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueIdentity(Args); - } - - if (ReducerName == TEXT("delete_unique_string")) - { - FDeleteUniqueStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueString(Args); - } - - if (ReducerName == TEXT("delete_unique_u128")) - { - FDeleteUniqueU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU128(Args); - } - - if (ReducerName == TEXT("delete_unique_u16")) - { - FDeleteUniqueU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU16(Args); - } - - if (ReducerName == TEXT("delete_unique_u256")) - { - FDeleteUniqueU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU256(Args); - } - - if (ReducerName == TEXT("delete_unique_u32")) - { - FDeleteUniqueU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU32(Args); - } - - if (ReducerName == TEXT("delete_unique_u64")) - { - FDeleteUniqueU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU64(Args); - } - - if (ReducerName == TEXT("delete_unique_u8")) - { - FDeleteUniqueU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueU8(Args); - } - - if (ReducerName == TEXT("delete_unique_uuid")) - { - FDeleteUniqueUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::DeleteUniqueUuid(Args); - } - - if (ReducerName == TEXT("insert_call_timestamp")) - { - FInsertCallTimestampArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallTimestamp(Args); - } - - if (ReducerName == TEXT("insert_call_uuid_v4")) - { - FInsertCallUuidV4Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallUuidV4(Args); - } - - if (ReducerName == TEXT("insert_call_uuid_v7")) - { - FInsertCallUuidV7Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallUuidV7(Args); - } - - if (ReducerName == TEXT("insert_caller_one_connection_id")) - { - FInsertCallerOneConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerOneConnectionId(Args); - } - - if (ReducerName == TEXT("insert_caller_one_identity")) - { - FInsertCallerOneIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerOneIdentity(Args); - } - - if (ReducerName == TEXT("insert_caller_pk_connection_id")) - { - FInsertCallerPkConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerPkConnectionId(Args); - } - - if (ReducerName == TEXT("insert_caller_pk_identity")) - { - FInsertCallerPkIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerPkIdentity(Args); - } - - if (ReducerName == TEXT("insert_caller_unique_connection_id")) - { - FInsertCallerUniqueConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerUniqueConnectionId(Args); - } - - if (ReducerName == TEXT("insert_caller_unique_identity")) - { - FInsertCallerUniqueIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerUniqueIdentity(Args); - } - - if (ReducerName == TEXT("insert_caller_vec_connection_id")) - { - FInsertCallerVecConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerVecConnectionId(Args); - } - - if (ReducerName == TEXT("insert_caller_vec_identity")) - { - FInsertCallerVecIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertCallerVecIdentity(Args); - } - - if (ReducerName == TEXT("insert_into_btree_u32")) - { - FInsertIntoBtreeU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertIntoBtreeU32(Args); - } - - if (ReducerName == TEXT("insert_into_indexed_simple_enum")) - { - FInsertIntoIndexedSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertIntoIndexedSimpleEnum(Args); - } - - if (ReducerName == TEXT("insert_into_pk_btree_u32")) - { - FInsertIntoPkBtreeU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertIntoPkBtreeU32(Args); - } - - if (ReducerName == TEXT("insert_large_table")) - { - FInsertLargeTableArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertLargeTable(Args); - } - - if (ReducerName == TEXT("insert_one_bool")) - { - FInsertOneBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneBool(Args); - } - - if (ReducerName == TEXT("insert_one_byte_struct")) - { - FInsertOneByteStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneByteStruct(Args); - } - - if (ReducerName == TEXT("insert_one_connection_id")) - { - FInsertOneConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneConnectionId(Args); - } + Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); + Db->Initialize(); + + Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); + Reducers->Conn = this; - if (ReducerName == TEXT("insert_one_enum_with_payload")) - { - FInsertOneEnumWithPayloadArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneEnumWithPayload(Args); - } + Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); + Procedures->Conn = this; - if (ReducerName == TEXT("insert_one_every_primitive_struct")) - { - FInsertOneEveryPrimitiveStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneEveryPrimitiveStruct(Args); - } + RegisterTable(TEXT("btree_u_32"), Db->BtreeU32); + RegisterTable(TEXT("indexed_simple_enum"), Db->IndexedSimpleEnum); + RegisterTable(TEXT("large_table"), Db->LargeTable); + RegisterTable(TEXT("one_bool"), Db->OneBool); + RegisterTable(TEXT("one_byte_struct"), Db->OneByteStruct); + RegisterTable(TEXT("one_connection_id"), Db->OneConnectionId); + RegisterTable(TEXT("one_enum_with_payload"), Db->OneEnumWithPayload); + RegisterTable(TEXT("one_every_primitive_struct"), Db->OneEveryPrimitiveStruct); + RegisterTable(TEXT("one_every_vec_struct"), Db->OneEveryVecStruct); + RegisterTable(TEXT("one_f_32"), Db->OneF32); + RegisterTable(TEXT("one_f_64"), Db->OneF64); + RegisterTable(TEXT("one_i_128"), Db->OneI128); + RegisterTable(TEXT("one_i_16"), Db->OneI16); + RegisterTable(TEXT("one_i_256"), Db->OneI256); + RegisterTable(TEXT("one_i_32"), Db->OneI32); + RegisterTable(TEXT("one_i_64"), Db->OneI64); + RegisterTable(TEXT("one_i_8"), Db->OneI8); + RegisterTable(TEXT("one_identity"), Db->OneIdentity); + RegisterTable(TEXT("one_simple_enum"), Db->OneSimpleEnum); + RegisterTable(TEXT("one_string"), Db->OneString); + RegisterTable(TEXT("one_timestamp"), Db->OneTimestamp); + RegisterTable(TEXT("one_u_128"), Db->OneU128); + RegisterTable(TEXT("one_u_16"), Db->OneU16); + RegisterTable(TEXT("one_u_256"), Db->OneU256); + RegisterTable(TEXT("one_u_32"), Db->OneU32); + RegisterTable(TEXT("one_u_64"), Db->OneU64); + RegisterTable(TEXT("one_u_8"), Db->OneU8); + RegisterTable(TEXT("one_unit_struct"), Db->OneUnitStruct); + RegisterTable(TEXT("one_uuid"), Db->OneUuid); + RegisterTable(TEXT("option_every_primitive_struct"), Db->OptionEveryPrimitiveStruct); + RegisterTable(TEXT("option_i_32"), Db->OptionI32); + RegisterTable(TEXT("option_identity"), Db->OptionIdentity); + RegisterTable(TEXT("option_simple_enum"), Db->OptionSimpleEnum); + RegisterTable(TEXT("option_string"), Db->OptionString); + RegisterTable(TEXT("option_uuid"), Db->OptionUuid); + RegisterTable(TEXT("option_vec_option_i_32"), Db->OptionVecOptionI32); + RegisterTable(TEXT("pk_bool"), Db->PkBool); + RegisterTable(TEXT("pk_connection_id"), Db->PkConnectionId); + RegisterTable(TEXT("pk_i_128"), Db->PkI128); + RegisterTable(TEXT("pk_i_16"), Db->PkI16); + RegisterTable(TEXT("pk_i_256"), Db->PkI256); + RegisterTable(TEXT("pk_i_32"), Db->PkI32); + RegisterTable(TEXT("pk_i_64"), Db->PkI64); + RegisterTable(TEXT("pk_i_8"), Db->PkI8); + RegisterTable(TEXT("pk_identity"), Db->PkIdentity); + RegisterTable(TEXT("pk_simple_enum"), Db->PkSimpleEnum); + RegisterTable(TEXT("pk_string"), Db->PkString); + RegisterTable(TEXT("pk_u_128"), Db->PkU128); + RegisterTable(TEXT("pk_u_16"), Db->PkU16); + RegisterTable(TEXT("pk_u_256"), Db->PkU256); + RegisterTable(TEXT("pk_u_32"), Db->PkU32); + RegisterTable(TEXT("pk_u_32_two"), Db->PkU32Two); + RegisterTable(TEXT("pk_u_64"), Db->PkU64); + RegisterTable(TEXT("pk_u_8"), Db->PkU8); + RegisterTable(TEXT("pk_uuid"), Db->PkUuid); + RegisterTable(TEXT("result_every_primitive_struct_string"), Db->ResultEveryPrimitiveStructString); + RegisterTable(TEXT("result_i_32_string"), Db->ResultI32String); + RegisterTable(TEXT("result_identity_string"), Db->ResultIdentityString); + RegisterTable(TEXT("result_simple_enum_i_32"), Db->ResultSimpleEnumI32); + RegisterTable(TEXT("result_string_i_32"), Db->ResultStringI32); + RegisterTable(TEXT("result_vec_i_32_string"), Db->ResultVecI32String); + RegisterTable(TEXT("scheduled_table"), Db->ScheduledTable); + RegisterTable(TEXT("table_holds_table"), Db->TableHoldsTable); + RegisterTable(TEXT("unique_bool"), Db->UniqueBool); + RegisterTable(TEXT("unique_connection_id"), Db->UniqueConnectionId); + RegisterTable(TEXT("unique_i_128"), Db->UniqueI128); + RegisterTable(TEXT("unique_i_16"), Db->UniqueI16); + RegisterTable(TEXT("unique_i_256"), Db->UniqueI256); + RegisterTable(TEXT("unique_i_32"), Db->UniqueI32); + RegisterTable(TEXT("unique_i_64"), Db->UniqueI64); + RegisterTable(TEXT("unique_i_8"), Db->UniqueI8); + RegisterTable(TEXT("unique_identity"), Db->UniqueIdentity); + RegisterTable(TEXT("unique_string"), Db->UniqueString); + RegisterTable(TEXT("unique_u_128"), Db->UniqueU128); + RegisterTable(TEXT("unique_u_16"), Db->UniqueU16); + RegisterTable(TEXT("unique_u_256"), Db->UniqueU256); + RegisterTable(TEXT("unique_u_32"), Db->UniqueU32); + RegisterTable(TEXT("unique_u_64"), Db->UniqueU64); + RegisterTable(TEXT("unique_u_8"), Db->UniqueU8); + RegisterTable(TEXT("unique_uuid"), Db->UniqueUuid); + RegisterTable(TEXT("users"), Db->Users); + RegisterTable(TEXT("vec_bool"), Db->VecBool); + RegisterTable(TEXT("vec_byte_struct"), Db->VecByteStruct); + RegisterTable(TEXT("vec_connection_id"), Db->VecConnectionId); + RegisterTable(TEXT("vec_enum_with_payload"), Db->VecEnumWithPayload); + RegisterTable(TEXT("vec_every_primitive_struct"), Db->VecEveryPrimitiveStruct); + RegisterTable(TEXT("vec_every_vec_struct"), Db->VecEveryVecStruct); + RegisterTable(TEXT("vec_f_32"), Db->VecF32); + RegisterTable(TEXT("vec_f_64"), Db->VecF64); + RegisterTable(TEXT("vec_i_128"), Db->VecI128); + RegisterTable(TEXT("vec_i_16"), Db->VecI16); + RegisterTable(TEXT("vec_i_256"), Db->VecI256); + RegisterTable(TEXT("vec_i_32"), Db->VecI32); + RegisterTable(TEXT("vec_i_64"), Db->VecI64); + RegisterTable(TEXT("vec_i_8"), Db->VecI8); + RegisterTable(TEXT("vec_identity"), Db->VecIdentity); + RegisterTable(TEXT("vec_simple_enum"), Db->VecSimpleEnum); + RegisterTable(TEXT("vec_string"), Db->VecString); + RegisterTable(TEXT("vec_timestamp"), Db->VecTimestamp); + RegisterTable(TEXT("vec_u_128"), Db->VecU128); + RegisterTable(TEXT("vec_u_16"), Db->VecU16); + RegisterTable(TEXT("vec_u_256"), Db->VecU256); + RegisterTable(TEXT("vec_u_32"), Db->VecU32); + RegisterTable(TEXT("vec_u_64"), Db->VecU64); + RegisterTable(TEXT("vec_u_8"), Db->VecU8); + RegisterTable(TEXT("vec_unit_struct"), Db->VecUnitStruct); + RegisterTable(TEXT("vec_uuid"), Db->VecUuid); +} - if (ReducerName == TEXT("insert_one_every_vec_struct")) - { - FInsertOneEveryVecStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneEveryVecStruct(Args); - } - - if (ReducerName == TEXT("insert_one_f32")) - { - FInsertOneF32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneF32(Args); - } - - if (ReducerName == TEXT("insert_one_f64")) - { - FInsertOneF64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneF64(Args); - } - - if (ReducerName == TEXT("insert_one_i128")) - { - FInsertOneI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI128(Args); - } - - if (ReducerName == TEXT("insert_one_i16")) - { - FInsertOneI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI16(Args); - } - - if (ReducerName == TEXT("insert_one_i256")) - { - FInsertOneI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI256(Args); - } - - if (ReducerName == TEXT("insert_one_i32")) - { - FInsertOneI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI32(Args); - } - - if (ReducerName == TEXT("insert_one_i64")) - { - FInsertOneI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI64(Args); - } - - if (ReducerName == TEXT("insert_one_i8")) - { - FInsertOneI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneI8(Args); - } - - if (ReducerName == TEXT("insert_one_identity")) - { - FInsertOneIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneIdentity(Args); - } - - if (ReducerName == TEXT("insert_one_simple_enum")) - { - FInsertOneSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneSimpleEnum(Args); - } - - if (ReducerName == TEXT("insert_one_string")) - { - FInsertOneStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneString(Args); - } - - if (ReducerName == TEXT("insert_one_timestamp")) - { - FInsertOneTimestampArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneTimestamp(Args); - } - - if (ReducerName == TEXT("insert_one_u128")) - { - FInsertOneU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU128(Args); - } - - if (ReducerName == TEXT("insert_one_u16")) - { - FInsertOneU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU16(Args); - } - - if (ReducerName == TEXT("insert_one_u256")) - { - FInsertOneU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU256(Args); - } - - if (ReducerName == TEXT("insert_one_u32")) - { - FInsertOneU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU32(Args); - } - - if (ReducerName == TEXT("insert_one_u64")) - { - FInsertOneU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU64(Args); - } - - if (ReducerName == TEXT("insert_one_u8")) - { - FInsertOneU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneU8(Args); - } - - if (ReducerName == TEXT("insert_one_unit_struct")) - { - FInsertOneUnitStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneUnitStruct(Args); - } - - if (ReducerName == TEXT("insert_one_uuid")) - { - FInsertOneUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOneUuid(Args); - } - - if (ReducerName == TEXT("insert_option_every_primitive_struct")) - { - FInsertOptionEveryPrimitiveStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionEveryPrimitiveStruct(Args); - } - - if (ReducerName == TEXT("insert_option_i32")) - { - FInsertOptionI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionI32(Args); - } - - if (ReducerName == TEXT("insert_option_identity")) - { - FInsertOptionIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionIdentity(Args); - } - - if (ReducerName == TEXT("insert_option_simple_enum")) - { - FInsertOptionSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionSimpleEnum(Args); - } - - if (ReducerName == TEXT("insert_option_string")) - { - FInsertOptionStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionString(Args); - } - - if (ReducerName == TEXT("insert_option_uuid")) - { - FInsertOptionUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionUuid(Args); - } - - if (ReducerName == TEXT("insert_option_vec_option_i32")) - { - FInsertOptionVecOptionI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertOptionVecOptionI32(Args); - } - - if (ReducerName == TEXT("insert_pk_bool")) - { - FInsertPkBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkBool(Args); - } - - if (ReducerName == TEXT("insert_pk_connection_id")) - { - FInsertPkConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkConnectionId(Args); - } - - if (ReducerName == TEXT("insert_pk_i128")) - { - FInsertPkI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI128(Args); - } - - if (ReducerName == TEXT("insert_pk_i16")) - { - FInsertPkI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI16(Args); - } - - if (ReducerName == TEXT("insert_pk_i256")) - { - FInsertPkI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI256(Args); - } - - if (ReducerName == TEXT("insert_pk_i32")) - { - FInsertPkI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI32(Args); - } - - if (ReducerName == TEXT("insert_pk_i64")) - { - FInsertPkI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI64(Args); - } - - if (ReducerName == TEXT("insert_pk_i8")) - { - FInsertPkI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkI8(Args); - } - - if (ReducerName == TEXT("insert_pk_identity")) - { - FInsertPkIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkIdentity(Args); - } - - if (ReducerName == TEXT("insert_pk_simple_enum")) - { - FInsertPkSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkSimpleEnum(Args); - } - - if (ReducerName == TEXT("insert_pk_string")) - { - FInsertPkStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkString(Args); - } - - if (ReducerName == TEXT("insert_pk_u128")) - { - FInsertPkU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU128(Args); - } - - if (ReducerName == TEXT("insert_pk_u16")) - { - FInsertPkU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU16(Args); - } - - if (ReducerName == TEXT("insert_pk_u256")) - { - FInsertPkU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU256(Args); - } - - if (ReducerName == TEXT("insert_pk_u32")) - { - FInsertPkU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU32(Args); - } - - if (ReducerName == TEXT("insert_pk_u32_two")) - { - FInsertPkU32TwoArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU32Two(Args); - } - - if (ReducerName == TEXT("insert_pk_u64")) - { - FInsertPkU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU64(Args); - } - - if (ReducerName == TEXT("insert_pk_u8")) - { - FInsertPkU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkU8(Args); - } - - if (ReducerName == TEXT("insert_pk_uuid")) - { - FInsertPkUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPkUuid(Args); - } - - if (ReducerName == TEXT("insert_primitives_as_strings")) - { - FInsertPrimitivesAsStringsArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertPrimitivesAsStrings(Args); - } - - if (ReducerName == TEXT("insert_result_every_primitive_struct_string")) - { - FInsertResultEveryPrimitiveStructStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultEveryPrimitiveStructString(Args); - } - - if (ReducerName == TEXT("insert_result_i32_string")) - { - FInsertResultI32StringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultI32String(Args); - } - - if (ReducerName == TEXT("insert_result_identity_string")) - { - FInsertResultIdentityStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultIdentityString(Args); - } - - if (ReducerName == TEXT("insert_result_simple_enum_i32")) - { - FInsertResultSimpleEnumI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultSimpleEnumI32(Args); - } - - if (ReducerName == TEXT("insert_result_string_i32")) - { - FInsertResultStringI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultStringI32(Args); - } - - if (ReducerName == TEXT("insert_result_vec_i32_string")) - { - FInsertResultVecI32StringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertResultVecI32String(Args); - } - - if (ReducerName == TEXT("insert_table_holds_table")) - { - FInsertTableHoldsTableArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertTableHoldsTable(Args); - } - - if (ReducerName == TEXT("insert_unique_bool")) - { - FInsertUniqueBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueBool(Args); - } - - if (ReducerName == TEXT("insert_unique_connection_id")) - { - FInsertUniqueConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueConnectionId(Args); - } - - if (ReducerName == TEXT("insert_unique_i128")) - { - FInsertUniqueI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI128(Args); - } - - if (ReducerName == TEXT("insert_unique_i16")) - { - FInsertUniqueI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI16(Args); - } - - if (ReducerName == TEXT("insert_unique_i256")) - { - FInsertUniqueI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI256(Args); - } - - if (ReducerName == TEXT("insert_unique_i32")) - { - FInsertUniqueI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI32(Args); - } - - if (ReducerName == TEXT("insert_unique_i64")) - { - FInsertUniqueI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI64(Args); - } - - if (ReducerName == TEXT("insert_unique_i8")) - { - FInsertUniqueI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueI8(Args); - } - - if (ReducerName == TEXT("insert_unique_identity")) - { - FInsertUniqueIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueIdentity(Args); - } - - if (ReducerName == TEXT("insert_unique_string")) - { - FInsertUniqueStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueString(Args); - } - - if (ReducerName == TEXT("insert_unique_u128")) - { - FInsertUniqueU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU128(Args); - } - - if (ReducerName == TEXT("insert_unique_u16")) - { - FInsertUniqueU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU16(Args); - } - - if (ReducerName == TEXT("insert_unique_u256")) - { - FInsertUniqueU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU256(Args); - } - - if (ReducerName == TEXT("insert_unique_u32")) - { - FInsertUniqueU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU32(Args); - } - - if (ReducerName == TEXT("insert_unique_u32_update_pk_u32")) - { - FInsertUniqueU32UpdatePkU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU32UpdatePkU32(Args); - } - - if (ReducerName == TEXT("insert_unique_u64")) - { - FInsertUniqueU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU64(Args); - } - - if (ReducerName == TEXT("insert_unique_u8")) - { - FInsertUniqueU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueU8(Args); - } - - if (ReducerName == TEXT("insert_unique_uuid")) - { - FInsertUniqueUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUniqueUuid(Args); - } - - if (ReducerName == TEXT("insert_user")) - { - FInsertUserArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertUser(Args); - } - - if (ReducerName == TEXT("insert_vec_bool")) - { - FInsertVecBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecBool(Args); - } - - if (ReducerName == TEXT("insert_vec_byte_struct")) - { - FInsertVecByteStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecByteStruct(Args); - } - - if (ReducerName == TEXT("insert_vec_connection_id")) - { - FInsertVecConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecConnectionId(Args); - } - - if (ReducerName == TEXT("insert_vec_enum_with_payload")) - { - FInsertVecEnumWithPayloadArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecEnumWithPayload(Args); - } - - if (ReducerName == TEXT("insert_vec_every_primitive_struct")) - { - FInsertVecEveryPrimitiveStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecEveryPrimitiveStruct(Args); - } - - if (ReducerName == TEXT("insert_vec_every_vec_struct")) - { - FInsertVecEveryVecStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecEveryVecStruct(Args); - } - - if (ReducerName == TEXT("insert_vec_f32")) - { - FInsertVecF32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecF32(Args); - } - - if (ReducerName == TEXT("insert_vec_f64")) - { - FInsertVecF64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecF64(Args); - } - - if (ReducerName == TEXT("insert_vec_i128")) - { - FInsertVecI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI128(Args); - } - - if (ReducerName == TEXT("insert_vec_i16")) - { - FInsertVecI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI16(Args); - } - - if (ReducerName == TEXT("insert_vec_i256")) - { - FInsertVecI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI256(Args); - } - - if (ReducerName == TEXT("insert_vec_i32")) - { - FInsertVecI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI32(Args); - } - - if (ReducerName == TEXT("insert_vec_i64")) - { - FInsertVecI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI64(Args); - } - - if (ReducerName == TEXT("insert_vec_i8")) - { - FInsertVecI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecI8(Args); - } - - if (ReducerName == TEXT("insert_vec_identity")) - { - FInsertVecIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecIdentity(Args); - } - - if (ReducerName == TEXT("insert_vec_simple_enum")) - { - FInsertVecSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecSimpleEnum(Args); - } - - if (ReducerName == TEXT("insert_vec_string")) - { - FInsertVecStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecString(Args); - } - - if (ReducerName == TEXT("insert_vec_timestamp")) - { - FInsertVecTimestampArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecTimestamp(Args); - } - - if (ReducerName == TEXT("insert_vec_u128")) - { - FInsertVecU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU128(Args); - } - - if (ReducerName == TEXT("insert_vec_u16")) - { - FInsertVecU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU16(Args); - } - - if (ReducerName == TEXT("insert_vec_u256")) - { - FInsertVecU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU256(Args); - } - - if (ReducerName == TEXT("insert_vec_u32")) - { - FInsertVecU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU32(Args); - } - - if (ReducerName == TEXT("insert_vec_u64")) - { - FInsertVecU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU64(Args); - } - - if (ReducerName == TEXT("insert_vec_u8")) - { - FInsertVecU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecU8(Args); - } - - if (ReducerName == TEXT("insert_vec_unit_struct")) - { - FInsertVecUnitStructArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecUnitStruct(Args); - } - - if (ReducerName == TEXT("insert_vec_uuid")) - { - FInsertVecUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::InsertVecUuid(Args); - } - - if (ReducerName == TEXT("no_op_succeeds")) - { - FNoOpSucceedsArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::NoOpSucceeds(Args); - } - - if (ReducerName == TEXT("sorted_uuids_insert")) - { - FSortedUuidsInsertArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::SortedUuidsInsert(Args); - } - - if (ReducerName == TEXT("update_indexed_simple_enum")) - { - FUpdateIndexedSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateIndexedSimpleEnum(Args); - } - - if (ReducerName == TEXT("update_pk_bool")) - { - FUpdatePkBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkBool(Args); - } - - if (ReducerName == TEXT("update_pk_connection_id")) - { - FUpdatePkConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkConnectionId(Args); - } - - if (ReducerName == TEXT("update_pk_i128")) - { - FUpdatePkI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI128(Args); - } - - if (ReducerName == TEXT("update_pk_i16")) - { - FUpdatePkI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI16(Args); - } - - if (ReducerName == TEXT("update_pk_i256")) - { - FUpdatePkI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI256(Args); - } - - if (ReducerName == TEXT("update_pk_i32")) - { - FUpdatePkI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI32(Args); - } - - if (ReducerName == TEXT("update_pk_i64")) - { - FUpdatePkI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI64(Args); - } - - if (ReducerName == TEXT("update_pk_i8")) - { - FUpdatePkI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkI8(Args); - } - - if (ReducerName == TEXT("update_pk_identity")) - { - FUpdatePkIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkIdentity(Args); - } - - if (ReducerName == TEXT("update_pk_simple_enum")) - { - FUpdatePkSimpleEnumArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkSimpleEnum(Args); - } - - if (ReducerName == TEXT("update_pk_string")) - { - FUpdatePkStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkString(Args); - } - - if (ReducerName == TEXT("update_pk_u128")) - { - FUpdatePkU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU128(Args); - } - - if (ReducerName == TEXT("update_pk_u16")) - { - FUpdatePkU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU16(Args); - } - - if (ReducerName == TEXT("update_pk_u256")) - { - FUpdatePkU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU256(Args); - } - - if (ReducerName == TEXT("update_pk_u32")) - { - FUpdatePkU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU32(Args); - } - - if (ReducerName == TEXT("update_pk_u32_two")) - { - FUpdatePkU32TwoArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU32Two(Args); - } - - if (ReducerName == TEXT("update_pk_u64")) - { - FUpdatePkU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU64(Args); - } - - if (ReducerName == TEXT("update_pk_u8")) - { - FUpdatePkU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkU8(Args); - } - - if (ReducerName == TEXT("update_pk_uuid")) - { - FUpdatePkUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdatePkUuid(Args); - } - - if (ReducerName == TEXT("update_unique_bool")) - { - FUpdateUniqueBoolArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueBool(Args); - } - - if (ReducerName == TEXT("update_unique_connection_id")) - { - FUpdateUniqueConnectionIdArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueConnectionId(Args); - } - - if (ReducerName == TEXT("update_unique_i128")) - { - FUpdateUniqueI128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI128(Args); - } - - if (ReducerName == TEXT("update_unique_i16")) - { - FUpdateUniqueI16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI16(Args); - } - - if (ReducerName == TEXT("update_unique_i256")) - { - FUpdateUniqueI256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI256(Args); - } - - if (ReducerName == TEXT("update_unique_i32")) - { - FUpdateUniqueI32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI32(Args); - } - - if (ReducerName == TEXT("update_unique_i64")) - { - FUpdateUniqueI64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI64(Args); - } - - if (ReducerName == TEXT("update_unique_i8")) - { - FUpdateUniqueI8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueI8(Args); - } - - if (ReducerName == TEXT("update_unique_identity")) - { - FUpdateUniqueIdentityArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueIdentity(Args); - } - - if (ReducerName == TEXT("update_unique_string")) - { - FUpdateUniqueStringArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueString(Args); - } - - if (ReducerName == TEXT("update_unique_u128")) - { - FUpdateUniqueU128Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU128(Args); - } - - if (ReducerName == TEXT("update_unique_u16")) - { - FUpdateUniqueU16Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU16(Args); - } - - if (ReducerName == TEXT("update_unique_u256")) - { - FUpdateUniqueU256Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU256(Args); - } - - if (ReducerName == TEXT("update_unique_u32")) - { - FUpdateUniqueU32Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU32(Args); - } - - if (ReducerName == TEXT("update_unique_u64")) - { - FUpdateUniqueU64Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU64(Args); - } - - if (ReducerName == TEXT("update_unique_u8")) - { - FUpdateUniqueU8Args Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueU8(Args); - } - - if (ReducerName == TEXT("update_unique_uuid")) - { - FUpdateUniqueUuidArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::UpdateUniqueUuid(Args); - } - - return FReducer(); -} - -UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) -{ - SetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SetReducerFlags")); - - Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); - Db->Initialize(); - - Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); - Reducers->SetCallReducerFlags = SetReducerFlags; - Reducers->Conn = this; - - Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); - Procedures->Conn = this; - - RegisterTable(TEXT("btree_u32"), Db->BtreeU32); - RegisterTable(TEXT("indexed_simple_enum"), Db->IndexedSimpleEnum); - RegisterTable(TEXT("large_table"), Db->LargeTable); - RegisterTable(TEXT("one_bool"), Db->OneBool); - RegisterTable(TEXT("one_byte_struct"), Db->OneByteStruct); - RegisterTable(TEXT("one_connection_id"), Db->OneConnectionId); - RegisterTable(TEXT("one_enum_with_payload"), Db->OneEnumWithPayload); - RegisterTable(TEXT("one_every_primitive_struct"), Db->OneEveryPrimitiveStruct); - RegisterTable(TEXT("one_every_vec_struct"), Db->OneEveryVecStruct); - RegisterTable(TEXT("one_f32"), Db->OneF32); - RegisterTable(TEXT("one_f64"), Db->OneF64); - RegisterTable(TEXT("one_i128"), Db->OneI128); - RegisterTable(TEXT("one_i16"), Db->OneI16); - RegisterTable(TEXT("one_i256"), Db->OneI256); - RegisterTable(TEXT("one_i32"), Db->OneI32); - RegisterTable(TEXT("one_i64"), Db->OneI64); - RegisterTable(TEXT("one_i8"), Db->OneI8); - RegisterTable(TEXT("one_identity"), Db->OneIdentity); - RegisterTable(TEXT("one_simple_enum"), Db->OneSimpleEnum); - RegisterTable(TEXT("one_string"), Db->OneString); - RegisterTable(TEXT("one_timestamp"), Db->OneTimestamp); - RegisterTable(TEXT("one_u128"), Db->OneU128); - RegisterTable(TEXT("one_u16"), Db->OneU16); - RegisterTable(TEXT("one_u256"), Db->OneU256); - RegisterTable(TEXT("one_u32"), Db->OneU32); - RegisterTable(TEXT("one_u64"), Db->OneU64); - RegisterTable(TEXT("one_u8"), Db->OneU8); - RegisterTable(TEXT("one_unit_struct"), Db->OneUnitStruct); - RegisterTable(TEXT("one_uuid"), Db->OneUuid); - RegisterTable(TEXT("option_every_primitive_struct"), Db->OptionEveryPrimitiveStruct); - RegisterTable(TEXT("option_i32"), Db->OptionI32); - RegisterTable(TEXT("option_identity"), Db->OptionIdentity); - RegisterTable(TEXT("option_simple_enum"), Db->OptionSimpleEnum); - RegisterTable(TEXT("option_string"), Db->OptionString); - RegisterTable(TEXT("option_uuid"), Db->OptionUuid); - RegisterTable(TEXT("option_vec_option_i32"), Db->OptionVecOptionI32); - RegisterTable(TEXT("pk_bool"), Db->PkBool); - RegisterTable(TEXT("pk_connection_id"), Db->PkConnectionId); - RegisterTable(TEXT("pk_i128"), Db->PkI128); - RegisterTable(TEXT("pk_i16"), Db->PkI16); - RegisterTable(TEXT("pk_i256"), Db->PkI256); - RegisterTable(TEXT("pk_i32"), Db->PkI32); - RegisterTable(TEXT("pk_i64"), Db->PkI64); - RegisterTable(TEXT("pk_i8"), Db->PkI8); - RegisterTable(TEXT("pk_identity"), Db->PkIdentity); - RegisterTable(TEXT("pk_simple_enum"), Db->PkSimpleEnum); - RegisterTable(TEXT("pk_string"), Db->PkString); - RegisterTable(TEXT("pk_u128"), Db->PkU128); - RegisterTable(TEXT("pk_u16"), Db->PkU16); - RegisterTable(TEXT("pk_u256"), Db->PkU256); - RegisterTable(TEXT("pk_u32"), Db->PkU32); - RegisterTable(TEXT("pk_u32_two"), Db->PkU32Two); - RegisterTable(TEXT("pk_u64"), Db->PkU64); - RegisterTable(TEXT("pk_u8"), Db->PkU8); - RegisterTable(TEXT("pk_uuid"), Db->PkUuid); - RegisterTable(TEXT("result_every_primitive_struct_string"), Db->ResultEveryPrimitiveStructString); - RegisterTable(TEXT("result_i32_string"), Db->ResultI32String); - RegisterTable(TEXT("result_identity_string"), Db->ResultIdentityString); - RegisterTable(TEXT("result_simple_enum_i32"), Db->ResultSimpleEnumI32); - RegisterTable(TEXT("result_string_i32"), Db->ResultStringI32); - RegisterTable(TEXT("result_vec_i32_string"), Db->ResultVecI32String); - RegisterTable(TEXT("scheduled_table"), Db->ScheduledTable); - RegisterTable(TEXT("table_holds_table"), Db->TableHoldsTable); - RegisterTable(TEXT("unique_bool"), Db->UniqueBool); - RegisterTable(TEXT("unique_connection_id"), Db->UniqueConnectionId); - RegisterTable(TEXT("unique_i128"), Db->UniqueI128); - RegisterTable(TEXT("unique_i16"), Db->UniqueI16); - RegisterTable(TEXT("unique_i256"), Db->UniqueI256); - RegisterTable(TEXT("unique_i32"), Db->UniqueI32); - RegisterTable(TEXT("unique_i64"), Db->UniqueI64); - RegisterTable(TEXT("unique_i8"), Db->UniqueI8); - RegisterTable(TEXT("unique_identity"), Db->UniqueIdentity); - RegisterTable(TEXT("unique_string"), Db->UniqueString); - RegisterTable(TEXT("unique_u128"), Db->UniqueU128); - RegisterTable(TEXT("unique_u16"), Db->UniqueU16); - RegisterTable(TEXT("unique_u256"), Db->UniqueU256); - RegisterTable(TEXT("unique_u32"), Db->UniqueU32); - RegisterTable(TEXT("unique_u64"), Db->UniqueU64); - RegisterTable(TEXT("unique_u8"), Db->UniqueU8); - RegisterTable(TEXT("unique_uuid"), Db->UniqueUuid); - RegisterTable(TEXT("users"), Db->Users); - RegisterTable(TEXT("vec_bool"), Db->VecBool); - RegisterTable(TEXT("vec_byte_struct"), Db->VecByteStruct); - RegisterTable(TEXT("vec_connection_id"), Db->VecConnectionId); - RegisterTable(TEXT("vec_enum_with_payload"), Db->VecEnumWithPayload); - RegisterTable(TEXT("vec_every_primitive_struct"), Db->VecEveryPrimitiveStruct); - RegisterTable(TEXT("vec_every_vec_struct"), Db->VecEveryVecStruct); - RegisterTable(TEXT("vec_f32"), Db->VecF32); - RegisterTable(TEXT("vec_f64"), Db->VecF64); - RegisterTable(TEXT("vec_i128"), Db->VecI128); - RegisterTable(TEXT("vec_i16"), Db->VecI16); - RegisterTable(TEXT("vec_i256"), Db->VecI256); - RegisterTable(TEXT("vec_i32"), Db->VecI32); - RegisterTable(TEXT("vec_i64"), Db->VecI64); - RegisterTable(TEXT("vec_i8"), Db->VecI8); - RegisterTable(TEXT("vec_identity"), Db->VecIdentity); - RegisterTable(TEXT("vec_simple_enum"), Db->VecSimpleEnum); - RegisterTable(TEXT("vec_string"), Db->VecString); - RegisterTable(TEXT("vec_timestamp"), Db->VecTimestamp); - RegisterTable(TEXT("vec_u128"), Db->VecU128); - RegisterTable(TEXT("vec_u16"), Db->VecU16); - RegisterTable(TEXT("vec_u256"), Db->VecU256); - RegisterTable(TEXT("vec_u32"), Db->VecU32); - RegisterTable(TEXT("vec_u64"), Db->VecU64); - RegisterTable(TEXT("vec_u8"), Db->VecU8); - RegisterTable(TEXT("vec_unit_struct"), Db->VecUnitStruct); - RegisterTable(TEXT("vec_uuid"), Db->VecUuid); -} - -FContextBase::FContextBase(UDbConnection* InConn) -{ - Db = InConn->Db; - Reducers = InConn->Reducers; - SetReducerFlags = InConn->SetReducerFlags; - Procedures = InConn->Procedures; - Conn = InConn; -} -bool FContextBase::IsActive() const -{ - return Conn->IsActive(); -} -void FContextBase::Disconnect() -{ - Conn->Disconnect(); -} -USubscriptionBuilder* FContextBase::SubscriptionBuilder() -{ - return Conn->SubscriptionBuilder(); -} -bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const -{ - return Conn->TryGetIdentity(OutIdentity); -} -FSpacetimeDBConnectionId FContextBase::GetConnectionId() const -{ - return Conn->GetConnectionId(); -} - -void URemoteTables::Initialize() -{ - - /** Creating tables */ - BtreeU32 = NewObject(this); - IndexedSimpleEnum = NewObject(this); - LargeTable = NewObject(this); - OneBool = NewObject(this); - OneByteStruct = NewObject(this); - OneConnectionId = NewObject(this); - OneEnumWithPayload = NewObject(this); - OneEveryPrimitiveStruct = NewObject(this); - OneEveryVecStruct = NewObject(this); - OneF32 = NewObject(this); - OneF64 = NewObject(this); - OneI128 = NewObject(this); - OneI16 = NewObject(this); - OneI256 = NewObject(this); - OneI32 = NewObject(this); - OneI64 = NewObject(this); - OneI8 = NewObject(this); - OneIdentity = NewObject(this); - OneSimpleEnum = NewObject(this); - OneString = NewObject(this); - OneTimestamp = NewObject(this); - OneU128 = NewObject(this); - OneU16 = NewObject(this); - OneU256 = NewObject(this); - OneU32 = NewObject(this); - OneU64 = NewObject(this); - OneU8 = NewObject(this); - OneUnitStruct = NewObject(this); - OneUuid = NewObject(this); - OptionEveryPrimitiveStruct = NewObject(this); - OptionI32 = NewObject(this); - OptionIdentity = NewObject(this); - OptionSimpleEnum = NewObject(this); - OptionString = NewObject(this); - OptionUuid = NewObject(this); - OptionVecOptionI32 = NewObject(this); - PkBool = NewObject(this); - PkConnectionId = NewObject(this); - PkI128 = NewObject(this); - PkI16 = NewObject(this); - PkI256 = NewObject(this); - PkI32 = NewObject(this); - PkI64 = NewObject(this); - PkI8 = NewObject(this); - PkIdentity = NewObject(this); - PkSimpleEnum = NewObject(this); - PkString = NewObject(this); - PkU128 = NewObject(this); - PkU16 = NewObject(this); - PkU256 = NewObject(this); - PkU32 = NewObject(this); - PkU32Two = NewObject(this); - PkU64 = NewObject(this); - PkU8 = NewObject(this); - PkUuid = NewObject(this); - ResultEveryPrimitiveStructString = NewObject(this); - ResultI32String = NewObject(this); - ResultIdentityString = NewObject(this); - ResultSimpleEnumI32 = NewObject(this); - ResultStringI32 = NewObject(this); - ResultVecI32String = NewObject(this); - ScheduledTable = NewObject(this); - TableHoldsTable = NewObject(this); - UniqueBool = NewObject(this); - UniqueConnectionId = NewObject(this); - UniqueI128 = NewObject(this); - UniqueI16 = NewObject(this); - UniqueI256 = NewObject(this); - UniqueI32 = NewObject(this); - UniqueI64 = NewObject(this); - UniqueI8 = NewObject(this); - UniqueIdentity = NewObject(this); - UniqueString = NewObject(this); - UniqueU128 = NewObject(this); - UniqueU16 = NewObject(this); - UniqueU256 = NewObject(this); - UniqueU32 = NewObject(this); - UniqueU64 = NewObject(this); - UniqueU8 = NewObject(this); - UniqueUuid = NewObject(this); - Users = NewObject(this); - VecBool = NewObject(this); - VecByteStruct = NewObject(this); - VecConnectionId = NewObject(this); - VecEnumWithPayload = NewObject(this); - VecEveryPrimitiveStruct = NewObject(this); - VecEveryVecStruct = NewObject(this); - VecF32 = NewObject(this); - VecF64 = NewObject(this); - VecI128 = NewObject(this); - VecI16 = NewObject(this); - VecI256 = NewObject(this); - VecI32 = NewObject(this); - VecI64 = NewObject(this); - VecI8 = NewObject(this); - VecIdentity = NewObject(this); - VecSimpleEnum = NewObject(this); - VecString = NewObject(this); - VecTimestamp = NewObject(this); - VecU128 = NewObject(this); - VecU16 = NewObject(this); - VecU256 = NewObject(this); - VecU32 = NewObject(this); - VecU64 = NewObject(this); - VecU8 = NewObject(this); - VecUnitStruct = NewObject(this); - VecUuid = NewObject(this); - /**/ - - /** Initialization */ - BtreeU32->PostInitialize(); - IndexedSimpleEnum->PostInitialize(); - LargeTable->PostInitialize(); - OneBool->PostInitialize(); - OneByteStruct->PostInitialize(); - OneConnectionId->PostInitialize(); - OneEnumWithPayload->PostInitialize(); - OneEveryPrimitiveStruct->PostInitialize(); - OneEveryVecStruct->PostInitialize(); - OneF32->PostInitialize(); - OneF64->PostInitialize(); - OneI128->PostInitialize(); - OneI16->PostInitialize(); - OneI256->PostInitialize(); - OneI32->PostInitialize(); - OneI64->PostInitialize(); - OneI8->PostInitialize(); - OneIdentity->PostInitialize(); - OneSimpleEnum->PostInitialize(); - OneString->PostInitialize(); - OneTimestamp->PostInitialize(); - OneU128->PostInitialize(); - OneU16->PostInitialize(); - OneU256->PostInitialize(); - OneU32->PostInitialize(); - OneU64->PostInitialize(); - OneU8->PostInitialize(); - OneUnitStruct->PostInitialize(); - OneUuid->PostInitialize(); - OptionEveryPrimitiveStruct->PostInitialize(); - OptionI32->PostInitialize(); - OptionIdentity->PostInitialize(); - OptionSimpleEnum->PostInitialize(); - OptionString->PostInitialize(); - OptionUuid->PostInitialize(); - OptionVecOptionI32->PostInitialize(); - PkBool->PostInitialize(); - PkConnectionId->PostInitialize(); - PkI128->PostInitialize(); - PkI16->PostInitialize(); - PkI256->PostInitialize(); - PkI32->PostInitialize(); - PkI64->PostInitialize(); - PkI8->PostInitialize(); - PkIdentity->PostInitialize(); - PkSimpleEnum->PostInitialize(); - PkString->PostInitialize(); - PkU128->PostInitialize(); - PkU16->PostInitialize(); - PkU256->PostInitialize(); - PkU32->PostInitialize(); - PkU32Two->PostInitialize(); - PkU64->PostInitialize(); - PkU8->PostInitialize(); - PkUuid->PostInitialize(); - ResultEveryPrimitiveStructString->PostInitialize(); - ResultI32String->PostInitialize(); - ResultIdentityString->PostInitialize(); - ResultSimpleEnumI32->PostInitialize(); - ResultStringI32->PostInitialize(); - ResultVecI32String->PostInitialize(); - ScheduledTable->PostInitialize(); - TableHoldsTable->PostInitialize(); - UniqueBool->PostInitialize(); - UniqueConnectionId->PostInitialize(); - UniqueI128->PostInitialize(); - UniqueI16->PostInitialize(); - UniqueI256->PostInitialize(); - UniqueI32->PostInitialize(); - UniqueI64->PostInitialize(); - UniqueI8->PostInitialize(); - UniqueIdentity->PostInitialize(); - UniqueString->PostInitialize(); - UniqueU128->PostInitialize(); - UniqueU16->PostInitialize(); - UniqueU256->PostInitialize(); - UniqueU32->PostInitialize(); - UniqueU64->PostInitialize(); - UniqueU8->PostInitialize(); - UniqueUuid->PostInitialize(); - Users->PostInitialize(); - VecBool->PostInitialize(); - VecByteStruct->PostInitialize(); - VecConnectionId->PostInitialize(); - VecEnumWithPayload->PostInitialize(); - VecEveryPrimitiveStruct->PostInitialize(); - VecEveryVecStruct->PostInitialize(); - VecF32->PostInitialize(); - VecF64->PostInitialize(); - VecI128->PostInitialize(); - VecI16->PostInitialize(); - VecI256->PostInitialize(); - VecI32->PostInitialize(); - VecI64->PostInitialize(); - VecI8->PostInitialize(); - VecIdentity->PostInitialize(); - VecSimpleEnum->PostInitialize(); - VecString->PostInitialize(); - VecTimestamp->PostInitialize(); - VecU128->PostInitialize(); - VecU16->PostInitialize(); - VecU256->PostInitialize(); - VecU32->PostInitialize(); - VecU64->PostInitialize(); - VecU8->PostInitialize(); - VecUnitStruct->PostInitialize(); - VecUuid->PostInitialize(); - /**/ -} - -void USetReducerFlags::DeleteFromBtreeU32(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteFromBtreeU32", Flag); -} -void USetReducerFlags::DeleteLargeTable(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteLargeTable", Flag); -} -void USetReducerFlags::DeletePkBool(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkBool", Flag); -} -void USetReducerFlags::DeletePkConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkConnectionId", Flag); -} -void USetReducerFlags::DeletePkI128(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI128", Flag); -} -void USetReducerFlags::DeletePkI16(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI16", Flag); -} -void USetReducerFlags::DeletePkI256(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI256", Flag); -} -void USetReducerFlags::DeletePkI32(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI32", Flag); -} -void USetReducerFlags::DeletePkI64(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI64", Flag); -} -void USetReducerFlags::DeletePkI8(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkI8", Flag); -} -void USetReducerFlags::DeletePkIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkIdentity", Flag); -} -void USetReducerFlags::DeletePkString(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkString", Flag); -} -void USetReducerFlags::DeletePkU128(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU128", Flag); -} -void USetReducerFlags::DeletePkU16(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU16", Flag); -} -void USetReducerFlags::DeletePkU256(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU256", Flag); -} -void USetReducerFlags::DeletePkU32(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU32", Flag); -} -void USetReducerFlags::DeletePkU32InsertPkU32Two(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU32InsertPkU32Two", Flag); -} -void USetReducerFlags::DeletePkU32Two(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU32Two", Flag); -} -void USetReducerFlags::DeletePkU64(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU64", Flag); -} -void USetReducerFlags::DeletePkU8(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkU8", Flag); -} -void USetReducerFlags::DeletePkUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("DeletePkUuid", Flag); -} -void USetReducerFlags::DeleteUniqueBool(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueBool", Flag); -} -void USetReducerFlags::DeleteUniqueConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueConnectionId", Flag); -} -void USetReducerFlags::DeleteUniqueI128(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI128", Flag); -} -void USetReducerFlags::DeleteUniqueI16(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI16", Flag); -} -void USetReducerFlags::DeleteUniqueI256(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI256", Flag); -} -void USetReducerFlags::DeleteUniqueI32(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI32", Flag); -} -void USetReducerFlags::DeleteUniqueI64(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI64", Flag); -} -void USetReducerFlags::DeleteUniqueI8(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueI8", Flag); -} -void USetReducerFlags::DeleteUniqueIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueIdentity", Flag); -} -void USetReducerFlags::DeleteUniqueString(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueString", Flag); -} -void USetReducerFlags::DeleteUniqueU128(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU128", Flag); -} -void USetReducerFlags::DeleteUniqueU16(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU16", Flag); -} -void USetReducerFlags::DeleteUniqueU256(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU256", Flag); -} -void USetReducerFlags::DeleteUniqueU32(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU32", Flag); -} -void USetReducerFlags::DeleteUniqueU64(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU64", Flag); -} -void USetReducerFlags::DeleteUniqueU8(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueU8", Flag); -} -void USetReducerFlags::DeleteUniqueUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("DeleteUniqueUuid", Flag); -} -void USetReducerFlags::InsertCallTimestamp(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallTimestamp", Flag); -} -void USetReducerFlags::InsertCallUuidV4(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallUuidV4", Flag); -} -void USetReducerFlags::InsertCallUuidV7(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallUuidV7", Flag); -} -void USetReducerFlags::InsertCallerOneConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerOneConnectionId", Flag); -} -void USetReducerFlags::InsertCallerOneIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerOneIdentity", Flag); -} -void USetReducerFlags::InsertCallerPkConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerPkConnectionId", Flag); -} -void USetReducerFlags::InsertCallerPkIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerPkIdentity", Flag); -} -void USetReducerFlags::InsertCallerUniqueConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerUniqueConnectionId", Flag); -} -void USetReducerFlags::InsertCallerUniqueIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerUniqueIdentity", Flag); -} -void USetReducerFlags::InsertCallerVecConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerVecConnectionId", Flag); -} -void USetReducerFlags::InsertCallerVecIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertCallerVecIdentity", Flag); -} -void USetReducerFlags::InsertIntoBtreeU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertIntoBtreeU32", Flag); -} -void USetReducerFlags::InsertIntoIndexedSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertIntoIndexedSimpleEnum", Flag); -} -void USetReducerFlags::InsertIntoPkBtreeU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertIntoPkBtreeU32", Flag); -} -void USetReducerFlags::InsertLargeTable(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertLargeTable", Flag); -} -void USetReducerFlags::InsertOneBool(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneBool", Flag); -} -void USetReducerFlags::InsertOneByteStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneByteStruct", Flag); -} -void USetReducerFlags::InsertOneConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneConnectionId", Flag); -} -void USetReducerFlags::InsertOneEnumWithPayload(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneEnumWithPayload", Flag); -} -void USetReducerFlags::InsertOneEveryPrimitiveStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneEveryPrimitiveStruct", Flag); -} -void USetReducerFlags::InsertOneEveryVecStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneEveryVecStruct", Flag); -} -void USetReducerFlags::InsertOneF32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneF32", Flag); -} -void USetReducerFlags::InsertOneF64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneF64", Flag); -} -void USetReducerFlags::InsertOneI128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI128", Flag); -} -void USetReducerFlags::InsertOneI16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI16", Flag); -} -void USetReducerFlags::InsertOneI256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI256", Flag); -} -void USetReducerFlags::InsertOneI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI32", Flag); -} -void USetReducerFlags::InsertOneI64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI64", Flag); -} -void USetReducerFlags::InsertOneI8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneI8", Flag); -} -void USetReducerFlags::InsertOneIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneIdentity", Flag); -} -void USetReducerFlags::InsertOneSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneSimpleEnum", Flag); -} -void USetReducerFlags::InsertOneString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneString", Flag); -} -void USetReducerFlags::InsertOneTimestamp(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneTimestamp", Flag); -} -void USetReducerFlags::InsertOneU128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU128", Flag); -} -void USetReducerFlags::InsertOneU16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU16", Flag); -} -void USetReducerFlags::InsertOneU256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU256", Flag); -} -void USetReducerFlags::InsertOneU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU32", Flag); -} -void USetReducerFlags::InsertOneU64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU64", Flag); -} -void USetReducerFlags::InsertOneU8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneU8", Flag); -} -void USetReducerFlags::InsertOneUnitStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneUnitStruct", Flag); -} -void USetReducerFlags::InsertOneUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOneUuid", Flag); -} -void USetReducerFlags::InsertOptionEveryPrimitiveStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionEveryPrimitiveStruct", Flag); -} -void USetReducerFlags::InsertOptionI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionI32", Flag); -} -void USetReducerFlags::InsertOptionIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionIdentity", Flag); -} -void USetReducerFlags::InsertOptionSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionSimpleEnum", Flag); -} -void USetReducerFlags::InsertOptionString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionString", Flag); -} -void USetReducerFlags::InsertOptionUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionUuid", Flag); -} -void USetReducerFlags::InsertOptionVecOptionI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertOptionVecOptionI32", Flag); -} -void USetReducerFlags::InsertPkBool(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkBool", Flag); -} -void USetReducerFlags::InsertPkConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkConnectionId", Flag); -} -void USetReducerFlags::InsertPkI128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI128", Flag); -} -void USetReducerFlags::InsertPkI16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI16", Flag); -} -void USetReducerFlags::InsertPkI256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI256", Flag); -} -void USetReducerFlags::InsertPkI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI32", Flag); -} -void USetReducerFlags::InsertPkI64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI64", Flag); -} -void USetReducerFlags::InsertPkI8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkI8", Flag); -} -void USetReducerFlags::InsertPkIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkIdentity", Flag); -} -void USetReducerFlags::InsertPkSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkSimpleEnum", Flag); -} -void USetReducerFlags::InsertPkString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkString", Flag); -} -void USetReducerFlags::InsertPkU128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU128", Flag); -} -void USetReducerFlags::InsertPkU16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU16", Flag); -} -void USetReducerFlags::InsertPkU256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU256", Flag); -} -void USetReducerFlags::InsertPkU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU32", Flag); -} -void USetReducerFlags::InsertPkU32Two(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU32Two", Flag); -} -void USetReducerFlags::InsertPkU64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU64", Flag); -} -void USetReducerFlags::InsertPkU8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkU8", Flag); -} -void USetReducerFlags::InsertPkUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPkUuid", Flag); -} -void USetReducerFlags::InsertPrimitivesAsStrings(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertPrimitivesAsStrings", Flag); -} -void USetReducerFlags::InsertResultEveryPrimitiveStructString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultEveryPrimitiveStructString", Flag); -} -void USetReducerFlags::InsertResultI32String(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultI32String", Flag); -} -void USetReducerFlags::InsertResultIdentityString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultIdentityString", Flag); -} -void USetReducerFlags::InsertResultSimpleEnumI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultSimpleEnumI32", Flag); -} -void USetReducerFlags::InsertResultStringI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultStringI32", Flag); -} -void USetReducerFlags::InsertResultVecI32String(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertResultVecI32String", Flag); -} -void USetReducerFlags::InsertTableHoldsTable(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertTableHoldsTable", Flag); -} -void USetReducerFlags::InsertUniqueBool(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueBool", Flag); -} -void USetReducerFlags::InsertUniqueConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueConnectionId", Flag); -} -void USetReducerFlags::InsertUniqueI128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI128", Flag); -} -void USetReducerFlags::InsertUniqueI16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI16", Flag); -} -void USetReducerFlags::InsertUniqueI256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI256", Flag); -} -void USetReducerFlags::InsertUniqueI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI32", Flag); -} -void USetReducerFlags::InsertUniqueI64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI64", Flag); -} -void USetReducerFlags::InsertUniqueI8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueI8", Flag); -} -void USetReducerFlags::InsertUniqueIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueIdentity", Flag); -} -void USetReducerFlags::InsertUniqueString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueString", Flag); -} -void USetReducerFlags::InsertUniqueU128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU128", Flag); -} -void USetReducerFlags::InsertUniqueU16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU16", Flag); -} -void USetReducerFlags::InsertUniqueU256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU256", Flag); -} -void USetReducerFlags::InsertUniqueU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU32", Flag); -} -void USetReducerFlags::InsertUniqueU32UpdatePkU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU32UpdatePkU32", Flag); -} -void USetReducerFlags::InsertUniqueU64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU64", Flag); -} -void USetReducerFlags::InsertUniqueU8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueU8", Flag); -} -void USetReducerFlags::InsertUniqueUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUniqueUuid", Flag); -} -void USetReducerFlags::InsertUser(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertUser", Flag); -} -void USetReducerFlags::InsertVecBool(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecBool", Flag); -} -void USetReducerFlags::InsertVecByteStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecByteStruct", Flag); -} -void USetReducerFlags::InsertVecConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecConnectionId", Flag); -} -void USetReducerFlags::InsertVecEnumWithPayload(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecEnumWithPayload", Flag); -} -void USetReducerFlags::InsertVecEveryPrimitiveStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecEveryPrimitiveStruct", Flag); -} -void USetReducerFlags::InsertVecEveryVecStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecEveryVecStruct", Flag); -} -void USetReducerFlags::InsertVecF32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecF32", Flag); -} -void USetReducerFlags::InsertVecF64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecF64", Flag); -} -void USetReducerFlags::InsertVecI128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI128", Flag); -} -void USetReducerFlags::InsertVecI16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI16", Flag); -} -void USetReducerFlags::InsertVecI256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI256", Flag); -} -void USetReducerFlags::InsertVecI32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI32", Flag); -} -void USetReducerFlags::InsertVecI64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI64", Flag); -} -void USetReducerFlags::InsertVecI8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecI8", Flag); -} -void USetReducerFlags::InsertVecIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecIdentity", Flag); -} -void USetReducerFlags::InsertVecSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecSimpleEnum", Flag); -} -void USetReducerFlags::InsertVecString(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecString", Flag); -} -void USetReducerFlags::InsertVecTimestamp(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecTimestamp", Flag); -} -void USetReducerFlags::InsertVecU128(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU128", Flag); -} -void USetReducerFlags::InsertVecU16(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU16", Flag); -} -void USetReducerFlags::InsertVecU256(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU256", Flag); -} -void USetReducerFlags::InsertVecU32(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU32", Flag); -} -void USetReducerFlags::InsertVecU64(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU64", Flag); -} -void USetReducerFlags::InsertVecU8(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecU8", Flag); -} -void USetReducerFlags::InsertVecUnitStruct(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecUnitStruct", Flag); -} -void USetReducerFlags::InsertVecUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("InsertVecUuid", Flag); -} -void USetReducerFlags::NoOpSucceeds(ECallReducerFlags Flag) -{ - FlagMap.Add("NoOpSucceeds", Flag); -} -void USetReducerFlags::SortedUuidsInsert(ECallReducerFlags Flag) -{ - FlagMap.Add("SortedUuidsInsert", Flag); -} -void USetReducerFlags::UpdateIndexedSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateIndexedSimpleEnum", Flag); -} -void USetReducerFlags::UpdatePkBool(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkBool", Flag); -} -void USetReducerFlags::UpdatePkConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkConnectionId", Flag); -} -void USetReducerFlags::UpdatePkI128(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI128", Flag); -} -void USetReducerFlags::UpdatePkI16(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI16", Flag); -} -void USetReducerFlags::UpdatePkI256(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI256", Flag); -} -void USetReducerFlags::UpdatePkI32(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI32", Flag); -} -void USetReducerFlags::UpdatePkI64(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI64", Flag); -} -void USetReducerFlags::UpdatePkI8(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkI8", Flag); -} -void USetReducerFlags::UpdatePkIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkIdentity", Flag); -} -void USetReducerFlags::UpdatePkSimpleEnum(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkSimpleEnum", Flag); -} -void USetReducerFlags::UpdatePkString(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkString", Flag); -} -void USetReducerFlags::UpdatePkU128(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU128", Flag); -} -void USetReducerFlags::UpdatePkU16(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU16", Flag); -} -void USetReducerFlags::UpdatePkU256(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU256", Flag); -} -void USetReducerFlags::UpdatePkU32(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU32", Flag); -} -void USetReducerFlags::UpdatePkU32Two(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU32Two", Flag); -} -void USetReducerFlags::UpdatePkU64(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU64", Flag); -} -void USetReducerFlags::UpdatePkU8(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkU8", Flag); -} -void USetReducerFlags::UpdatePkUuid(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdatePkUuid", Flag); -} -void USetReducerFlags::UpdateUniqueBool(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueBool", Flag); -} -void USetReducerFlags::UpdateUniqueConnectionId(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueConnectionId", Flag); -} -void USetReducerFlags::UpdateUniqueI128(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI128", Flag); -} -void USetReducerFlags::UpdateUniqueI16(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI16", Flag); -} -void USetReducerFlags::UpdateUniqueI256(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI256", Flag); -} -void USetReducerFlags::UpdateUniqueI32(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI32", Flag); -} -void USetReducerFlags::UpdateUniqueI64(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI64", Flag); -} -void USetReducerFlags::UpdateUniqueI8(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueI8", Flag); -} -void USetReducerFlags::UpdateUniqueIdentity(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueIdentity", Flag); -} -void USetReducerFlags::UpdateUniqueString(ECallReducerFlags Flag) -{ - FlagMap.Add("UpdateUniqueString", Flag); -} -void USetReducerFlags::UpdateUniqueU128(ECallReducerFlags Flag) +FContextBase::FContextBase(UDbConnection* InConn) { - FlagMap.Add("UpdateUniqueU128", Flag); + Db = InConn->Db; + Reducers = InConn->Reducers; + Procedures = InConn->Procedures; + Conn = InConn; } -void USetReducerFlags::UpdateUniqueU16(ECallReducerFlags Flag) +bool FContextBase::IsActive() const { - FlagMap.Add("UpdateUniqueU16", Flag); + return Conn->IsActive(); } -void USetReducerFlags::UpdateUniqueU256(ECallReducerFlags Flag) +void FContextBase::Disconnect() { - FlagMap.Add("UpdateUniqueU256", Flag); + Conn->Disconnect(); } -void USetReducerFlags::UpdateUniqueU32(ECallReducerFlags Flag) +USubscriptionBuilder* FContextBase::SubscriptionBuilder() { - FlagMap.Add("UpdateUniqueU32", Flag); + return Conn->SubscriptionBuilder(); } -void USetReducerFlags::UpdateUniqueU64(ECallReducerFlags Flag) +bool FContextBase::TryGetIdentity(FSpacetimeDBIdentity& OutIdentity) const { - FlagMap.Add("UpdateUniqueU64", Flag); + return Conn->TryGetIdentity(OutIdentity); } -void USetReducerFlags::UpdateUniqueU8(ECallReducerFlags Flag) +FSpacetimeDBConnectionId FContextBase::GetConnectionId() const { - FlagMap.Add("UpdateUniqueU8", Flag); + return Conn->GetConnectionId(); } -void USetReducerFlags::UpdateUniqueUuid(ECallReducerFlags Flag) + +void URemoteTables::Initialize() { - FlagMap.Add("UpdateUniqueUuid", Flag); + + /** Creating tables */ + BtreeU32 = NewObject(this); + IndexedSimpleEnum = NewObject(this); + LargeTable = NewObject(this); + OneBool = NewObject(this); + OneByteStruct = NewObject(this); + OneConnectionId = NewObject(this); + OneEnumWithPayload = NewObject(this); + OneEveryPrimitiveStruct = NewObject(this); + OneEveryVecStruct = NewObject(this); + OneF32 = NewObject(this); + OneF64 = NewObject(this); + OneI128 = NewObject(this); + OneI16 = NewObject(this); + OneI256 = NewObject(this); + OneI32 = NewObject(this); + OneI64 = NewObject(this); + OneI8 = NewObject(this); + OneIdentity = NewObject(this); + OneSimpleEnum = NewObject(this); + OneString = NewObject(this); + OneTimestamp = NewObject(this); + OneU128 = NewObject(this); + OneU16 = NewObject(this); + OneU256 = NewObject(this); + OneU32 = NewObject(this); + OneU64 = NewObject(this); + OneU8 = NewObject(this); + OneUnitStruct = NewObject(this); + OneUuid = NewObject(this); + OptionEveryPrimitiveStruct = NewObject(this); + OptionI32 = NewObject(this); + OptionIdentity = NewObject(this); + OptionSimpleEnum = NewObject(this); + OptionString = NewObject(this); + OptionUuid = NewObject(this); + OptionVecOptionI32 = NewObject(this); + PkBool = NewObject(this); + PkConnectionId = NewObject(this); + PkI128 = NewObject(this); + PkI16 = NewObject(this); + PkI256 = NewObject(this); + PkI32 = NewObject(this); + PkI64 = NewObject(this); + PkI8 = NewObject(this); + PkIdentity = NewObject(this); + PkSimpleEnum = NewObject(this); + PkString = NewObject(this); + PkU128 = NewObject(this); + PkU16 = NewObject(this); + PkU256 = NewObject(this); + PkU32 = NewObject(this); + PkU32Two = NewObject(this); + PkU64 = NewObject(this); + PkU8 = NewObject(this); + PkUuid = NewObject(this); + ResultEveryPrimitiveStructString = NewObject(this); + ResultI32String = NewObject(this); + ResultIdentityString = NewObject(this); + ResultSimpleEnumI32 = NewObject(this); + ResultStringI32 = NewObject(this); + ResultVecI32String = NewObject(this); + ScheduledTable = NewObject(this); + TableHoldsTable = NewObject(this); + UniqueBool = NewObject(this); + UniqueConnectionId = NewObject(this); + UniqueI128 = NewObject(this); + UniqueI16 = NewObject(this); + UniqueI256 = NewObject(this); + UniqueI32 = NewObject(this); + UniqueI64 = NewObject(this); + UniqueI8 = NewObject(this); + UniqueIdentity = NewObject(this); + UniqueString = NewObject(this); + UniqueU128 = NewObject(this); + UniqueU16 = NewObject(this); + UniqueU256 = NewObject(this); + UniqueU32 = NewObject(this); + UniqueU64 = NewObject(this); + UniqueU8 = NewObject(this); + UniqueUuid = NewObject(this); + Users = NewObject(this); + VecBool = NewObject(this); + VecByteStruct = NewObject(this); + VecConnectionId = NewObject(this); + VecEnumWithPayload = NewObject(this); + VecEveryPrimitiveStruct = NewObject(this); + VecEveryVecStruct = NewObject(this); + VecF32 = NewObject(this); + VecF64 = NewObject(this); + VecI128 = NewObject(this); + VecI16 = NewObject(this); + VecI256 = NewObject(this); + VecI32 = NewObject(this); + VecI64 = NewObject(this); + VecI8 = NewObject(this); + VecIdentity = NewObject(this); + VecSimpleEnum = NewObject(this); + VecString = NewObject(this); + VecTimestamp = NewObject(this); + VecU128 = NewObject(this); + VecU16 = NewObject(this); + VecU256 = NewObject(this); + VecU32 = NewObject(this); + VecU64 = NewObject(this); + VecU8 = NewObject(this); + VecUnitStruct = NewObject(this); + VecUuid = NewObject(this); + /**/ + + /** Initialization */ + BtreeU32->PostInitialize(); + IndexedSimpleEnum->PostInitialize(); + LargeTable->PostInitialize(); + OneBool->PostInitialize(); + OneByteStruct->PostInitialize(); + OneConnectionId->PostInitialize(); + OneEnumWithPayload->PostInitialize(); + OneEveryPrimitiveStruct->PostInitialize(); + OneEveryVecStruct->PostInitialize(); + OneF32->PostInitialize(); + OneF64->PostInitialize(); + OneI128->PostInitialize(); + OneI16->PostInitialize(); + OneI256->PostInitialize(); + OneI32->PostInitialize(); + OneI64->PostInitialize(); + OneI8->PostInitialize(); + OneIdentity->PostInitialize(); + OneSimpleEnum->PostInitialize(); + OneString->PostInitialize(); + OneTimestamp->PostInitialize(); + OneU128->PostInitialize(); + OneU16->PostInitialize(); + OneU256->PostInitialize(); + OneU32->PostInitialize(); + OneU64->PostInitialize(); + OneU8->PostInitialize(); + OneUnitStruct->PostInitialize(); + OneUuid->PostInitialize(); + OptionEveryPrimitiveStruct->PostInitialize(); + OptionI32->PostInitialize(); + OptionIdentity->PostInitialize(); + OptionSimpleEnum->PostInitialize(); + OptionString->PostInitialize(); + OptionUuid->PostInitialize(); + OptionVecOptionI32->PostInitialize(); + PkBool->PostInitialize(); + PkConnectionId->PostInitialize(); + PkI128->PostInitialize(); + PkI16->PostInitialize(); + PkI256->PostInitialize(); + PkI32->PostInitialize(); + PkI64->PostInitialize(); + PkI8->PostInitialize(); + PkIdentity->PostInitialize(); + PkSimpleEnum->PostInitialize(); + PkString->PostInitialize(); + PkU128->PostInitialize(); + PkU16->PostInitialize(); + PkU256->PostInitialize(); + PkU32->PostInitialize(); + PkU32Two->PostInitialize(); + PkU64->PostInitialize(); + PkU8->PostInitialize(); + PkUuid->PostInitialize(); + ResultEveryPrimitiveStructString->PostInitialize(); + ResultI32String->PostInitialize(); + ResultIdentityString->PostInitialize(); + ResultSimpleEnumI32->PostInitialize(); + ResultStringI32->PostInitialize(); + ResultVecI32String->PostInitialize(); + ScheduledTable->PostInitialize(); + TableHoldsTable->PostInitialize(); + UniqueBool->PostInitialize(); + UniqueConnectionId->PostInitialize(); + UniqueI128->PostInitialize(); + UniqueI16->PostInitialize(); + UniqueI256->PostInitialize(); + UniqueI32->PostInitialize(); + UniqueI64->PostInitialize(); + UniqueI8->PostInitialize(); + UniqueIdentity->PostInitialize(); + UniqueString->PostInitialize(); + UniqueU128->PostInitialize(); + UniqueU16->PostInitialize(); + UniqueU256->PostInitialize(); + UniqueU32->PostInitialize(); + UniqueU64->PostInitialize(); + UniqueU8->PostInitialize(); + UniqueUuid->PostInitialize(); + Users->PostInitialize(); + VecBool->PostInitialize(); + VecByteStruct->PostInitialize(); + VecConnectionId->PostInitialize(); + VecEnumWithPayload->PostInitialize(); + VecEveryPrimitiveStruct->PostInitialize(); + VecEveryVecStruct->PostInitialize(); + VecF32->PostInitialize(); + VecF64->PostInitialize(); + VecI128->PostInitialize(); + VecI16->PostInitialize(); + VecI256->PostInitialize(); + VecI32->PostInitialize(); + VecI64->PostInitialize(); + VecI8->PostInitialize(); + VecIdentity->PostInitialize(); + VecSimpleEnum->PostInitialize(); + VecString->PostInitialize(); + VecTimestamp->PostInitialize(); + VecU128->PostInitialize(); + VecU16->PostInitialize(); + VecU256->PostInitialize(); + VecU32->PostInitialize(); + VecU64->PostInitialize(); + VecU8->PostInitialize(); + VecUnitStruct->PostInitialize(); + VecUuid->PostInitialize(); + /**/ } void URemoteReducers::DeleteFromBtreeU32(const TArray& Rows) @@ -2474,7 +492,9 @@ void URemoteReducers::DeleteFromBtreeU32(const TArray& Rows) return; } - Conn->CallReducerTyped(TEXT("delete_from_btree_u32"), FDeleteFromBtreeU32Args(Rows), SetCallReducerFlags); + FDeleteFromBtreeU32Args ReducerArgs(Rows); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_from_btree_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteFromBtreeU32(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteFromBtreeU32(const FReducerEventContext& Context, const UDeleteFromBtreeU32Reducer* Args) @@ -2518,7 +538,9 @@ void URemoteReducers::DeleteLargeTable(const uint8 A, const uint16 B, const uint return; } - Conn->CallReducerTyped(TEXT("delete_large_table"), FDeleteLargeTableArgs(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V), SetCallReducerFlags); + FDeleteLargeTableArgs ReducerArgs(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_large_table"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteLargeTable(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteLargeTable(const FReducerEventContext& Context, const UDeleteLargeTableReducer* Args) @@ -2585,7 +607,9 @@ void URemoteReducers::DeletePkBool(const bool B) return; } - Conn->CallReducerTyped(TEXT("delete_pk_bool"), FDeletePkBoolArgs(B), SetCallReducerFlags); + FDeletePkBoolArgs ReducerArgs(B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkBool(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkBool(const FReducerEventContext& Context, const UDeletePkBoolReducer* Args) @@ -2629,7 +653,9 @@ void URemoteReducers::DeletePkConnectionId(const FSpacetimeDBConnectionId& A) return; } - Conn->CallReducerTyped(TEXT("delete_pk_connection_id"), FDeletePkConnectionIdArgs(A), SetCallReducerFlags); + FDeletePkConnectionIdArgs ReducerArgs(A); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkConnectionId(const FReducerEventContext& Context, const UDeletePkConnectionIdReducer* Args) @@ -2673,7 +699,9 @@ void URemoteReducers::DeletePkI128(const FSpacetimeDBInt128& N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i128"), FDeletePkI128Args(N), SetCallReducerFlags); + FDeletePkI128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI128(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI128(const FReducerEventContext& Context, const UDeletePkI128Reducer* Args) @@ -2717,7 +745,9 @@ void URemoteReducers::DeletePkI16(const int16 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i16"), FDeletePkI16Args(N), SetCallReducerFlags); + FDeletePkI16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI16(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI16(const FReducerEventContext& Context, const UDeletePkI16Reducer* Args) @@ -2761,7 +791,9 @@ void URemoteReducers::DeletePkI256(const FSpacetimeDBInt256& N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i256"), FDeletePkI256Args(N), SetCallReducerFlags); + FDeletePkI256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI256(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI256(const FReducerEventContext& Context, const UDeletePkI256Reducer* Args) @@ -2805,7 +837,9 @@ void URemoteReducers::DeletePkI32(const int32 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i32"), FDeletePkI32Args(N), SetCallReducerFlags); + FDeletePkI32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI32(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI32(const FReducerEventContext& Context, const UDeletePkI32Reducer* Args) @@ -2849,7 +883,9 @@ void URemoteReducers::DeletePkI64(const int64 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i64"), FDeletePkI64Args(N), SetCallReducerFlags); + FDeletePkI64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI64(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI64(const FReducerEventContext& Context, const UDeletePkI64Reducer* Args) @@ -2893,7 +929,9 @@ void URemoteReducers::DeletePkI8(const int8 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_i8"), FDeletePkI8Args(N), SetCallReducerFlags); + FDeletePkI8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkI8(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkI8(const FReducerEventContext& Context, const UDeletePkI8Reducer* Args) @@ -2937,7 +975,9 @@ void URemoteReducers::DeletePkIdentity(const FSpacetimeDBIdentity& I) return; } - Conn->CallReducerTyped(TEXT("delete_pk_identity"), FDeletePkIdentityArgs(I), SetCallReducerFlags); + FDeletePkIdentityArgs ReducerArgs(I); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkIdentity(const FReducerEventContext& Context, const UDeletePkIdentityReducer* Args) @@ -2981,7 +1021,9 @@ void URemoteReducers::DeletePkString(const FString& S) return; } - Conn->CallReducerTyped(TEXT("delete_pk_string"), FDeletePkStringArgs(S), SetCallReducerFlags); + FDeletePkStringArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkString(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkString(const FReducerEventContext& Context, const UDeletePkStringReducer* Args) @@ -3025,7 +1067,9 @@ void URemoteReducers::DeletePkU128(const FSpacetimeDBUInt128& N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u128"), FDeletePkU128Args(N), SetCallReducerFlags); + FDeletePkU128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU128(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU128(const FReducerEventContext& Context, const UDeletePkU128Reducer* Args) @@ -3069,7 +1113,9 @@ void URemoteReducers::DeletePkU16(const uint16 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u16"), FDeletePkU16Args(N), SetCallReducerFlags); + FDeletePkU16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU16(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU16(const FReducerEventContext& Context, const UDeletePkU16Reducer* Args) @@ -3113,7 +1159,9 @@ void URemoteReducers::DeletePkU256(const FSpacetimeDBUInt256& N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u256"), FDeletePkU256Args(N), SetCallReducerFlags); + FDeletePkU256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU256(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU256(const FReducerEventContext& Context, const UDeletePkU256Reducer* Args) @@ -3157,7 +1205,9 @@ void URemoteReducers::DeletePkU32(const uint32 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u32"), FDeletePkU32Args(N), SetCallReducerFlags); + FDeletePkU32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU32(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU32(const FReducerEventContext& Context, const UDeletePkU32Reducer* Args) @@ -3201,7 +1251,9 @@ void URemoteReducers::DeletePkU32InsertPkU32Two(const uint32 N, const int32 Data return; } - Conn->CallReducerTyped(TEXT("delete_pk_u32_insert_pk_u32_two"), FDeletePkU32InsertPkU32TwoArgs(N, Data), SetCallReducerFlags); + FDeletePkU32InsertPkU32TwoArgs ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_32_insert_pk_u_32_two"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU32InsertPkU32Two(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU32InsertPkU32Two(const FReducerEventContext& Context, const UDeletePkU32InsertPkU32TwoReducer* Args) @@ -3245,7 +1297,9 @@ void URemoteReducers::DeletePkU32Two(const uint32 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u32_two"), FDeletePkU32TwoArgs(N), SetCallReducerFlags); + FDeletePkU32TwoArgs ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_32_two"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU32Two(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU32Two(const FReducerEventContext& Context, const UDeletePkU32TwoReducer* Args) @@ -3289,7 +1343,9 @@ void URemoteReducers::DeletePkU64(const uint64 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u64"), FDeletePkU64Args(N), SetCallReducerFlags); + FDeletePkU64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU64(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU64(const FReducerEventContext& Context, const UDeletePkU64Reducer* Args) @@ -3333,7 +1389,9 @@ void URemoteReducers::DeletePkU8(const uint8 N) return; } - Conn->CallReducerTyped(TEXT("delete_pk_u8"), FDeletePkU8Args(N), SetCallReducerFlags); + FDeletePkU8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkU8(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkU8(const FReducerEventContext& Context, const UDeletePkU8Reducer* Args) @@ -3377,7 +1435,9 @@ void URemoteReducers::DeletePkUuid(const FSpacetimeDBUuid& U) return; } - Conn->CallReducerTyped(TEXT("delete_pk_uuid"), FDeletePkUuidArgs(U), SetCallReducerFlags); + FDeletePkUuidArgs ReducerArgs(U); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_pk_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeletePkUuid(ReducerArgs)); } } bool URemoteReducers::InvokeDeletePkUuid(const FReducerEventContext& Context, const UDeletePkUuidReducer* Args) @@ -3421,7 +1481,9 @@ void URemoteReducers::DeleteUniqueBool(const bool B) return; } - Conn->CallReducerTyped(TEXT("delete_unique_bool"), FDeleteUniqueBoolArgs(B), SetCallReducerFlags); + FDeleteUniqueBoolArgs ReducerArgs(B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueBool(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueBool(const FReducerEventContext& Context, const UDeleteUniqueBoolReducer* Args) @@ -3465,7 +1527,9 @@ void URemoteReducers::DeleteUniqueConnectionId(const FSpacetimeDBConnectionId& A return; } - Conn->CallReducerTyped(TEXT("delete_unique_connection_id"), FDeleteUniqueConnectionIdArgs(A), SetCallReducerFlags); + FDeleteUniqueConnectionIdArgs ReducerArgs(A); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueConnectionId(const FReducerEventContext& Context, const UDeleteUniqueConnectionIdReducer* Args) @@ -3509,7 +1573,9 @@ void URemoteReducers::DeleteUniqueI128(const FSpacetimeDBInt128& N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i128"), FDeleteUniqueI128Args(N), SetCallReducerFlags); + FDeleteUniqueI128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI128(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI128(const FReducerEventContext& Context, const UDeleteUniqueI128Reducer* Args) @@ -3553,7 +1619,9 @@ void URemoteReducers::DeleteUniqueI16(const int16 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i16"), FDeleteUniqueI16Args(N), SetCallReducerFlags); + FDeleteUniqueI16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI16(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI16(const FReducerEventContext& Context, const UDeleteUniqueI16Reducer* Args) @@ -3597,7 +1665,9 @@ void URemoteReducers::DeleteUniqueI256(const FSpacetimeDBInt256& N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i256"), FDeleteUniqueI256Args(N), SetCallReducerFlags); + FDeleteUniqueI256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI256(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI256(const FReducerEventContext& Context, const UDeleteUniqueI256Reducer* Args) @@ -3641,7 +1711,9 @@ void URemoteReducers::DeleteUniqueI32(const int32 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i32"), FDeleteUniqueI32Args(N), SetCallReducerFlags); + FDeleteUniqueI32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI32(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI32(const FReducerEventContext& Context, const UDeleteUniqueI32Reducer* Args) @@ -3685,7 +1757,9 @@ void URemoteReducers::DeleteUniqueI64(const int64 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i64"), FDeleteUniqueI64Args(N), SetCallReducerFlags); + FDeleteUniqueI64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI64(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI64(const FReducerEventContext& Context, const UDeleteUniqueI64Reducer* Args) @@ -3729,7 +1803,9 @@ void URemoteReducers::DeleteUniqueI8(const int8 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_i8"), FDeleteUniqueI8Args(N), SetCallReducerFlags); + FDeleteUniqueI8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueI8(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueI8(const FReducerEventContext& Context, const UDeleteUniqueI8Reducer* Args) @@ -3773,7 +1849,9 @@ void URemoteReducers::DeleteUniqueIdentity(const FSpacetimeDBIdentity& I) return; } - Conn->CallReducerTyped(TEXT("delete_unique_identity"), FDeleteUniqueIdentityArgs(I), SetCallReducerFlags); + FDeleteUniqueIdentityArgs ReducerArgs(I); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueIdentity(const FReducerEventContext& Context, const UDeleteUniqueIdentityReducer* Args) @@ -3817,7 +1895,9 @@ void URemoteReducers::DeleteUniqueString(const FString& S) return; } - Conn->CallReducerTyped(TEXT("delete_unique_string"), FDeleteUniqueStringArgs(S), SetCallReducerFlags); + FDeleteUniqueStringArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueString(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueString(const FReducerEventContext& Context, const UDeleteUniqueStringReducer* Args) @@ -3861,7 +1941,9 @@ void URemoteReducers::DeleteUniqueU128(const FSpacetimeDBUInt128& N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u128"), FDeleteUniqueU128Args(N), SetCallReducerFlags); + FDeleteUniqueU128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU128(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU128(const FReducerEventContext& Context, const UDeleteUniqueU128Reducer* Args) @@ -3905,7 +1987,9 @@ void URemoteReducers::DeleteUniqueU16(const uint16 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u16"), FDeleteUniqueU16Args(N), SetCallReducerFlags); + FDeleteUniqueU16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU16(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU16(const FReducerEventContext& Context, const UDeleteUniqueU16Reducer* Args) @@ -3949,7 +2033,9 @@ void URemoteReducers::DeleteUniqueU256(const FSpacetimeDBUInt256& N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u256"), FDeleteUniqueU256Args(N), SetCallReducerFlags); + FDeleteUniqueU256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU256(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU256(const FReducerEventContext& Context, const UDeleteUniqueU256Reducer* Args) @@ -3993,7 +2079,9 @@ void URemoteReducers::DeleteUniqueU32(const uint32 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u32"), FDeleteUniqueU32Args(N), SetCallReducerFlags); + FDeleteUniqueU32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU32(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU32(const FReducerEventContext& Context, const UDeleteUniqueU32Reducer* Args) @@ -4037,7 +2125,9 @@ void URemoteReducers::DeleteUniqueU64(const uint64 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u64"), FDeleteUniqueU64Args(N), SetCallReducerFlags); + FDeleteUniqueU64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU64(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU64(const FReducerEventContext& Context, const UDeleteUniqueU64Reducer* Args) @@ -4081,7 +2171,9 @@ void URemoteReducers::DeleteUniqueU8(const uint8 N) return; } - Conn->CallReducerTyped(TEXT("delete_unique_u8"), FDeleteUniqueU8Args(N), SetCallReducerFlags); + FDeleteUniqueU8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueU8(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueU8(const FReducerEventContext& Context, const UDeleteUniqueU8Reducer* Args) @@ -4125,7 +2217,9 @@ void URemoteReducers::DeleteUniqueUuid(const FSpacetimeDBUuid& U) return; } - Conn->CallReducerTyped(TEXT("delete_unique_uuid"), FDeleteUniqueUuidArgs(U), SetCallReducerFlags); + FDeleteUniqueUuidArgs ReducerArgs(U); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("delete_unique_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::DeleteUniqueUuid(ReducerArgs)); } } bool URemoteReducers::InvokeDeleteUniqueUuid(const FReducerEventContext& Context, const UDeleteUniqueUuidReducer* Args) @@ -4169,7 +2263,9 @@ void URemoteReducers::InsertCallTimestamp() return; } - Conn->CallReducerTyped(TEXT("insert_call_timestamp"), FInsertCallTimestampArgs(), SetCallReducerFlags); + FInsertCallTimestampArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_call_timestamp"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallTimestamp(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallTimestamp(const FReducerEventContext& Context, const UInsertCallTimestampReducer* Args) @@ -4213,7 +2309,9 @@ void URemoteReducers::InsertCallUuidV4() return; } - Conn->CallReducerTyped(TEXT("insert_call_uuid_v4"), FInsertCallUuidV4Args(), SetCallReducerFlags); + FInsertCallUuidV4Args ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_call_uuid_v_4"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallUuidV4(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallUuidV4(const FReducerEventContext& Context, const UInsertCallUuidV4Reducer* Args) @@ -4257,7 +2355,9 @@ void URemoteReducers::InsertCallUuidV7() return; } - Conn->CallReducerTyped(TEXT("insert_call_uuid_v7"), FInsertCallUuidV7Args(), SetCallReducerFlags); + FInsertCallUuidV7Args ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_call_uuid_v_7"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallUuidV7(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallUuidV7(const FReducerEventContext& Context, const UInsertCallUuidV7Reducer* Args) @@ -4301,7 +2401,9 @@ void URemoteReducers::InsertCallerOneConnectionId() return; } - Conn->CallReducerTyped(TEXT("insert_caller_one_connection_id"), FInsertCallerOneConnectionIdArgs(), SetCallReducerFlags); + FInsertCallerOneConnectionIdArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_one_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerOneConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerOneConnectionId(const FReducerEventContext& Context, const UInsertCallerOneConnectionIdReducer* Args) @@ -4345,7 +2447,9 @@ void URemoteReducers::InsertCallerOneIdentity() return; } - Conn->CallReducerTyped(TEXT("insert_caller_one_identity"), FInsertCallerOneIdentityArgs(), SetCallReducerFlags); + FInsertCallerOneIdentityArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_one_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerOneIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerOneIdentity(const FReducerEventContext& Context, const UInsertCallerOneIdentityReducer* Args) @@ -4389,7 +2493,9 @@ void URemoteReducers::InsertCallerPkConnectionId(const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_caller_pk_connection_id"), FInsertCallerPkConnectionIdArgs(Data), SetCallReducerFlags); + FInsertCallerPkConnectionIdArgs ReducerArgs(Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_pk_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerPkConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerPkConnectionId(const FReducerEventContext& Context, const UInsertCallerPkConnectionIdReducer* Args) @@ -4433,7 +2539,9 @@ void URemoteReducers::InsertCallerPkIdentity(const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_caller_pk_identity"), FInsertCallerPkIdentityArgs(Data), SetCallReducerFlags); + FInsertCallerPkIdentityArgs ReducerArgs(Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_pk_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerPkIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerPkIdentity(const FReducerEventContext& Context, const UInsertCallerPkIdentityReducer* Args) @@ -4477,7 +2585,9 @@ void URemoteReducers::InsertCallerUniqueConnectionId(const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_caller_unique_connection_id"), FInsertCallerUniqueConnectionIdArgs(Data), SetCallReducerFlags); + FInsertCallerUniqueConnectionIdArgs ReducerArgs(Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_unique_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerUniqueConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerUniqueConnectionId(const FReducerEventContext& Context, const UInsertCallerUniqueConnectionIdReducer* Args) @@ -4521,7 +2631,9 @@ void URemoteReducers::InsertCallerUniqueIdentity(const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_caller_unique_identity"), FInsertCallerUniqueIdentityArgs(Data), SetCallReducerFlags); + FInsertCallerUniqueIdentityArgs ReducerArgs(Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_unique_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerUniqueIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerUniqueIdentity(const FReducerEventContext& Context, const UInsertCallerUniqueIdentityReducer* Args) @@ -4565,7 +2677,9 @@ void URemoteReducers::InsertCallerVecConnectionId() return; } - Conn->CallReducerTyped(TEXT("insert_caller_vec_connection_id"), FInsertCallerVecConnectionIdArgs(), SetCallReducerFlags); + FInsertCallerVecConnectionIdArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_vec_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerVecConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerVecConnectionId(const FReducerEventContext& Context, const UInsertCallerVecConnectionIdReducer* Args) @@ -4609,7 +2723,9 @@ void URemoteReducers::InsertCallerVecIdentity() return; } - Conn->CallReducerTyped(TEXT("insert_caller_vec_identity"), FInsertCallerVecIdentityArgs(), SetCallReducerFlags); + FInsertCallerVecIdentityArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_caller_vec_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertCallerVecIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertCallerVecIdentity(const FReducerEventContext& Context, const UInsertCallerVecIdentityReducer* Args) @@ -4653,7 +2769,9 @@ void URemoteReducers::InsertIntoBtreeU32(const TArray& Rows) return; } - Conn->CallReducerTyped(TEXT("insert_into_btree_u32"), FInsertIntoBtreeU32Args(Rows), SetCallReducerFlags); + FInsertIntoBtreeU32Args ReducerArgs(Rows); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_into_btree_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertIntoBtreeU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertIntoBtreeU32(const FReducerEventContext& Context, const UInsertIntoBtreeU32Reducer* Args) @@ -4697,7 +2815,9 @@ void URemoteReducers::InsertIntoIndexedSimpleEnum(const ESimpleEnumType& N) return; } - Conn->CallReducerTyped(TEXT("insert_into_indexed_simple_enum"), FInsertIntoIndexedSimpleEnumArgs(N), SetCallReducerFlags); + FInsertIntoIndexedSimpleEnumArgs ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_into_indexed_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertIntoIndexedSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeInsertIntoIndexedSimpleEnum(const FReducerEventContext& Context, const UInsertIntoIndexedSimpleEnumReducer* Args) @@ -4741,7 +2861,9 @@ void URemoteReducers::InsertIntoPkBtreeU32(const TArray& PkU32, cons return; } - Conn->CallReducerTyped(TEXT("insert_into_pk_btree_u32"), FInsertIntoPkBtreeU32Args(PkU32, BtU32), SetCallReducerFlags); + FInsertIntoPkBtreeU32Args ReducerArgs(PkU32, BtU32); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_into_pk_btree_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertIntoPkBtreeU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertIntoPkBtreeU32(const FReducerEventContext& Context, const UInsertIntoPkBtreeU32Reducer* Args) @@ -4785,7 +2907,9 @@ void URemoteReducers::InsertLargeTable(const uint8 A, const uint16 B, const uint return; } - Conn->CallReducerTyped(TEXT("insert_large_table"), FInsertLargeTableArgs(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V), SetCallReducerFlags); + FInsertLargeTableArgs ReducerArgs(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_large_table"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertLargeTable(ReducerArgs)); } } bool URemoteReducers::InvokeInsertLargeTable(const FReducerEventContext& Context, const UInsertLargeTableReducer* Args) @@ -4852,7 +2976,9 @@ void URemoteReducers::InsertOneBool(const bool B) return; } - Conn->CallReducerTyped(TEXT("insert_one_bool"), FInsertOneBoolArgs(B), SetCallReducerFlags); + FInsertOneBoolArgs ReducerArgs(B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneBool(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneBool(const FReducerEventContext& Context, const UInsertOneBoolReducer* Args) @@ -4896,7 +3022,9 @@ void URemoteReducers::InsertOneByteStruct(const FByteStructType& S) return; } - Conn->CallReducerTyped(TEXT("insert_one_byte_struct"), FInsertOneByteStructArgs(S), SetCallReducerFlags); + FInsertOneByteStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_byte_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneByteStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneByteStruct(const FReducerEventContext& Context, const UInsertOneByteStructReducer* Args) @@ -4940,7 +3068,9 @@ void URemoteReducers::InsertOneConnectionId(const FSpacetimeDBConnectionId& A) return; } - Conn->CallReducerTyped(TEXT("insert_one_connection_id"), FInsertOneConnectionIdArgs(A), SetCallReducerFlags); + FInsertOneConnectionIdArgs ReducerArgs(A); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneConnectionId(const FReducerEventContext& Context, const UInsertOneConnectionIdReducer* Args) @@ -4984,7 +3114,9 @@ void URemoteReducers::InsertOneEnumWithPayload(const FEnumWithPayloadType& E) return; } - Conn->CallReducerTyped(TEXT("insert_one_enum_with_payload"), FInsertOneEnumWithPayloadArgs(E), SetCallReducerFlags); + FInsertOneEnumWithPayloadArgs ReducerArgs(E); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_enum_with_payload"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneEnumWithPayload(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneEnumWithPayload(const FReducerEventContext& Context, const UInsertOneEnumWithPayloadReducer* Args) @@ -5028,7 +3160,9 @@ void URemoteReducers::InsertOneEveryPrimitiveStruct(const FEveryPrimitiveStructT return; } - Conn->CallReducerTyped(TEXT("insert_one_every_primitive_struct"), FInsertOneEveryPrimitiveStructArgs(S), SetCallReducerFlags); + FInsertOneEveryPrimitiveStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_every_primitive_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneEveryPrimitiveStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneEveryPrimitiveStruct(const FReducerEventContext& Context, const UInsertOneEveryPrimitiveStructReducer* Args) @@ -5072,7 +3206,9 @@ void URemoteReducers::InsertOneEveryVecStruct(const FEveryVecStructType& S) return; } - Conn->CallReducerTyped(TEXT("insert_one_every_vec_struct"), FInsertOneEveryVecStructArgs(S), SetCallReducerFlags); + FInsertOneEveryVecStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_every_vec_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneEveryVecStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneEveryVecStruct(const FReducerEventContext& Context, const UInsertOneEveryVecStructReducer* Args) @@ -5116,7 +3252,9 @@ void URemoteReducers::InsertOneF32(const float F) return; } - Conn->CallReducerTyped(TEXT("insert_one_f32"), FInsertOneF32Args(F), SetCallReducerFlags); + FInsertOneF32Args ReducerArgs(F); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_f_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneF32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneF32(const FReducerEventContext& Context, const UInsertOneF32Reducer* Args) @@ -5160,7 +3298,9 @@ void URemoteReducers::InsertOneF64(const double F) return; } - Conn->CallReducerTyped(TEXT("insert_one_f64"), FInsertOneF64Args(F), SetCallReducerFlags); + FInsertOneF64Args ReducerArgs(F); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_f_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneF64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneF64(const FReducerEventContext& Context, const UInsertOneF64Reducer* Args) @@ -5204,7 +3344,9 @@ void URemoteReducers::InsertOneI128(const FSpacetimeDBInt128& N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i128"), FInsertOneI128Args(N), SetCallReducerFlags); + FInsertOneI128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI128(const FReducerEventContext& Context, const UInsertOneI128Reducer* Args) @@ -5248,7 +3390,9 @@ void URemoteReducers::InsertOneI16(const int16 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i16"), FInsertOneI16Args(N), SetCallReducerFlags); + FInsertOneI16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI16(const FReducerEventContext& Context, const UInsertOneI16Reducer* Args) @@ -5292,7 +3436,9 @@ void URemoteReducers::InsertOneI256(const FSpacetimeDBInt256& N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i256"), FInsertOneI256Args(N), SetCallReducerFlags); + FInsertOneI256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI256(const FReducerEventContext& Context, const UInsertOneI256Reducer* Args) @@ -5336,7 +3482,9 @@ void URemoteReducers::InsertOneI32(const int32 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i32"), FInsertOneI32Args(N), SetCallReducerFlags); + FInsertOneI32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI32(const FReducerEventContext& Context, const UInsertOneI32Reducer* Args) @@ -5380,7 +3528,9 @@ void URemoteReducers::InsertOneI64(const int64 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i64"), FInsertOneI64Args(N), SetCallReducerFlags); + FInsertOneI64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI64(const FReducerEventContext& Context, const UInsertOneI64Reducer* Args) @@ -5424,7 +3574,9 @@ void URemoteReducers::InsertOneI8(const int8 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_i8"), FInsertOneI8Args(N), SetCallReducerFlags); + FInsertOneI8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneI8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneI8(const FReducerEventContext& Context, const UInsertOneI8Reducer* Args) @@ -5468,7 +3620,9 @@ void URemoteReducers::InsertOneIdentity(const FSpacetimeDBIdentity& I) return; } - Conn->CallReducerTyped(TEXT("insert_one_identity"), FInsertOneIdentityArgs(I), SetCallReducerFlags); + FInsertOneIdentityArgs ReducerArgs(I); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneIdentity(const FReducerEventContext& Context, const UInsertOneIdentityReducer* Args) @@ -5512,7 +3666,9 @@ void URemoteReducers::InsertOneSimpleEnum(const ESimpleEnumType& E) return; } - Conn->CallReducerTyped(TEXT("insert_one_simple_enum"), FInsertOneSimpleEnumArgs(E), SetCallReducerFlags); + FInsertOneSimpleEnumArgs ReducerArgs(E); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneSimpleEnum(const FReducerEventContext& Context, const UInsertOneSimpleEnumReducer* Args) @@ -5556,7 +3712,9 @@ void URemoteReducers::InsertOneString(const FString& S) return; } - Conn->CallReducerTyped(TEXT("insert_one_string"), FInsertOneStringArgs(S), SetCallReducerFlags); + FInsertOneStringArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneString(const FReducerEventContext& Context, const UInsertOneStringReducer* Args) @@ -5600,7 +3758,9 @@ void URemoteReducers::InsertOneTimestamp(const FSpacetimeDBTimestamp& T) return; } - Conn->CallReducerTyped(TEXT("insert_one_timestamp"), FInsertOneTimestampArgs(T), SetCallReducerFlags); + FInsertOneTimestampArgs ReducerArgs(T); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_timestamp"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneTimestamp(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneTimestamp(const FReducerEventContext& Context, const UInsertOneTimestampReducer* Args) @@ -5644,7 +3804,9 @@ void URemoteReducers::InsertOneU128(const FSpacetimeDBUInt128& N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u128"), FInsertOneU128Args(N), SetCallReducerFlags); + FInsertOneU128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU128(const FReducerEventContext& Context, const UInsertOneU128Reducer* Args) @@ -5688,7 +3850,9 @@ void URemoteReducers::InsertOneU16(const uint16 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u16"), FInsertOneU16Args(N), SetCallReducerFlags); + FInsertOneU16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU16(const FReducerEventContext& Context, const UInsertOneU16Reducer* Args) @@ -5732,7 +3896,9 @@ void URemoteReducers::InsertOneU256(const FSpacetimeDBUInt256& N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u256"), FInsertOneU256Args(N), SetCallReducerFlags); + FInsertOneU256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU256(const FReducerEventContext& Context, const UInsertOneU256Reducer* Args) @@ -5776,7 +3942,9 @@ void URemoteReducers::InsertOneU32(const uint32 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u32"), FInsertOneU32Args(N), SetCallReducerFlags); + FInsertOneU32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU32(const FReducerEventContext& Context, const UInsertOneU32Reducer* Args) @@ -5820,7 +3988,9 @@ void URemoteReducers::InsertOneU64(const uint64 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u64"), FInsertOneU64Args(N), SetCallReducerFlags); + FInsertOneU64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU64(const FReducerEventContext& Context, const UInsertOneU64Reducer* Args) @@ -5864,7 +4034,9 @@ void URemoteReducers::InsertOneU8(const uint8 N) return; } - Conn->CallReducerTyped(TEXT("insert_one_u8"), FInsertOneU8Args(N), SetCallReducerFlags); + FInsertOneU8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneU8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneU8(const FReducerEventContext& Context, const UInsertOneU8Reducer* Args) @@ -5908,7 +4080,9 @@ void URemoteReducers::InsertOneUnitStruct(const FUnitStructType& S) return; } - Conn->CallReducerTyped(TEXT("insert_one_unit_struct"), FInsertOneUnitStructArgs(S), SetCallReducerFlags); + FInsertOneUnitStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_unit_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneUnitStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneUnitStruct(const FReducerEventContext& Context, const UInsertOneUnitStructReducer* Args) @@ -5952,7 +4126,9 @@ void URemoteReducers::InsertOneUuid(const FSpacetimeDBUuid& U) return; } - Conn->CallReducerTyped(TEXT("insert_one_uuid"), FInsertOneUuidArgs(U), SetCallReducerFlags); + FInsertOneUuidArgs ReducerArgs(U); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_one_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOneUuid(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOneUuid(const FReducerEventContext& Context, const UInsertOneUuidReducer* Args) @@ -5996,7 +4172,9 @@ void URemoteReducers::InsertOptionEveryPrimitiveStruct(const FTestClientOptional return; } - Conn->CallReducerTyped(TEXT("insert_option_every_primitive_struct"), FInsertOptionEveryPrimitiveStructArgs(S), SetCallReducerFlags); + FInsertOptionEveryPrimitiveStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_every_primitive_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionEveryPrimitiveStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionEveryPrimitiveStruct(const FReducerEventContext& Context, const UInsertOptionEveryPrimitiveStructReducer* Args) @@ -6040,7 +4218,9 @@ void URemoteReducers::InsertOptionI32(const FTestClientOptionalInt32 N) return; } - Conn->CallReducerTyped(TEXT("insert_option_i32"), FInsertOptionI32Args(N), SetCallReducerFlags); + FInsertOptionI32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionI32(const FReducerEventContext& Context, const UInsertOptionI32Reducer* Args) @@ -6084,7 +4264,9 @@ void URemoteReducers::InsertOptionIdentity(const FTestClientOptionalIdentity& I) return; } - Conn->CallReducerTyped(TEXT("insert_option_identity"), FInsertOptionIdentityArgs(I), SetCallReducerFlags); + FInsertOptionIdentityArgs ReducerArgs(I); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionIdentity(const FReducerEventContext& Context, const UInsertOptionIdentityReducer* Args) @@ -6128,7 +4310,9 @@ void URemoteReducers::InsertOptionSimpleEnum(const FTestClientOptionalSimpleEnum return; } - Conn->CallReducerTyped(TEXT("insert_option_simple_enum"), FInsertOptionSimpleEnumArgs(E), SetCallReducerFlags); + FInsertOptionSimpleEnumArgs ReducerArgs(E); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionSimpleEnum(const FReducerEventContext& Context, const UInsertOptionSimpleEnumReducer* Args) @@ -6172,7 +4356,9 @@ void URemoteReducers::InsertOptionString(const FTestClientOptionalString& S) return; } - Conn->CallReducerTyped(TEXT("insert_option_string"), FInsertOptionStringArgs(S), SetCallReducerFlags); + FInsertOptionStringArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionString(const FReducerEventContext& Context, const UInsertOptionStringReducer* Args) @@ -6216,7 +4402,9 @@ void URemoteReducers::InsertOptionUuid(const FTestClientOptionalUuid& U) return; } - Conn->CallReducerTyped(TEXT("insert_option_uuid"), FInsertOptionUuidArgs(U), SetCallReducerFlags); + FInsertOptionUuidArgs ReducerArgs(U); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionUuid(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionUuid(const FReducerEventContext& Context, const UInsertOptionUuidReducer* Args) @@ -6260,7 +4448,9 @@ void URemoteReducers::InsertOptionVecOptionI32(const FTestClientOptionalVecOptio return; } - Conn->CallReducerTyped(TEXT("insert_option_vec_option_i32"), FInsertOptionVecOptionI32Args(V), SetCallReducerFlags); + FInsertOptionVecOptionI32Args ReducerArgs(V); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_option_vec_option_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertOptionVecOptionI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertOptionVecOptionI32(const FReducerEventContext& Context, const UInsertOptionVecOptionI32Reducer* Args) @@ -6304,7 +4494,9 @@ void URemoteReducers::InsertPkBool(const bool B, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_bool"), FInsertPkBoolArgs(B, Data), SetCallReducerFlags); + FInsertPkBoolArgs ReducerArgs(B, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkBool(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkBool(const FReducerEventContext& Context, const UInsertPkBoolReducer* Args) @@ -6348,7 +4540,9 @@ void URemoteReducers::InsertPkConnectionId(const FSpacetimeDBConnectionId& A, co return; } - Conn->CallReducerTyped(TEXT("insert_pk_connection_id"), FInsertPkConnectionIdArgs(A, Data), SetCallReducerFlags); + FInsertPkConnectionIdArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkConnectionId(const FReducerEventContext& Context, const UInsertPkConnectionIdReducer* Args) @@ -6392,7 +4586,9 @@ void URemoteReducers::InsertPkI128(const FSpacetimeDBInt128& N, const int32 Data return; } - Conn->CallReducerTyped(TEXT("insert_pk_i128"), FInsertPkI128Args(N, Data), SetCallReducerFlags); + FInsertPkI128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI128(const FReducerEventContext& Context, const UInsertPkI128Reducer* Args) @@ -6436,7 +4632,9 @@ void URemoteReducers::InsertPkI16(const int16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_i16"), FInsertPkI16Args(N, Data), SetCallReducerFlags); + FInsertPkI16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI16(const FReducerEventContext& Context, const UInsertPkI16Reducer* Args) @@ -6480,7 +4678,9 @@ void URemoteReducers::InsertPkI256(const FSpacetimeDBInt256& N, const int32 Data return; } - Conn->CallReducerTyped(TEXT("insert_pk_i256"), FInsertPkI256Args(N, Data), SetCallReducerFlags); + FInsertPkI256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI256(const FReducerEventContext& Context, const UInsertPkI256Reducer* Args) @@ -6524,7 +4724,9 @@ void URemoteReducers::InsertPkI32(const int32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_i32"), FInsertPkI32Args(N, Data), SetCallReducerFlags); + FInsertPkI32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI32(const FReducerEventContext& Context, const UInsertPkI32Reducer* Args) @@ -6568,7 +4770,9 @@ void URemoteReducers::InsertPkI64(const int64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_i64"), FInsertPkI64Args(N, Data), SetCallReducerFlags); + FInsertPkI64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI64(const FReducerEventContext& Context, const UInsertPkI64Reducer* Args) @@ -6612,7 +4816,9 @@ void URemoteReducers::InsertPkI8(const int8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_i8"), FInsertPkI8Args(N, Data), SetCallReducerFlags); + FInsertPkI8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkI8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkI8(const FReducerEventContext& Context, const UInsertPkI8Reducer* Args) @@ -6656,7 +4862,9 @@ void URemoteReducers::InsertPkIdentity(const FSpacetimeDBIdentity& I, const int3 return; } - Conn->CallReducerTyped(TEXT("insert_pk_identity"), FInsertPkIdentityArgs(I, Data), SetCallReducerFlags); + FInsertPkIdentityArgs ReducerArgs(I, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkIdentity(const FReducerEventContext& Context, const UInsertPkIdentityReducer* Args) @@ -6700,7 +4908,9 @@ void URemoteReducers::InsertPkSimpleEnum(const ESimpleEnumType& A, const int32 D return; } - Conn->CallReducerTyped(TEXT("insert_pk_simple_enum"), FInsertPkSimpleEnumArgs(A, Data), SetCallReducerFlags); + FInsertPkSimpleEnumArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkSimpleEnum(const FReducerEventContext& Context, const UInsertPkSimpleEnumReducer* Args) @@ -6744,7 +4954,9 @@ void URemoteReducers::InsertPkString(const FString& S, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_string"), FInsertPkStringArgs(S, Data), SetCallReducerFlags); + FInsertPkStringArgs ReducerArgs(S, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkString(const FReducerEventContext& Context, const UInsertPkStringReducer* Args) @@ -6788,7 +5000,9 @@ void URemoteReducers::InsertPkU128(const FSpacetimeDBUInt128& N, const int32 Dat return; } - Conn->CallReducerTyped(TEXT("insert_pk_u128"), FInsertPkU128Args(N, Data), SetCallReducerFlags); + FInsertPkU128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU128(const FReducerEventContext& Context, const UInsertPkU128Reducer* Args) @@ -6832,7 +5046,9 @@ void URemoteReducers::InsertPkU16(const uint16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_u16"), FInsertPkU16Args(N, Data), SetCallReducerFlags); + FInsertPkU16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU16(const FReducerEventContext& Context, const UInsertPkU16Reducer* Args) @@ -6876,7 +5092,9 @@ void URemoteReducers::InsertPkU256(const FSpacetimeDBUInt256& N, const int32 Dat return; } - Conn->CallReducerTyped(TEXT("insert_pk_u256"), FInsertPkU256Args(N, Data), SetCallReducerFlags); + FInsertPkU256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU256(const FReducerEventContext& Context, const UInsertPkU256Reducer* Args) @@ -6920,7 +5138,9 @@ void URemoteReducers::InsertPkU32(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_u32"), FInsertPkU32Args(N, Data), SetCallReducerFlags); + FInsertPkU32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU32(const FReducerEventContext& Context, const UInsertPkU32Reducer* Args) @@ -6964,7 +5184,9 @@ void URemoteReducers::InsertPkU32Two(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_u32_two"), FInsertPkU32TwoArgs(N, Data), SetCallReducerFlags); + FInsertPkU32TwoArgs ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_32_two"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU32Two(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU32Two(const FReducerEventContext& Context, const UInsertPkU32TwoReducer* Args) @@ -7008,7 +5230,9 @@ void URemoteReducers::InsertPkU64(const uint64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_u64"), FInsertPkU64Args(N, Data), SetCallReducerFlags); + FInsertPkU64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU64(const FReducerEventContext& Context, const UInsertPkU64Reducer* Args) @@ -7052,7 +5276,9 @@ void URemoteReducers::InsertPkU8(const uint8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_u8"), FInsertPkU8Args(N, Data), SetCallReducerFlags); + FInsertPkU8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkU8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkU8(const FReducerEventContext& Context, const UInsertPkU8Reducer* Args) @@ -7096,7 +5322,9 @@ void URemoteReducers::InsertPkUuid(const FSpacetimeDBUuid& U, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_pk_uuid"), FInsertPkUuidArgs(U, Data), SetCallReducerFlags); + FInsertPkUuidArgs ReducerArgs(U, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_pk_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPkUuid(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPkUuid(const FReducerEventContext& Context, const UInsertPkUuidReducer* Args) @@ -7140,7 +5368,9 @@ void URemoteReducers::InsertPrimitivesAsStrings(const FEveryPrimitiveStructType& return; } - Conn->CallReducerTyped(TEXT("insert_primitives_as_strings"), FInsertPrimitivesAsStringsArgs(S), SetCallReducerFlags); + FInsertPrimitivesAsStringsArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_primitives_as_strings"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertPrimitivesAsStrings(ReducerArgs)); } } bool URemoteReducers::InvokeInsertPrimitivesAsStrings(const FReducerEventContext& Context, const UInsertPrimitivesAsStringsReducer* Args) @@ -7184,7 +5414,9 @@ void URemoteReducers::InsertResultEveryPrimitiveStructString(const FTestClientRe return; } - Conn->CallReducerTyped(TEXT("insert_result_every_primitive_struct_string"), FInsertResultEveryPrimitiveStructStringArgs(R), SetCallReducerFlags); + FInsertResultEveryPrimitiveStructStringArgs ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_every_primitive_struct_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultEveryPrimitiveStructString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultEveryPrimitiveStructString(const FReducerEventContext& Context, const UInsertResultEveryPrimitiveStructStringReducer* Args) @@ -7228,7 +5460,9 @@ void URemoteReducers::InsertResultI32String(const FTestClientResultInt32String& return; } - Conn->CallReducerTyped(TEXT("insert_result_i32_string"), FInsertResultI32StringArgs(R), SetCallReducerFlags); + FInsertResultI32StringArgs ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_i_32_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultI32String(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultI32String(const FReducerEventContext& Context, const UInsertResultI32StringReducer* Args) @@ -7272,7 +5506,9 @@ void URemoteReducers::InsertResultIdentityString(const FTestClientResultIdentity return; } - Conn->CallReducerTyped(TEXT("insert_result_identity_string"), FInsertResultIdentityStringArgs(R), SetCallReducerFlags); + FInsertResultIdentityStringArgs ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_identity_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultIdentityString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultIdentityString(const FReducerEventContext& Context, const UInsertResultIdentityStringReducer* Args) @@ -7316,7 +5552,9 @@ void URemoteReducers::InsertResultSimpleEnumI32(const FTestClientResultSimpleEnu return; } - Conn->CallReducerTyped(TEXT("insert_result_simple_enum_i32"), FInsertResultSimpleEnumI32Args(R), SetCallReducerFlags); + FInsertResultSimpleEnumI32Args ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_simple_enum_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultSimpleEnumI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultSimpleEnumI32(const FReducerEventContext& Context, const UInsertResultSimpleEnumI32Reducer* Args) @@ -7360,7 +5598,9 @@ void URemoteReducers::InsertResultStringI32(const FTestClientResultStringInt32& return; } - Conn->CallReducerTyped(TEXT("insert_result_string_i32"), FInsertResultStringI32Args(R), SetCallReducerFlags); + FInsertResultStringI32Args ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_string_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultStringI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultStringI32(const FReducerEventContext& Context, const UInsertResultStringI32Reducer* Args) @@ -7404,7 +5644,9 @@ void URemoteReducers::InsertResultVecI32String(const FTestClientResultVecInt32St return; } - Conn->CallReducerTyped(TEXT("insert_result_vec_i32_string"), FInsertResultVecI32StringArgs(R), SetCallReducerFlags); + FInsertResultVecI32StringArgs ReducerArgs(R); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_result_vec_i_32_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertResultVecI32String(ReducerArgs)); } } bool URemoteReducers::InvokeInsertResultVecI32String(const FReducerEventContext& Context, const UInsertResultVecI32StringReducer* Args) @@ -7448,7 +5690,9 @@ void URemoteReducers::InsertTableHoldsTable(const FOneU8Type& A, const FVecU8Typ return; } - Conn->CallReducerTyped(TEXT("insert_table_holds_table"), FInsertTableHoldsTableArgs(A, B), SetCallReducerFlags); + FInsertTableHoldsTableArgs ReducerArgs(A, B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_table_holds_table"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertTableHoldsTable(ReducerArgs)); } } bool URemoteReducers::InvokeInsertTableHoldsTable(const FReducerEventContext& Context, const UInsertTableHoldsTableReducer* Args) @@ -7492,7 +5736,9 @@ void URemoteReducers::InsertUniqueBool(const bool B, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_bool"), FInsertUniqueBoolArgs(B, Data), SetCallReducerFlags); + FInsertUniqueBoolArgs ReducerArgs(B, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueBool(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueBool(const FReducerEventContext& Context, const UInsertUniqueBoolReducer* Args) @@ -7536,7 +5782,9 @@ void URemoteReducers::InsertUniqueConnectionId(const FSpacetimeDBConnectionId& A return; } - Conn->CallReducerTyped(TEXT("insert_unique_connection_id"), FInsertUniqueConnectionIdArgs(A, Data), SetCallReducerFlags); + FInsertUniqueConnectionIdArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueConnectionId(const FReducerEventContext& Context, const UInsertUniqueConnectionIdReducer* Args) @@ -7580,7 +5828,9 @@ void URemoteReducers::InsertUniqueI128(const FSpacetimeDBInt128& N, const int32 return; } - Conn->CallReducerTyped(TEXT("insert_unique_i128"), FInsertUniqueI128Args(N, Data), SetCallReducerFlags); + FInsertUniqueI128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI128(const FReducerEventContext& Context, const UInsertUniqueI128Reducer* Args) @@ -7624,7 +5874,9 @@ void URemoteReducers::InsertUniqueI16(const int16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_i16"), FInsertUniqueI16Args(N, Data), SetCallReducerFlags); + FInsertUniqueI16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI16(const FReducerEventContext& Context, const UInsertUniqueI16Reducer* Args) @@ -7668,7 +5920,9 @@ void URemoteReducers::InsertUniqueI256(const FSpacetimeDBInt256& N, const int32 return; } - Conn->CallReducerTyped(TEXT("insert_unique_i256"), FInsertUniqueI256Args(N, Data), SetCallReducerFlags); + FInsertUniqueI256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI256(const FReducerEventContext& Context, const UInsertUniqueI256Reducer* Args) @@ -7712,7 +5966,9 @@ void URemoteReducers::InsertUniqueI32(const int32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_i32"), FInsertUniqueI32Args(N, Data), SetCallReducerFlags); + FInsertUniqueI32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI32(const FReducerEventContext& Context, const UInsertUniqueI32Reducer* Args) @@ -7756,7 +6012,9 @@ void URemoteReducers::InsertUniqueI64(const int64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_i64"), FInsertUniqueI64Args(N, Data), SetCallReducerFlags); + FInsertUniqueI64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI64(const FReducerEventContext& Context, const UInsertUniqueI64Reducer* Args) @@ -7800,7 +6058,9 @@ void URemoteReducers::InsertUniqueI8(const int8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_i8"), FInsertUniqueI8Args(N, Data), SetCallReducerFlags); + FInsertUniqueI8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueI8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueI8(const FReducerEventContext& Context, const UInsertUniqueI8Reducer* Args) @@ -7844,7 +6104,9 @@ void URemoteReducers::InsertUniqueIdentity(const FSpacetimeDBIdentity& I, const return; } - Conn->CallReducerTyped(TEXT("insert_unique_identity"), FInsertUniqueIdentityArgs(I, Data), SetCallReducerFlags); + FInsertUniqueIdentityArgs ReducerArgs(I, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueIdentity(const FReducerEventContext& Context, const UInsertUniqueIdentityReducer* Args) @@ -7888,7 +6150,9 @@ void URemoteReducers::InsertUniqueString(const FString& S, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_string"), FInsertUniqueStringArgs(S, Data), SetCallReducerFlags); + FInsertUniqueStringArgs ReducerArgs(S, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueString(const FReducerEventContext& Context, const UInsertUniqueStringReducer* Args) @@ -7932,7 +6196,9 @@ void URemoteReducers::InsertUniqueU128(const FSpacetimeDBUInt128& N, const int32 return; } - Conn->CallReducerTyped(TEXT("insert_unique_u128"), FInsertUniqueU128Args(N, Data), SetCallReducerFlags); + FInsertUniqueU128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU128(const FReducerEventContext& Context, const UInsertUniqueU128Reducer* Args) @@ -7976,7 +6242,9 @@ void URemoteReducers::InsertUniqueU16(const uint16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_u16"), FInsertUniqueU16Args(N, Data), SetCallReducerFlags); + FInsertUniqueU16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU16(const FReducerEventContext& Context, const UInsertUniqueU16Reducer* Args) @@ -8020,7 +6288,9 @@ void URemoteReducers::InsertUniqueU256(const FSpacetimeDBUInt256& N, const int32 return; } - Conn->CallReducerTyped(TEXT("insert_unique_u256"), FInsertUniqueU256Args(N, Data), SetCallReducerFlags); + FInsertUniqueU256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU256(const FReducerEventContext& Context, const UInsertUniqueU256Reducer* Args) @@ -8064,7 +6334,9 @@ void URemoteReducers::InsertUniqueU32(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_u32"), FInsertUniqueU32Args(N, Data), SetCallReducerFlags); + FInsertUniqueU32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU32(const FReducerEventContext& Context, const UInsertUniqueU32Reducer* Args) @@ -8108,7 +6380,9 @@ void URemoteReducers::InsertUniqueU32UpdatePkU32(const uint32 N, const int32 DUn return; } - Conn->CallReducerTyped(TEXT("insert_unique_u32_update_pk_u32"), FInsertUniqueU32UpdatePkU32Args(N, DUnique, DPk), SetCallReducerFlags); + FInsertUniqueU32UpdatePkU32Args ReducerArgs(N, DUnique, DPk); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_32_update_pk_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU32UpdatePkU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU32UpdatePkU32(const FReducerEventContext& Context, const UInsertUniqueU32UpdatePkU32Reducer* Args) @@ -8152,7 +6426,9 @@ void URemoteReducers::InsertUniqueU64(const uint64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_u64"), FInsertUniqueU64Args(N, Data), SetCallReducerFlags); + FInsertUniqueU64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU64(const FReducerEventContext& Context, const UInsertUniqueU64Reducer* Args) @@ -8196,7 +6472,9 @@ void URemoteReducers::InsertUniqueU8(const uint8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("insert_unique_u8"), FInsertUniqueU8Args(N, Data), SetCallReducerFlags); + FInsertUniqueU8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueU8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueU8(const FReducerEventContext& Context, const UInsertUniqueU8Reducer* Args) @@ -8240,7 +6518,9 @@ void URemoteReducers::InsertUniqueUuid(const FSpacetimeDBUuid& U, const int32 Da return; } - Conn->CallReducerTyped(TEXT("insert_unique_uuid"), FInsertUniqueUuidArgs(U, Data), SetCallReducerFlags); + FInsertUniqueUuidArgs ReducerArgs(U, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_unique_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUniqueUuid(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUniqueUuid(const FReducerEventContext& Context, const UInsertUniqueUuidReducer* Args) @@ -8284,7 +6564,9 @@ void URemoteReducers::InsertUser(const FString& Name, const FSpacetimeDBIdentity return; } - Conn->CallReducerTyped(TEXT("insert_user"), FInsertUserArgs(Name, Identity), SetCallReducerFlags); + FInsertUserArgs ReducerArgs(Name, Identity); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_user"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertUser(ReducerArgs)); } } bool URemoteReducers::InvokeInsertUser(const FReducerEventContext& Context, const UInsertUserReducer* Args) @@ -8328,7 +6610,9 @@ void URemoteReducers::InsertVecBool(const TArray& B) return; } - Conn->CallReducerTyped(TEXT("insert_vec_bool"), FInsertVecBoolArgs(B), SetCallReducerFlags); + FInsertVecBoolArgs ReducerArgs(B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecBool(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecBool(const FReducerEventContext& Context, const UInsertVecBoolReducer* Args) @@ -8372,7 +6656,9 @@ void URemoteReducers::InsertVecByteStruct(const TArray& S) return; } - Conn->CallReducerTyped(TEXT("insert_vec_byte_struct"), FInsertVecByteStructArgs(S), SetCallReducerFlags); + FInsertVecByteStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_byte_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecByteStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecByteStruct(const FReducerEventContext& Context, const UInsertVecByteStructReducer* Args) @@ -8416,7 +6702,9 @@ void URemoteReducers::InsertVecConnectionId(const TArrayCallReducerTyped(TEXT("insert_vec_connection_id"), FInsertVecConnectionIdArgs(A), SetCallReducerFlags); + FInsertVecConnectionIdArgs ReducerArgs(A); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecConnectionId(const FReducerEventContext& Context, const UInsertVecConnectionIdReducer* Args) @@ -8460,7 +6748,9 @@ void URemoteReducers::InsertVecEnumWithPayload(const TArrayCallReducerTyped(TEXT("insert_vec_enum_with_payload"), FInsertVecEnumWithPayloadArgs(E), SetCallReducerFlags); + FInsertVecEnumWithPayloadArgs ReducerArgs(E); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_enum_with_payload"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecEnumWithPayload(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecEnumWithPayload(const FReducerEventContext& Context, const UInsertVecEnumWithPayloadReducer* Args) @@ -8504,7 +6794,9 @@ void URemoteReducers::InsertVecEveryPrimitiveStruct(const TArrayCallReducerTyped(TEXT("insert_vec_every_primitive_struct"), FInsertVecEveryPrimitiveStructArgs(S), SetCallReducerFlags); + FInsertVecEveryPrimitiveStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_every_primitive_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecEveryPrimitiveStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecEveryPrimitiveStruct(const FReducerEventContext& Context, const UInsertVecEveryPrimitiveStructReducer* Args) @@ -8548,7 +6840,9 @@ void URemoteReducers::InsertVecEveryVecStruct(const TArray& return; } - Conn->CallReducerTyped(TEXT("insert_vec_every_vec_struct"), FInsertVecEveryVecStructArgs(S), SetCallReducerFlags); + FInsertVecEveryVecStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_every_vec_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecEveryVecStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecEveryVecStruct(const FReducerEventContext& Context, const UInsertVecEveryVecStructReducer* Args) @@ -8592,7 +6886,9 @@ void URemoteReducers::InsertVecF32(const TArray& F) return; } - Conn->CallReducerTyped(TEXT("insert_vec_f32"), FInsertVecF32Args(F), SetCallReducerFlags); + FInsertVecF32Args ReducerArgs(F); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_f_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecF32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecF32(const FReducerEventContext& Context, const UInsertVecF32Reducer* Args) @@ -8636,7 +6932,9 @@ void URemoteReducers::InsertVecF64(const TArray& F) return; } - Conn->CallReducerTyped(TEXT("insert_vec_f64"), FInsertVecF64Args(F), SetCallReducerFlags); + FInsertVecF64Args ReducerArgs(F); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_f_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecF64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecF64(const FReducerEventContext& Context, const UInsertVecF64Reducer* Args) @@ -8680,7 +6978,9 @@ void URemoteReducers::InsertVecI128(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i128"), FInsertVecI128Args(N), SetCallReducerFlags); + FInsertVecI128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI128(const FReducerEventContext& Context, const UInsertVecI128Reducer* Args) @@ -8724,7 +7024,9 @@ void URemoteReducers::InsertVecI16(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i16"), FInsertVecI16Args(N), SetCallReducerFlags); + FInsertVecI16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI16(const FReducerEventContext& Context, const UInsertVecI16Reducer* Args) @@ -8768,7 +7070,9 @@ void URemoteReducers::InsertVecI256(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i256"), FInsertVecI256Args(N), SetCallReducerFlags); + FInsertVecI256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI256(const FReducerEventContext& Context, const UInsertVecI256Reducer* Args) @@ -8812,7 +7116,9 @@ void URemoteReducers::InsertVecI32(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i32"), FInsertVecI32Args(N), SetCallReducerFlags); + FInsertVecI32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI32(const FReducerEventContext& Context, const UInsertVecI32Reducer* Args) @@ -8856,7 +7162,9 @@ void URemoteReducers::InsertVecI64(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i64"), FInsertVecI64Args(N), SetCallReducerFlags); + FInsertVecI64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI64(const FReducerEventContext& Context, const UInsertVecI64Reducer* Args) @@ -8900,7 +7208,9 @@ void URemoteReducers::InsertVecI8(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_i8"), FInsertVecI8Args(N), SetCallReducerFlags); + FInsertVecI8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecI8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecI8(const FReducerEventContext& Context, const UInsertVecI8Reducer* Args) @@ -8944,7 +7254,9 @@ void URemoteReducers::InsertVecIdentity(const TArray& I) return; } - Conn->CallReducerTyped(TEXT("insert_vec_identity"), FInsertVecIdentityArgs(I), SetCallReducerFlags); + FInsertVecIdentityArgs ReducerArgs(I); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecIdentity(const FReducerEventContext& Context, const UInsertVecIdentityReducer* Args) @@ -8988,7 +7300,9 @@ void URemoteReducers::InsertVecSimpleEnum(const TArray& E) return; } - Conn->CallReducerTyped(TEXT("insert_vec_simple_enum"), FInsertVecSimpleEnumArgs(E), SetCallReducerFlags); + FInsertVecSimpleEnumArgs ReducerArgs(E); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecSimpleEnum(const FReducerEventContext& Context, const UInsertVecSimpleEnumReducer* Args) @@ -9032,7 +7346,9 @@ void URemoteReducers::InsertVecString(const TArray& S) return; } - Conn->CallReducerTyped(TEXT("insert_vec_string"), FInsertVecStringArgs(S), SetCallReducerFlags); + FInsertVecStringArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecString(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecString(const FReducerEventContext& Context, const UInsertVecStringReducer* Args) @@ -9076,7 +7392,9 @@ void URemoteReducers::InsertVecTimestamp(const TArray& T) return; } - Conn->CallReducerTyped(TEXT("insert_vec_timestamp"), FInsertVecTimestampArgs(T), SetCallReducerFlags); + FInsertVecTimestampArgs ReducerArgs(T); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_timestamp"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecTimestamp(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecTimestamp(const FReducerEventContext& Context, const UInsertVecTimestampReducer* Args) @@ -9120,7 +7438,9 @@ void URemoteReducers::InsertVecU128(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u128"), FInsertVecU128Args(N), SetCallReducerFlags); + FInsertVecU128Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU128(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU128(const FReducerEventContext& Context, const UInsertVecU128Reducer* Args) @@ -9164,7 +7484,9 @@ void URemoteReducers::InsertVecU16(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u16"), FInsertVecU16Args(N), SetCallReducerFlags); + FInsertVecU16Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU16(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU16(const FReducerEventContext& Context, const UInsertVecU16Reducer* Args) @@ -9208,7 +7530,9 @@ void URemoteReducers::InsertVecU256(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u256"), FInsertVecU256Args(N), SetCallReducerFlags); + FInsertVecU256Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU256(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU256(const FReducerEventContext& Context, const UInsertVecU256Reducer* Args) @@ -9252,7 +7576,9 @@ void URemoteReducers::InsertVecU32(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u32"), FInsertVecU32Args(N), SetCallReducerFlags); + FInsertVecU32Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU32(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU32(const FReducerEventContext& Context, const UInsertVecU32Reducer* Args) @@ -9296,7 +7622,9 @@ void URemoteReducers::InsertVecU64(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u64"), FInsertVecU64Args(N), SetCallReducerFlags); + FInsertVecU64Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU64(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU64(const FReducerEventContext& Context, const UInsertVecU64Reducer* Args) @@ -9340,7 +7668,9 @@ void URemoteReducers::InsertVecU8(const TArray& N) return; } - Conn->CallReducerTyped(TEXT("insert_vec_u8"), FInsertVecU8Args(N), SetCallReducerFlags); + FInsertVecU8Args ReducerArgs(N); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecU8(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecU8(const FReducerEventContext& Context, const UInsertVecU8Reducer* Args) @@ -9384,7 +7714,9 @@ void URemoteReducers::InsertVecUnitStruct(const TArray& S) return; } - Conn->CallReducerTyped(TEXT("insert_vec_unit_struct"), FInsertVecUnitStructArgs(S), SetCallReducerFlags); + FInsertVecUnitStructArgs ReducerArgs(S); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_unit_struct"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecUnitStruct(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecUnitStruct(const FReducerEventContext& Context, const UInsertVecUnitStructReducer* Args) @@ -9428,7 +7760,9 @@ void URemoteReducers::InsertVecUuid(const TArray& U) return; } - Conn->CallReducerTyped(TEXT("insert_vec_uuid"), FInsertVecUuidArgs(U), SetCallReducerFlags); + FInsertVecUuidArgs ReducerArgs(U); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("insert_vec_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::InsertVecUuid(ReducerArgs)); } } bool URemoteReducers::InvokeInsertVecUuid(const FReducerEventContext& Context, const UInsertVecUuidReducer* Args) @@ -9472,7 +7806,9 @@ void URemoteReducers::NoOpSucceeds() return; } - Conn->CallReducerTyped(TEXT("no_op_succeeds"), FNoOpSucceedsArgs(), SetCallReducerFlags); + FNoOpSucceedsArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("no_op_succeeds"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::NoOpSucceeds(ReducerArgs)); } } bool URemoteReducers::InvokeNoOpSucceeds(const FReducerEventContext& Context, const UNoOpSucceedsReducer* Args) @@ -9516,7 +7852,9 @@ void URemoteReducers::SortedUuidsInsert() return; } - Conn->CallReducerTyped(TEXT("sorted_uuids_insert"), FSortedUuidsInsertArgs(), SetCallReducerFlags); + FSortedUuidsInsertArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("sorted_uuids_insert"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::SortedUuidsInsert(ReducerArgs)); } } bool URemoteReducers::InvokeSortedUuidsInsert(const FReducerEventContext& Context, const USortedUuidsInsertReducer* Args) @@ -9560,7 +7898,9 @@ void URemoteReducers::UpdateIndexedSimpleEnum(const ESimpleEnumType& A, const ES return; } - Conn->CallReducerTyped(TEXT("update_indexed_simple_enum"), FUpdateIndexedSimpleEnumArgs(A, B), SetCallReducerFlags); + FUpdateIndexedSimpleEnumArgs ReducerArgs(A, B); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_indexed_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateIndexedSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateIndexedSimpleEnum(const FReducerEventContext& Context, const UUpdateIndexedSimpleEnumReducer* Args) @@ -9604,7 +7944,9 @@ void URemoteReducers::UpdatePkBool(const bool B, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_bool"), FUpdatePkBoolArgs(B, Data), SetCallReducerFlags); + FUpdatePkBoolArgs ReducerArgs(B, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkBool(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkBool(const FReducerEventContext& Context, const UUpdatePkBoolReducer* Args) @@ -9648,7 +7990,9 @@ void URemoteReducers::UpdatePkConnectionId(const FSpacetimeDBConnectionId& A, co return; } - Conn->CallReducerTyped(TEXT("update_pk_connection_id"), FUpdatePkConnectionIdArgs(A, Data), SetCallReducerFlags); + FUpdatePkConnectionIdArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkConnectionId(const FReducerEventContext& Context, const UUpdatePkConnectionIdReducer* Args) @@ -9692,7 +8036,9 @@ void URemoteReducers::UpdatePkI128(const FSpacetimeDBInt128& N, const int32 Data return; } - Conn->CallReducerTyped(TEXT("update_pk_i128"), FUpdatePkI128Args(N, Data), SetCallReducerFlags); + FUpdatePkI128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI128(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI128(const FReducerEventContext& Context, const UUpdatePkI128Reducer* Args) @@ -9736,7 +8082,9 @@ void URemoteReducers::UpdatePkI16(const int16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_i16"), FUpdatePkI16Args(N, Data), SetCallReducerFlags); + FUpdatePkI16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI16(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI16(const FReducerEventContext& Context, const UUpdatePkI16Reducer* Args) @@ -9780,7 +8128,9 @@ void URemoteReducers::UpdatePkI256(const FSpacetimeDBInt256& N, const int32 Data return; } - Conn->CallReducerTyped(TEXT("update_pk_i256"), FUpdatePkI256Args(N, Data), SetCallReducerFlags); + FUpdatePkI256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI256(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI256(const FReducerEventContext& Context, const UUpdatePkI256Reducer* Args) @@ -9824,7 +8174,9 @@ void URemoteReducers::UpdatePkI32(const int32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_i32"), FUpdatePkI32Args(N, Data), SetCallReducerFlags); + FUpdatePkI32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI32(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI32(const FReducerEventContext& Context, const UUpdatePkI32Reducer* Args) @@ -9868,7 +8220,9 @@ void URemoteReducers::UpdatePkI64(const int64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_i64"), FUpdatePkI64Args(N, Data), SetCallReducerFlags); + FUpdatePkI64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI64(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI64(const FReducerEventContext& Context, const UUpdatePkI64Reducer* Args) @@ -9912,7 +8266,9 @@ void URemoteReducers::UpdatePkI8(const int8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_i8"), FUpdatePkI8Args(N, Data), SetCallReducerFlags); + FUpdatePkI8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkI8(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkI8(const FReducerEventContext& Context, const UUpdatePkI8Reducer* Args) @@ -9956,7 +8312,9 @@ void URemoteReducers::UpdatePkIdentity(const FSpacetimeDBIdentity& I, const int3 return; } - Conn->CallReducerTyped(TEXT("update_pk_identity"), FUpdatePkIdentityArgs(I, Data), SetCallReducerFlags); + FUpdatePkIdentityArgs ReducerArgs(I, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkIdentity(const FReducerEventContext& Context, const UUpdatePkIdentityReducer* Args) @@ -10000,7 +8358,9 @@ void URemoteReducers::UpdatePkSimpleEnum(const ESimpleEnumType& A, const int32 D return; } - Conn->CallReducerTyped(TEXT("update_pk_simple_enum"), FUpdatePkSimpleEnumArgs(A, Data), SetCallReducerFlags); + FUpdatePkSimpleEnumArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_simple_enum"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkSimpleEnum(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkSimpleEnum(const FReducerEventContext& Context, const UUpdatePkSimpleEnumReducer* Args) @@ -10044,7 +8404,9 @@ void URemoteReducers::UpdatePkString(const FString& S, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_string"), FUpdatePkStringArgs(S, Data), SetCallReducerFlags); + FUpdatePkStringArgs ReducerArgs(S, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkString(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkString(const FReducerEventContext& Context, const UUpdatePkStringReducer* Args) @@ -10088,7 +8450,9 @@ void URemoteReducers::UpdatePkU128(const FSpacetimeDBUInt128& N, const int32 Dat return; } - Conn->CallReducerTyped(TEXT("update_pk_u128"), FUpdatePkU128Args(N, Data), SetCallReducerFlags); + FUpdatePkU128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU128(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU128(const FReducerEventContext& Context, const UUpdatePkU128Reducer* Args) @@ -10132,7 +8496,9 @@ void URemoteReducers::UpdatePkU16(const uint16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_u16"), FUpdatePkU16Args(N, Data), SetCallReducerFlags); + FUpdatePkU16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU16(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU16(const FReducerEventContext& Context, const UUpdatePkU16Reducer* Args) @@ -10176,7 +8542,9 @@ void URemoteReducers::UpdatePkU256(const FSpacetimeDBUInt256& N, const int32 Dat return; } - Conn->CallReducerTyped(TEXT("update_pk_u256"), FUpdatePkU256Args(N, Data), SetCallReducerFlags); + FUpdatePkU256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU256(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU256(const FReducerEventContext& Context, const UUpdatePkU256Reducer* Args) @@ -10220,7 +8588,9 @@ void URemoteReducers::UpdatePkU32(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_u32"), FUpdatePkU32Args(N, Data), SetCallReducerFlags); + FUpdatePkU32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU32(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU32(const FReducerEventContext& Context, const UUpdatePkU32Reducer* Args) @@ -10264,7 +8634,9 @@ void URemoteReducers::UpdatePkU32Two(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_u32_two"), FUpdatePkU32TwoArgs(N, Data), SetCallReducerFlags); + FUpdatePkU32TwoArgs ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_32_two"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU32Two(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU32Two(const FReducerEventContext& Context, const UUpdatePkU32TwoReducer* Args) @@ -10308,7 +8680,9 @@ void URemoteReducers::UpdatePkU64(const uint64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_u64"), FUpdatePkU64Args(N, Data), SetCallReducerFlags); + FUpdatePkU64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU64(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU64(const FReducerEventContext& Context, const UUpdatePkU64Reducer* Args) @@ -10352,7 +8726,9 @@ void URemoteReducers::UpdatePkU8(const uint8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_u8"), FUpdatePkU8Args(N, Data), SetCallReducerFlags); + FUpdatePkU8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkU8(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkU8(const FReducerEventContext& Context, const UUpdatePkU8Reducer* Args) @@ -10396,7 +8772,9 @@ void URemoteReducers::UpdatePkUuid(const FSpacetimeDBUuid& U, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_pk_uuid"), FUpdatePkUuidArgs(U, Data), SetCallReducerFlags); + FUpdatePkUuidArgs ReducerArgs(U, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_pk_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdatePkUuid(ReducerArgs)); } } bool URemoteReducers::InvokeUpdatePkUuid(const FReducerEventContext& Context, const UUpdatePkUuidReducer* Args) @@ -10440,7 +8818,9 @@ void URemoteReducers::UpdateUniqueBool(const bool B, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_bool"), FUpdateUniqueBoolArgs(B, Data), SetCallReducerFlags); + FUpdateUniqueBoolArgs ReducerArgs(B, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_bool"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueBool(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueBool(const FReducerEventContext& Context, const UUpdateUniqueBoolReducer* Args) @@ -10484,7 +8864,9 @@ void URemoteReducers::UpdateUniqueConnectionId(const FSpacetimeDBConnectionId& A return; } - Conn->CallReducerTyped(TEXT("update_unique_connection_id"), FUpdateUniqueConnectionIdArgs(A, Data), SetCallReducerFlags); + FUpdateUniqueConnectionIdArgs ReducerArgs(A, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_connection_id"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueConnectionId(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueConnectionId(const FReducerEventContext& Context, const UUpdateUniqueConnectionIdReducer* Args) @@ -10528,7 +8910,9 @@ void URemoteReducers::UpdateUniqueI128(const FSpacetimeDBInt128& N, const int32 return; } - Conn->CallReducerTyped(TEXT("update_unique_i128"), FUpdateUniqueI128Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI128(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI128(const FReducerEventContext& Context, const UUpdateUniqueI128Reducer* Args) @@ -10572,7 +8956,9 @@ void URemoteReducers::UpdateUniqueI16(const int16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_i16"), FUpdateUniqueI16Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI16(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI16(const FReducerEventContext& Context, const UUpdateUniqueI16Reducer* Args) @@ -10616,7 +9002,9 @@ void URemoteReducers::UpdateUniqueI256(const FSpacetimeDBInt256& N, const int32 return; } - Conn->CallReducerTyped(TEXT("update_unique_i256"), FUpdateUniqueI256Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI256(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI256(const FReducerEventContext& Context, const UUpdateUniqueI256Reducer* Args) @@ -10660,7 +9048,9 @@ void URemoteReducers::UpdateUniqueI32(const int32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_i32"), FUpdateUniqueI32Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI32(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI32(const FReducerEventContext& Context, const UUpdateUniqueI32Reducer* Args) @@ -10704,7 +9094,9 @@ void URemoteReducers::UpdateUniqueI64(const int64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_i64"), FUpdateUniqueI64Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI64(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI64(const FReducerEventContext& Context, const UUpdateUniqueI64Reducer* Args) @@ -10748,7 +9140,9 @@ void URemoteReducers::UpdateUniqueI8(const int8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_i8"), FUpdateUniqueI8Args(N, Data), SetCallReducerFlags); + FUpdateUniqueI8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_i_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueI8(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueI8(const FReducerEventContext& Context, const UUpdateUniqueI8Reducer* Args) @@ -10792,7 +9186,9 @@ void URemoteReducers::UpdateUniqueIdentity(const FSpacetimeDBIdentity& I, const return; } - Conn->CallReducerTyped(TEXT("update_unique_identity"), FUpdateUniqueIdentityArgs(I, Data), SetCallReducerFlags); + FUpdateUniqueIdentityArgs ReducerArgs(I, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_identity"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueIdentity(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueIdentity(const FReducerEventContext& Context, const UUpdateUniqueIdentityReducer* Args) @@ -10836,7 +9232,9 @@ void URemoteReducers::UpdateUniqueString(const FString& S, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_string"), FUpdateUniqueStringArgs(S, Data), SetCallReducerFlags); + FUpdateUniqueStringArgs ReducerArgs(S, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_string"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueString(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueString(const FReducerEventContext& Context, const UUpdateUniqueStringReducer* Args) @@ -10880,7 +9278,9 @@ void URemoteReducers::UpdateUniqueU128(const FSpacetimeDBUInt128& N, const int32 return; } - Conn->CallReducerTyped(TEXT("update_unique_u128"), FUpdateUniqueU128Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU128Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_128"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU128(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU128(const FReducerEventContext& Context, const UUpdateUniqueU128Reducer* Args) @@ -10924,7 +9324,9 @@ void URemoteReducers::UpdateUniqueU16(const uint16 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_u16"), FUpdateUniqueU16Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU16Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_16"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU16(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU16(const FReducerEventContext& Context, const UUpdateUniqueU16Reducer* Args) @@ -10968,7 +9370,9 @@ void URemoteReducers::UpdateUniqueU256(const FSpacetimeDBUInt256& N, const int32 return; } - Conn->CallReducerTyped(TEXT("update_unique_u256"), FUpdateUniqueU256Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU256Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_256"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU256(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU256(const FReducerEventContext& Context, const UUpdateUniqueU256Reducer* Args) @@ -11012,7 +9416,9 @@ void URemoteReducers::UpdateUniqueU32(const uint32 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_u32"), FUpdateUniqueU32Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU32Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_32"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU32(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU32(const FReducerEventContext& Context, const UUpdateUniqueU32Reducer* Args) @@ -11056,7 +9462,9 @@ void URemoteReducers::UpdateUniqueU64(const uint64 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_u64"), FUpdateUniqueU64Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU64Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_64"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU64(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU64(const FReducerEventContext& Context, const UUpdateUniqueU64Reducer* Args) @@ -11100,7 +9508,9 @@ void URemoteReducers::UpdateUniqueU8(const uint8 N, const int32 Data) return; } - Conn->CallReducerTyped(TEXT("update_unique_u8"), FUpdateUniqueU8Args(N, Data), SetCallReducerFlags); + FUpdateUniqueU8Args ReducerArgs(N, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_u_8"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueU8(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueU8(const FReducerEventContext& Context, const UUpdateUniqueU8Reducer* Args) @@ -11144,7 +9554,9 @@ void URemoteReducers::UpdateUniqueUuid(const FSpacetimeDBUuid& U, const int32 Da return; } - Conn->CallReducerTyped(TEXT("update_unique_uuid"), FUpdateUniqueUuidArgs(U, Data), SetCallReducerFlags); + FUpdateUniqueUuidArgs ReducerArgs(U, Data); + const uint32 RequestId = Conn->CallReducerTyped(TEXT("update_unique_uuid"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::UpdateUniqueUuid(ReducerArgs)); } } bool URemoteReducers::InvokeUpdateUniqueUuid(const FReducerEventContext& Context, const UUpdateUniqueUuidReducer* Args) @@ -11215,11 +9627,45 @@ void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContex } } +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + void UDbConnection::ReducerEvent(const FReducerEvent& Event) { if (!Reducers) { return; } - FReducer DecodedReducer = DecodeReducer(Event); + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + UE_LOG(LogTemp, Error, TEXT("%s"), *ErrorMessage); + ReducerEventFailed(Event, ErrorMessage); + return; + } FTestClientReducerEvent ReducerEvent; ReducerEvent.CallerConnectionId = Event.CallerConnectionId; @@ -11231,10 +9677,10 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) FReducerEventContext Context(this, ReducerEvent); - // Use hardcoded string matching for reducer dispatching - const FString& ReducerName = Event.ReducerCall.ReducerName; + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; - if (ReducerName == TEXT("delete_from_btree_u32")) + if (ReducerName == TEXT("delete_from_btree_u_32")) { FDeleteFromBtreeU32Args Args = ReducerEvent.Reducer.GetAsDeleteFromBtreeU32(); Reducers->InvokeDeleteFromBtreeU32WithArgs(Context, Args); @@ -11258,37 +9704,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeDeletePkConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i128")) + if (ReducerName == TEXT("delete_pk_i_128")) { FDeletePkI128Args Args = ReducerEvent.Reducer.GetAsDeletePkI128(); Reducers->InvokeDeletePkI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i16")) + if (ReducerName == TEXT("delete_pk_i_16")) { FDeletePkI16Args Args = ReducerEvent.Reducer.GetAsDeletePkI16(); Reducers->InvokeDeletePkI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i256")) + if (ReducerName == TEXT("delete_pk_i_256")) { FDeletePkI256Args Args = ReducerEvent.Reducer.GetAsDeletePkI256(); Reducers->InvokeDeletePkI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i32")) + if (ReducerName == TEXT("delete_pk_i_32")) { FDeletePkI32Args Args = ReducerEvent.Reducer.GetAsDeletePkI32(); Reducers->InvokeDeletePkI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i64")) + if (ReducerName == TEXT("delete_pk_i_64")) { FDeletePkI64Args Args = ReducerEvent.Reducer.GetAsDeletePkI64(); Reducers->InvokeDeletePkI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_i8")) + if (ReducerName == TEXT("delete_pk_i_8")) { FDeletePkI8Args Args = ReducerEvent.Reducer.GetAsDeletePkI8(); Reducers->InvokeDeletePkI8WithArgs(Context, Args); @@ -11306,49 +9752,49 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeDeletePkStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u128")) + if (ReducerName == TEXT("delete_pk_u_128")) { FDeletePkU128Args Args = ReducerEvent.Reducer.GetAsDeletePkU128(); Reducers->InvokeDeletePkU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u16")) + if (ReducerName == TEXT("delete_pk_u_16")) { FDeletePkU16Args Args = ReducerEvent.Reducer.GetAsDeletePkU16(); Reducers->InvokeDeletePkU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u256")) + if (ReducerName == TEXT("delete_pk_u_256")) { FDeletePkU256Args Args = ReducerEvent.Reducer.GetAsDeletePkU256(); Reducers->InvokeDeletePkU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u32")) + if (ReducerName == TEXT("delete_pk_u_32")) { FDeletePkU32Args Args = ReducerEvent.Reducer.GetAsDeletePkU32(); Reducers->InvokeDeletePkU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u32_insert_pk_u32_two")) + if (ReducerName == TEXT("delete_pk_u_32_insert_pk_u_32_two")) { FDeletePkU32InsertPkU32TwoArgs Args = ReducerEvent.Reducer.GetAsDeletePkU32InsertPkU32Two(); Reducers->InvokeDeletePkU32InsertPkU32TwoWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u32_two")) + if (ReducerName == TEXT("delete_pk_u_32_two")) { FDeletePkU32TwoArgs Args = ReducerEvent.Reducer.GetAsDeletePkU32Two(); Reducers->InvokeDeletePkU32TwoWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u64")) + if (ReducerName == TEXT("delete_pk_u_64")) { FDeletePkU64Args Args = ReducerEvent.Reducer.GetAsDeletePkU64(); Reducers->InvokeDeletePkU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_pk_u8")) + if (ReducerName == TEXT("delete_pk_u_8")) { FDeletePkU8Args Args = ReducerEvent.Reducer.GetAsDeletePkU8(); Reducers->InvokeDeletePkU8WithArgs(Context, Args); @@ -11372,37 +9818,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeDeleteUniqueConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i128")) + if (ReducerName == TEXT("delete_unique_i_128")) { FDeleteUniqueI128Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI128(); Reducers->InvokeDeleteUniqueI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i16")) + if (ReducerName == TEXT("delete_unique_i_16")) { FDeleteUniqueI16Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI16(); Reducers->InvokeDeleteUniqueI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i256")) + if (ReducerName == TEXT("delete_unique_i_256")) { FDeleteUniqueI256Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI256(); Reducers->InvokeDeleteUniqueI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i32")) + if (ReducerName == TEXT("delete_unique_i_32")) { FDeleteUniqueI32Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI32(); Reducers->InvokeDeleteUniqueI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i64")) + if (ReducerName == TEXT("delete_unique_i_64")) { FDeleteUniqueI64Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI64(); Reducers->InvokeDeleteUniqueI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_i8")) + if (ReducerName == TEXT("delete_unique_i_8")) { FDeleteUniqueI8Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueI8(); Reducers->InvokeDeleteUniqueI8WithArgs(Context, Args); @@ -11420,37 +9866,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeDeleteUniqueStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u128")) + if (ReducerName == TEXT("delete_unique_u_128")) { FDeleteUniqueU128Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU128(); Reducers->InvokeDeleteUniqueU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u16")) + if (ReducerName == TEXT("delete_unique_u_16")) { FDeleteUniqueU16Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU16(); Reducers->InvokeDeleteUniqueU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u256")) + if (ReducerName == TEXT("delete_unique_u_256")) { FDeleteUniqueU256Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU256(); Reducers->InvokeDeleteUniqueU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u32")) + if (ReducerName == TEXT("delete_unique_u_32")) { FDeleteUniqueU32Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU32(); Reducers->InvokeDeleteUniqueU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u64")) + if (ReducerName == TEXT("delete_unique_u_64")) { FDeleteUniqueU64Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU64(); Reducers->InvokeDeleteUniqueU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("delete_unique_u8")) + if (ReducerName == TEXT("delete_unique_u_8")) { FDeleteUniqueU8Args Args = ReducerEvent.Reducer.GetAsDeleteUniqueU8(); Reducers->InvokeDeleteUniqueU8WithArgs(Context, Args); @@ -11468,13 +9914,13 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertCallTimestampWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_call_uuid_v4")) + if (ReducerName == TEXT("insert_call_uuid_v_4")) { FInsertCallUuidV4Args Args = ReducerEvent.Reducer.GetAsInsertCallUuidV4(); Reducers->InvokeInsertCallUuidV4WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_call_uuid_v7")) + if (ReducerName == TEXT("insert_call_uuid_v_7")) { FInsertCallUuidV7Args Args = ReducerEvent.Reducer.GetAsInsertCallUuidV7(); Reducers->InvokeInsertCallUuidV7WithArgs(Context, Args); @@ -11528,7 +9974,7 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertCallerVecIdentityWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_into_btree_u32")) + if (ReducerName == TEXT("insert_into_btree_u_32")) { FInsertIntoBtreeU32Args Args = ReducerEvent.Reducer.GetAsInsertIntoBtreeU32(); Reducers->InvokeInsertIntoBtreeU32WithArgs(Context, Args); @@ -11540,7 +9986,7 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertIntoIndexedSimpleEnumWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_into_pk_btree_u32")) + if (ReducerName == TEXT("insert_into_pk_btree_u_32")) { FInsertIntoPkBtreeU32Args Args = ReducerEvent.Reducer.GetAsInsertIntoPkBtreeU32(); Reducers->InvokeInsertIntoPkBtreeU32WithArgs(Context, Args); @@ -11588,49 +10034,49 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertOneEveryVecStructWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_f32")) + if (ReducerName == TEXT("insert_one_f_32")) { FInsertOneF32Args Args = ReducerEvent.Reducer.GetAsInsertOneF32(); Reducers->InvokeInsertOneF32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_f64")) + if (ReducerName == TEXT("insert_one_f_64")) { FInsertOneF64Args Args = ReducerEvent.Reducer.GetAsInsertOneF64(); Reducers->InvokeInsertOneF64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i128")) + if (ReducerName == TEXT("insert_one_i_128")) { FInsertOneI128Args Args = ReducerEvent.Reducer.GetAsInsertOneI128(); Reducers->InvokeInsertOneI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i16")) + if (ReducerName == TEXT("insert_one_i_16")) { FInsertOneI16Args Args = ReducerEvent.Reducer.GetAsInsertOneI16(); Reducers->InvokeInsertOneI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i256")) + if (ReducerName == TEXT("insert_one_i_256")) { FInsertOneI256Args Args = ReducerEvent.Reducer.GetAsInsertOneI256(); Reducers->InvokeInsertOneI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i32")) + if (ReducerName == TEXT("insert_one_i_32")) { FInsertOneI32Args Args = ReducerEvent.Reducer.GetAsInsertOneI32(); Reducers->InvokeInsertOneI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i64")) + if (ReducerName == TEXT("insert_one_i_64")) { FInsertOneI64Args Args = ReducerEvent.Reducer.GetAsInsertOneI64(); Reducers->InvokeInsertOneI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_i8")) + if (ReducerName == TEXT("insert_one_i_8")) { FInsertOneI8Args Args = ReducerEvent.Reducer.GetAsInsertOneI8(); Reducers->InvokeInsertOneI8WithArgs(Context, Args); @@ -11660,37 +10106,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertOneTimestampWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u128")) + if (ReducerName == TEXT("insert_one_u_128")) { FInsertOneU128Args Args = ReducerEvent.Reducer.GetAsInsertOneU128(); Reducers->InvokeInsertOneU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u16")) + if (ReducerName == TEXT("insert_one_u_16")) { FInsertOneU16Args Args = ReducerEvent.Reducer.GetAsInsertOneU16(); Reducers->InvokeInsertOneU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u256")) + if (ReducerName == TEXT("insert_one_u_256")) { FInsertOneU256Args Args = ReducerEvent.Reducer.GetAsInsertOneU256(); Reducers->InvokeInsertOneU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u32")) + if (ReducerName == TEXT("insert_one_u_32")) { FInsertOneU32Args Args = ReducerEvent.Reducer.GetAsInsertOneU32(); Reducers->InvokeInsertOneU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u64")) + if (ReducerName == TEXT("insert_one_u_64")) { FInsertOneU64Args Args = ReducerEvent.Reducer.GetAsInsertOneU64(); Reducers->InvokeInsertOneU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_one_u8")) + if (ReducerName == TEXT("insert_one_u_8")) { FInsertOneU8Args Args = ReducerEvent.Reducer.GetAsInsertOneU8(); Reducers->InvokeInsertOneU8WithArgs(Context, Args); @@ -11714,7 +10160,7 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertOptionEveryPrimitiveStructWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_option_i32")) + if (ReducerName == TEXT("insert_option_i_32")) { FInsertOptionI32Args Args = ReducerEvent.Reducer.GetAsInsertOptionI32(); Reducers->InvokeInsertOptionI32WithArgs(Context, Args); @@ -11744,7 +10190,7 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertOptionUuidWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_option_vec_option_i32")) + if (ReducerName == TEXT("insert_option_vec_option_i_32")) { FInsertOptionVecOptionI32Args Args = ReducerEvent.Reducer.GetAsInsertOptionVecOptionI32(); Reducers->InvokeInsertOptionVecOptionI32WithArgs(Context, Args); @@ -11762,37 +10208,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertPkConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i128")) + if (ReducerName == TEXT("insert_pk_i_128")) { FInsertPkI128Args Args = ReducerEvent.Reducer.GetAsInsertPkI128(); Reducers->InvokeInsertPkI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i16")) + if (ReducerName == TEXT("insert_pk_i_16")) { FInsertPkI16Args Args = ReducerEvent.Reducer.GetAsInsertPkI16(); Reducers->InvokeInsertPkI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i256")) + if (ReducerName == TEXT("insert_pk_i_256")) { FInsertPkI256Args Args = ReducerEvent.Reducer.GetAsInsertPkI256(); Reducers->InvokeInsertPkI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i32")) + if (ReducerName == TEXT("insert_pk_i_32")) { FInsertPkI32Args Args = ReducerEvent.Reducer.GetAsInsertPkI32(); Reducers->InvokeInsertPkI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i64")) + if (ReducerName == TEXT("insert_pk_i_64")) { FInsertPkI64Args Args = ReducerEvent.Reducer.GetAsInsertPkI64(); Reducers->InvokeInsertPkI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_i8")) + if (ReducerName == TEXT("insert_pk_i_8")) { FInsertPkI8Args Args = ReducerEvent.Reducer.GetAsInsertPkI8(); Reducers->InvokeInsertPkI8WithArgs(Context, Args); @@ -11816,43 +10262,43 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertPkStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u128")) + if (ReducerName == TEXT("insert_pk_u_128")) { FInsertPkU128Args Args = ReducerEvent.Reducer.GetAsInsertPkU128(); Reducers->InvokeInsertPkU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u16")) + if (ReducerName == TEXT("insert_pk_u_16")) { FInsertPkU16Args Args = ReducerEvent.Reducer.GetAsInsertPkU16(); Reducers->InvokeInsertPkU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u256")) + if (ReducerName == TEXT("insert_pk_u_256")) { FInsertPkU256Args Args = ReducerEvent.Reducer.GetAsInsertPkU256(); Reducers->InvokeInsertPkU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u32")) + if (ReducerName == TEXT("insert_pk_u_32")) { FInsertPkU32Args Args = ReducerEvent.Reducer.GetAsInsertPkU32(); Reducers->InvokeInsertPkU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u32_two")) + if (ReducerName == TEXT("insert_pk_u_32_two")) { FInsertPkU32TwoArgs Args = ReducerEvent.Reducer.GetAsInsertPkU32Two(); Reducers->InvokeInsertPkU32TwoWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u64")) + if (ReducerName == TEXT("insert_pk_u_64")) { FInsertPkU64Args Args = ReducerEvent.Reducer.GetAsInsertPkU64(); Reducers->InvokeInsertPkU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_pk_u8")) + if (ReducerName == TEXT("insert_pk_u_8")) { FInsertPkU8Args Args = ReducerEvent.Reducer.GetAsInsertPkU8(); Reducers->InvokeInsertPkU8WithArgs(Context, Args); @@ -11876,7 +10322,7 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertResultEveryPrimitiveStructStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_result_i32_string")) + if (ReducerName == TEXT("insert_result_i_32_string")) { FInsertResultI32StringArgs Args = ReducerEvent.Reducer.GetAsInsertResultI32String(); Reducers->InvokeInsertResultI32StringWithArgs(Context, Args); @@ -11888,19 +10334,19 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertResultIdentityStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_result_simple_enum_i32")) + if (ReducerName == TEXT("insert_result_simple_enum_i_32")) { FInsertResultSimpleEnumI32Args Args = ReducerEvent.Reducer.GetAsInsertResultSimpleEnumI32(); Reducers->InvokeInsertResultSimpleEnumI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_result_string_i32")) + if (ReducerName == TEXT("insert_result_string_i_32")) { FInsertResultStringI32Args Args = ReducerEvent.Reducer.GetAsInsertResultStringI32(); Reducers->InvokeInsertResultStringI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_result_vec_i32_string")) + if (ReducerName == TEXT("insert_result_vec_i_32_string")) { FInsertResultVecI32StringArgs Args = ReducerEvent.Reducer.GetAsInsertResultVecI32String(); Reducers->InvokeInsertResultVecI32StringWithArgs(Context, Args); @@ -11924,37 +10370,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertUniqueConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i128")) + if (ReducerName == TEXT("insert_unique_i_128")) { FInsertUniqueI128Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI128(); Reducers->InvokeInsertUniqueI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i16")) + if (ReducerName == TEXT("insert_unique_i_16")) { FInsertUniqueI16Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI16(); Reducers->InvokeInsertUniqueI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i256")) + if (ReducerName == TEXT("insert_unique_i_256")) { FInsertUniqueI256Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI256(); Reducers->InvokeInsertUniqueI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i32")) + if (ReducerName == TEXT("insert_unique_i_32")) { FInsertUniqueI32Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI32(); Reducers->InvokeInsertUniqueI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i64")) + if (ReducerName == TEXT("insert_unique_i_64")) { FInsertUniqueI64Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI64(); Reducers->InvokeInsertUniqueI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_i8")) + if (ReducerName == TEXT("insert_unique_i_8")) { FInsertUniqueI8Args Args = ReducerEvent.Reducer.GetAsInsertUniqueI8(); Reducers->InvokeInsertUniqueI8WithArgs(Context, Args); @@ -11972,43 +10418,43 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertUniqueStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u128")) + if (ReducerName == TEXT("insert_unique_u_128")) { FInsertUniqueU128Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU128(); Reducers->InvokeInsertUniqueU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u16")) + if (ReducerName == TEXT("insert_unique_u_16")) { FInsertUniqueU16Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU16(); Reducers->InvokeInsertUniqueU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u256")) + if (ReducerName == TEXT("insert_unique_u_256")) { FInsertUniqueU256Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU256(); Reducers->InvokeInsertUniqueU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u32")) + if (ReducerName == TEXT("insert_unique_u_32")) { FInsertUniqueU32Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU32(); Reducers->InvokeInsertUniqueU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u32_update_pk_u32")) + if (ReducerName == TEXT("insert_unique_u_32_update_pk_u_32")) { FInsertUniqueU32UpdatePkU32Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU32UpdatePkU32(); Reducers->InvokeInsertUniqueU32UpdatePkU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u64")) + if (ReducerName == TEXT("insert_unique_u_64")) { FInsertUniqueU64Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU64(); Reducers->InvokeInsertUniqueU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_unique_u8")) + if (ReducerName == TEXT("insert_unique_u_8")) { FInsertUniqueU8Args Args = ReducerEvent.Reducer.GetAsInsertUniqueU8(); Reducers->InvokeInsertUniqueU8WithArgs(Context, Args); @@ -12062,49 +10508,49 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertVecEveryVecStructWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_f32")) + if (ReducerName == TEXT("insert_vec_f_32")) { FInsertVecF32Args Args = ReducerEvent.Reducer.GetAsInsertVecF32(); Reducers->InvokeInsertVecF32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_f64")) + if (ReducerName == TEXT("insert_vec_f_64")) { FInsertVecF64Args Args = ReducerEvent.Reducer.GetAsInsertVecF64(); Reducers->InvokeInsertVecF64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i128")) + if (ReducerName == TEXT("insert_vec_i_128")) { FInsertVecI128Args Args = ReducerEvent.Reducer.GetAsInsertVecI128(); Reducers->InvokeInsertVecI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i16")) + if (ReducerName == TEXT("insert_vec_i_16")) { FInsertVecI16Args Args = ReducerEvent.Reducer.GetAsInsertVecI16(); Reducers->InvokeInsertVecI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i256")) + if (ReducerName == TEXT("insert_vec_i_256")) { FInsertVecI256Args Args = ReducerEvent.Reducer.GetAsInsertVecI256(); Reducers->InvokeInsertVecI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i32")) + if (ReducerName == TEXT("insert_vec_i_32")) { FInsertVecI32Args Args = ReducerEvent.Reducer.GetAsInsertVecI32(); Reducers->InvokeInsertVecI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i64")) + if (ReducerName == TEXT("insert_vec_i_64")) { FInsertVecI64Args Args = ReducerEvent.Reducer.GetAsInsertVecI64(); Reducers->InvokeInsertVecI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_i8")) + if (ReducerName == TEXT("insert_vec_i_8")) { FInsertVecI8Args Args = ReducerEvent.Reducer.GetAsInsertVecI8(); Reducers->InvokeInsertVecI8WithArgs(Context, Args); @@ -12134,37 +10580,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeInsertVecTimestampWithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u128")) + if (ReducerName == TEXT("insert_vec_u_128")) { FInsertVecU128Args Args = ReducerEvent.Reducer.GetAsInsertVecU128(); Reducers->InvokeInsertVecU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u16")) + if (ReducerName == TEXT("insert_vec_u_16")) { FInsertVecU16Args Args = ReducerEvent.Reducer.GetAsInsertVecU16(); Reducers->InvokeInsertVecU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u256")) + if (ReducerName == TEXT("insert_vec_u_256")) { FInsertVecU256Args Args = ReducerEvent.Reducer.GetAsInsertVecU256(); Reducers->InvokeInsertVecU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u32")) + if (ReducerName == TEXT("insert_vec_u_32")) { FInsertVecU32Args Args = ReducerEvent.Reducer.GetAsInsertVecU32(); Reducers->InvokeInsertVecU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u64")) + if (ReducerName == TEXT("insert_vec_u_64")) { FInsertVecU64Args Args = ReducerEvent.Reducer.GetAsInsertVecU64(); Reducers->InvokeInsertVecU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("insert_vec_u8")) + if (ReducerName == TEXT("insert_vec_u_8")) { FInsertVecU8Args Args = ReducerEvent.Reducer.GetAsInsertVecU8(); Reducers->InvokeInsertVecU8WithArgs(Context, Args); @@ -12212,37 +10658,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeUpdatePkConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i128")) + if (ReducerName == TEXT("update_pk_i_128")) { FUpdatePkI128Args Args = ReducerEvent.Reducer.GetAsUpdatePkI128(); Reducers->InvokeUpdatePkI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i16")) + if (ReducerName == TEXT("update_pk_i_16")) { FUpdatePkI16Args Args = ReducerEvent.Reducer.GetAsUpdatePkI16(); Reducers->InvokeUpdatePkI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i256")) + if (ReducerName == TEXT("update_pk_i_256")) { FUpdatePkI256Args Args = ReducerEvent.Reducer.GetAsUpdatePkI256(); Reducers->InvokeUpdatePkI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i32")) + if (ReducerName == TEXT("update_pk_i_32")) { FUpdatePkI32Args Args = ReducerEvent.Reducer.GetAsUpdatePkI32(); Reducers->InvokeUpdatePkI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i64")) + if (ReducerName == TEXT("update_pk_i_64")) { FUpdatePkI64Args Args = ReducerEvent.Reducer.GetAsUpdatePkI64(); Reducers->InvokeUpdatePkI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_i8")) + if (ReducerName == TEXT("update_pk_i_8")) { FUpdatePkI8Args Args = ReducerEvent.Reducer.GetAsUpdatePkI8(); Reducers->InvokeUpdatePkI8WithArgs(Context, Args); @@ -12266,43 +10712,43 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeUpdatePkStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u128")) + if (ReducerName == TEXT("update_pk_u_128")) { FUpdatePkU128Args Args = ReducerEvent.Reducer.GetAsUpdatePkU128(); Reducers->InvokeUpdatePkU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u16")) + if (ReducerName == TEXT("update_pk_u_16")) { FUpdatePkU16Args Args = ReducerEvent.Reducer.GetAsUpdatePkU16(); Reducers->InvokeUpdatePkU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u256")) + if (ReducerName == TEXT("update_pk_u_256")) { FUpdatePkU256Args Args = ReducerEvent.Reducer.GetAsUpdatePkU256(); Reducers->InvokeUpdatePkU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u32")) + if (ReducerName == TEXT("update_pk_u_32")) { FUpdatePkU32Args Args = ReducerEvent.Reducer.GetAsUpdatePkU32(); Reducers->InvokeUpdatePkU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u32_two")) + if (ReducerName == TEXT("update_pk_u_32_two")) { FUpdatePkU32TwoArgs Args = ReducerEvent.Reducer.GetAsUpdatePkU32Two(); Reducers->InvokeUpdatePkU32TwoWithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u64")) + if (ReducerName == TEXT("update_pk_u_64")) { FUpdatePkU64Args Args = ReducerEvent.Reducer.GetAsUpdatePkU64(); Reducers->InvokeUpdatePkU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_pk_u8")) + if (ReducerName == TEXT("update_pk_u_8")) { FUpdatePkU8Args Args = ReducerEvent.Reducer.GetAsUpdatePkU8(); Reducers->InvokeUpdatePkU8WithArgs(Context, Args); @@ -12326,37 +10772,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeUpdateUniqueConnectionIdWithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i128")) + if (ReducerName == TEXT("update_unique_i_128")) { FUpdateUniqueI128Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI128(); Reducers->InvokeUpdateUniqueI128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i16")) + if (ReducerName == TEXT("update_unique_i_16")) { FUpdateUniqueI16Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI16(); Reducers->InvokeUpdateUniqueI16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i256")) + if (ReducerName == TEXT("update_unique_i_256")) { FUpdateUniqueI256Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI256(); Reducers->InvokeUpdateUniqueI256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i32")) + if (ReducerName == TEXT("update_unique_i_32")) { FUpdateUniqueI32Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI32(); Reducers->InvokeUpdateUniqueI32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i64")) + if (ReducerName == TEXT("update_unique_i_64")) { FUpdateUniqueI64Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI64(); Reducers->InvokeUpdateUniqueI64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_i8")) + if (ReducerName == TEXT("update_unique_i_8")) { FUpdateUniqueI8Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueI8(); Reducers->InvokeUpdateUniqueI8WithArgs(Context, Args); @@ -12374,37 +10820,37 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) Reducers->InvokeUpdateUniqueStringWithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u128")) + if (ReducerName == TEXT("update_unique_u_128")) { FUpdateUniqueU128Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU128(); Reducers->InvokeUpdateUniqueU128WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u16")) + if (ReducerName == TEXT("update_unique_u_16")) { FUpdateUniqueU16Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU16(); Reducers->InvokeUpdateUniqueU16WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u256")) + if (ReducerName == TEXT("update_unique_u_256")) { FUpdateUniqueU256Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU256(); Reducers->InvokeUpdateUniqueU256WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u32")) + if (ReducerName == TEXT("update_unique_u_32")) { FUpdateUniqueU32Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU32(); Reducers->InvokeUpdateUniqueU32WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u64")) + if (ReducerName == TEXT("update_unique_u_64")) { FUpdateUniqueU64Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU64(); Reducers->InvokeUpdateUniqueU64WithArgs(Context, Args); return; } - if (ReducerName == TEXT("update_unique_u8")) + if (ReducerName == TEXT("update_unique_u_8")) { FUpdateUniqueU8Args Args = ReducerEvent.Reducer.GetAsUpdateUniqueU8(); Reducers->InvokeUpdateUniqueU8WithArgs(Context, Args); @@ -12608,7 +11054,13 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime case ESpacetimeDBEventTag::Reducer: { FReducerEvent ReducerEvent = Event.GetAsReducer(); - FReducer Reducer = DecodeReducer(ReducerEvent); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + UE_LOG(LogTemp, Warning, TEXT("Missing typed reducer for request_id %u while building table-update event context; using UnknownTransaction event"), ReducerEvent.RequestId); + BaseEvent = FTestClientEvent::UnknownTransaction(FSpacetimeDBUnit()); + break; + } BaseEvent = FTestClientEvent::Reducer(Reducer); break; } @@ -12625,6 +11077,10 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime BaseEvent = FTestClientEvent::Disconnected(Event.GetAsDisconnected()); break; + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FTestClientEvent::Transaction(Event.GetAsTransaction()); + break; + case ESpacetimeDBEventTag::SubscribeError: BaseEvent = FTestClientEvent::SubscribeError(Event.GetAsSubscribeError()); break; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/CommonTestFunctions.cpp b/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/CommonTestFunctions.cpp index b7805effb9a..a7b5faea2fb 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/CommonTestFunctions.cpp +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Private/Tests/CommonTestFunctions.cpp @@ -161,6 +161,7 @@ void SubscribeAllThen(UDbConnection* Conn, }; TestHelper->OnSubscriptionError = [](FErrorContext Ctx) { + UE_LOG(LogTemp, Error, TEXT("Subscription errored: %s"), *Ctx.Error); checkf(false, TEXT("Subscription errored: %s"), *Ctx.Error); }; @@ -190,6 +191,7 @@ void SubscribeTheseThen(UDbConnection* Conn, }; TestHelper->OnSubscriptionError = [](FErrorContext Ctx) { + UE_LOG(LogTemp, Error, TEXT("Subscription errored: %s"), *Ctx.Error); checkf(false, TEXT("Subscription errored: %s"), *Ctx.Error); }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalEveryPrimitiveStruct.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalEveryPrimitiveStruct.g.h index e012ce243d3..b7d5b704dce 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalEveryPrimitiveStruct.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalEveryPrimitiveStruct.g.h @@ -16,7 +16,7 @@ struct TESTCLIENT_API FTestClientOptionalEveryPrimitiveStruct bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FEveryPrimitiveStructType Value; + FEveryPrimitiveStructType Value = {}; FTestClientOptionalEveryPrimitiveStruct() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalIdentity.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalIdentity.g.h index aba5ea23570..c619be5a59d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalIdentity.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalIdentity.g.h @@ -16,7 +16,7 @@ struct TESTCLIENT_API FTestClientOptionalIdentity bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FSpacetimeDBIdentity Value; + FSpacetimeDBIdentity Value = {}; FTestClientOptionalIdentity() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h index 3fcc5bfdda0..174837ff6c2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalInt32.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FTestClientOptionalInt32 bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - int32 Value; + int32 Value = {}; FTestClientOptionalInt32() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h index 4889acee798..58fa60d6c70 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalSimpleEnum.g.h @@ -16,7 +16,7 @@ struct TESTCLIENT_API FTestClientOptionalSimpleEnum bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - ESimpleEnumType Value; + ESimpleEnumType Value = {}; FTestClientOptionalSimpleEnum() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalString.g.h index 39116b13c1f..410b852dcc0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalString.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FTestClientOptionalString bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FString Value; + FString Value = {}; FTestClientOptionalString() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalUuid.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalUuid.g.h index 64136bc683b..91a88e0fa19 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalUuid.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalUuid.g.h @@ -16,7 +16,7 @@ struct TESTCLIENT_API FTestClientOptionalUuid bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - FSpacetimeDBUuid Value; + FSpacetimeDBUuid Value = {}; FTestClientOptionalUuid() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h index 5b896723bc1..f3a56a3481e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Optionals/TestClientOptionalVecOptionalInt32.g.h @@ -15,7 +15,7 @@ struct TESTCLIENT_API FTestClientOptionalVecOptionalInt32 bool bHasValue = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bHasValue")) - TArray Value; + TArray Value = {}; FTestClientOptionalVecOptionalInt32() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultEveryPrimitiveStructString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultEveryPrimitiveStructString.g.h index b70751e72ea..12d3ea7b444 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultEveryPrimitiveStructString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultEveryPrimitiveStructString.g.h @@ -16,10 +16,10 @@ struct TESTCLIENT_API FTestClientResultEveryPrimitiveStructString bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - FEveryPrimitiveStructType OkValue; + FEveryPrimitiveStructType OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - FString ErrValue; + FString ErrValue = {}; FTestClientResultEveryPrimitiveStructString() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultIdentityString.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultIdentityString.g.h index d4fef91a60d..1b2d9768158 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultIdentityString.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultIdentityString.g.h @@ -16,10 +16,10 @@ struct TESTCLIENT_API FTestClientResultIdentityString bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - FSpacetimeDBIdentity OkValue; + FSpacetimeDBIdentity OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - FString ErrValue; + FString ErrValue = {}; FTestClientResultIdentityString() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultInt32String.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultInt32String.g.h index b8fc02c91e8..7e30c546452 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultInt32String.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultInt32String.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FTestClientResultInt32String bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - int32 OkValue; + int32 OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - FString ErrValue; + FString ErrValue = {}; FTestClientResultInt32String() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultSimpleEnumInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultSimpleEnumInt32.g.h index 1f3a9fff848..52ecf52e3a8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultSimpleEnumInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultSimpleEnumInt32.g.h @@ -16,10 +16,10 @@ struct TESTCLIENT_API FTestClientResultSimpleEnumInt32 bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - ESimpleEnumType OkValue; + ESimpleEnumType OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - int32 ErrValue; + int32 ErrValue = {}; FTestClientResultSimpleEnumInt32() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultStringInt32.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultStringInt32.g.h index b1df79a3245..382f37d16d4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultStringInt32.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultStringInt32.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FTestClientResultStringInt32 bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - FString OkValue; + FString OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - int32 ErrValue; + int32 ErrValue = {}; FTestClientResultStringInt32() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultVecInt32String.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultVecInt32String.g.h index 92cc0108bd6..48707d44f45 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultVecInt32String.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Results/TestClientResultVecInt32String.g.h @@ -15,10 +15,10 @@ struct TESTCLIENT_API FTestClientResultVecInt32String bool bIsOk = false; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "bIsOk")) - TArray OkValue; + TArray OkValue = {}; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SpacetimeDB", meta = (EditCondition = "!bIsOk")) - FString ErrValue; + FString ErrValue = {}; FTestClientResultVecInt32String() = default; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h index 29874d776ae..653735df451 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 1.12.0 (commit 11e258c2f8c9de8f67098f65e3f6a9db32026768). +// This was generated using spacetimedb cli version 2.0.1 (commit 6f8639a69dac2047da00b1fc8550c94ea2505892). #pragma once #include "CoreMinimal.h" @@ -9,7 +9,6 @@ #include "Connection/Callback.h" #include "Connection/DbConnectionBase.h" #include "Connection/DbConnectionBuilder.h" -#include "Connection/SetReducerFlags.h" #include "Connection/Subscription.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "ModuleBindings/Optionals/TestClientOptionalEveryPrimitiveStruct.g.h" @@ -376,7 +375,7 @@ struct TESTCLIENT_API FContextBase { GENERATED_BODY() - FContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {}; + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; FContextBase(UDbConnection* InConn); UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") @@ -385,9 +384,6 @@ struct TESTCLIENT_API FContextBase UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteProcedures* Procedures; @@ -415,9 +411,6 @@ class TESTCLIENT_API UContextBaseBpLib : public UBlueprintFunctionLibrary UFUNCTION(BlueprintPure, Category="SpacetimeDB") static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } - UFUNCTION(BlueprintPure, Category="SpacetimeDB") - static USetReducerFlags* GetSetReducerFlags(const FContextBase& Ctx) { return Ctx.SetReducerFlags; } - static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } UFUNCTION(BlueprintPure, Category="SpacetimeDB") @@ -648,7 +641,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteFromBtreeU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_from_btree_u32"); + Out.ReducerName = TEXT("delete_from_btree_u_32"); return Out; } @@ -712,7 +705,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i128"); + Out.ReducerName = TEXT("delete_pk_i_128"); return Out; } @@ -728,7 +721,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i16"); + Out.ReducerName = TEXT("delete_pk_i_16"); return Out; } @@ -744,7 +737,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i256"); + Out.ReducerName = TEXT("delete_pk_i_256"); return Out; } @@ -760,7 +753,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i32"); + Out.ReducerName = TEXT("delete_pk_i_32"); return Out; } @@ -776,7 +769,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i64"); + Out.ReducerName = TEXT("delete_pk_i_64"); return Out; } @@ -792,7 +785,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_i8"); + Out.ReducerName = TEXT("delete_pk_i_8"); return Out; } @@ -840,7 +833,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u128"); + Out.ReducerName = TEXT("delete_pk_u_128"); return Out; } @@ -856,7 +849,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u16"); + Out.ReducerName = TEXT("delete_pk_u_16"); return Out; } @@ -872,7 +865,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u256"); + Out.ReducerName = TEXT("delete_pk_u_256"); return Out; } @@ -888,7 +881,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u32"); + Out.ReducerName = TEXT("delete_pk_u_32"); return Out; } @@ -904,7 +897,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU32InsertPkU32Two; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u32_insert_pk_u32_two"); + Out.ReducerName = TEXT("delete_pk_u_32_insert_pk_u_32_two"); return Out; } @@ -920,7 +913,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU32Two; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u32_two"); + Out.ReducerName = TEXT("delete_pk_u_32_two"); return Out; } @@ -936,7 +929,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u64"); + Out.ReducerName = TEXT("delete_pk_u_64"); return Out; } @@ -952,7 +945,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeletePkU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_pk_u8"); + Out.ReducerName = TEXT("delete_pk_u_8"); return Out; } @@ -1016,7 +1009,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i128"); + Out.ReducerName = TEXT("delete_unique_i_128"); return Out; } @@ -1032,7 +1025,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i16"); + Out.ReducerName = TEXT("delete_unique_i_16"); return Out; } @@ -1048,7 +1041,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i256"); + Out.ReducerName = TEXT("delete_unique_i_256"); return Out; } @@ -1064,7 +1057,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i32"); + Out.ReducerName = TEXT("delete_unique_i_32"); return Out; } @@ -1080,7 +1073,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i64"); + Out.ReducerName = TEXT("delete_unique_i_64"); return Out; } @@ -1096,7 +1089,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_i8"); + Out.ReducerName = TEXT("delete_unique_i_8"); return Out; } @@ -1144,7 +1137,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u128"); + Out.ReducerName = TEXT("delete_unique_u_128"); return Out; } @@ -1160,7 +1153,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u16"); + Out.ReducerName = TEXT("delete_unique_u_16"); return Out; } @@ -1176,7 +1169,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u256"); + Out.ReducerName = TEXT("delete_unique_u_256"); return Out; } @@ -1192,7 +1185,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u32"); + Out.ReducerName = TEXT("delete_unique_u_32"); return Out; } @@ -1208,7 +1201,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u64"); + Out.ReducerName = TEXT("delete_unique_u_64"); return Out; } @@ -1224,7 +1217,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::DeleteUniqueU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("delete_unique_u8"); + Out.ReducerName = TEXT("delete_unique_u_8"); return Out; } @@ -1272,7 +1265,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertCallUuidV4; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_call_uuid_v4"); + Out.ReducerName = TEXT("insert_call_uuid_v_4"); return Out; } @@ -1288,7 +1281,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertCallUuidV7; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_call_uuid_v7"); + Out.ReducerName = TEXT("insert_call_uuid_v_7"); return Out; } @@ -1432,7 +1425,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertIntoBtreeU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_into_btree_u32"); + Out.ReducerName = TEXT("insert_into_btree_u_32"); return Out; } @@ -1464,7 +1457,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertIntoPkBtreeU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_into_pk_btree_u32"); + Out.ReducerName = TEXT("insert_into_pk_btree_u_32"); return Out; } @@ -1592,7 +1585,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneF32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_f32"); + Out.ReducerName = TEXT("insert_one_f_32"); return Out; } @@ -1608,7 +1601,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneF64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_f64"); + Out.ReducerName = TEXT("insert_one_f_64"); return Out; } @@ -1624,7 +1617,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i128"); + Out.ReducerName = TEXT("insert_one_i_128"); return Out; } @@ -1640,7 +1633,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i16"); + Out.ReducerName = TEXT("insert_one_i_16"); return Out; } @@ -1656,7 +1649,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i256"); + Out.ReducerName = TEXT("insert_one_i_256"); return Out; } @@ -1672,7 +1665,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i32"); + Out.ReducerName = TEXT("insert_one_i_32"); return Out; } @@ -1688,7 +1681,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i64"); + Out.ReducerName = TEXT("insert_one_i_64"); return Out; } @@ -1704,7 +1697,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_i8"); + Out.ReducerName = TEXT("insert_one_i_8"); return Out; } @@ -1784,7 +1777,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u128"); + Out.ReducerName = TEXT("insert_one_u_128"); return Out; } @@ -1800,7 +1793,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u16"); + Out.ReducerName = TEXT("insert_one_u_16"); return Out; } @@ -1816,7 +1809,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u256"); + Out.ReducerName = TEXT("insert_one_u_256"); return Out; } @@ -1832,7 +1825,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u32"); + Out.ReducerName = TEXT("insert_one_u_32"); return Out; } @@ -1848,7 +1841,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u64"); + Out.ReducerName = TEXT("insert_one_u_64"); return Out; } @@ -1864,7 +1857,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOneU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_one_u8"); + Out.ReducerName = TEXT("insert_one_u_8"); return Out; } @@ -1928,7 +1921,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOptionI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_option_i32"); + Out.ReducerName = TEXT("insert_option_i_32"); return Out; } @@ -2008,7 +2001,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertOptionVecOptionI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_option_vec_option_i32"); + Out.ReducerName = TEXT("insert_option_vec_option_i_32"); return Out; } @@ -2056,7 +2049,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i128"); + Out.ReducerName = TEXT("insert_pk_i_128"); return Out; } @@ -2072,7 +2065,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i16"); + Out.ReducerName = TEXT("insert_pk_i_16"); return Out; } @@ -2088,7 +2081,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i256"); + Out.ReducerName = TEXT("insert_pk_i_256"); return Out; } @@ -2104,7 +2097,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i32"); + Out.ReducerName = TEXT("insert_pk_i_32"); return Out; } @@ -2120,7 +2113,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i64"); + Out.ReducerName = TEXT("insert_pk_i_64"); return Out; } @@ -2136,7 +2129,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_i8"); + Out.ReducerName = TEXT("insert_pk_i_8"); return Out; } @@ -2200,7 +2193,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u128"); + Out.ReducerName = TEXT("insert_pk_u_128"); return Out; } @@ -2216,7 +2209,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u16"); + Out.ReducerName = TEXT("insert_pk_u_16"); return Out; } @@ -2232,7 +2225,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u256"); + Out.ReducerName = TEXT("insert_pk_u_256"); return Out; } @@ -2248,7 +2241,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u32"); + Out.ReducerName = TEXT("insert_pk_u_32"); return Out; } @@ -2264,7 +2257,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU32Two; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u32_two"); + Out.ReducerName = TEXT("insert_pk_u_32_two"); return Out; } @@ -2280,7 +2273,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u64"); + Out.ReducerName = TEXT("insert_pk_u_64"); return Out; } @@ -2296,7 +2289,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertPkU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_pk_u8"); + Out.ReducerName = TEXT("insert_pk_u_8"); return Out; } @@ -2360,7 +2353,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertResultI32String; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_result_i32_string"); + Out.ReducerName = TEXT("insert_result_i_32_string"); return Out; } @@ -2392,7 +2385,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertResultSimpleEnumI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_result_simple_enum_i32"); + Out.ReducerName = TEXT("insert_result_simple_enum_i_32"); return Out; } @@ -2408,7 +2401,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertResultStringI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_result_string_i32"); + Out.ReducerName = TEXT("insert_result_string_i_32"); return Out; } @@ -2424,7 +2417,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertResultVecI32String; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_result_vec_i32_string"); + Out.ReducerName = TEXT("insert_result_vec_i_32_string"); return Out; } @@ -2488,7 +2481,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i128"); + Out.ReducerName = TEXT("insert_unique_i_128"); return Out; } @@ -2504,7 +2497,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i16"); + Out.ReducerName = TEXT("insert_unique_i_16"); return Out; } @@ -2520,7 +2513,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i256"); + Out.ReducerName = TEXT("insert_unique_i_256"); return Out; } @@ -2536,7 +2529,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i32"); + Out.ReducerName = TEXT("insert_unique_i_32"); return Out; } @@ -2552,7 +2545,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i64"); + Out.ReducerName = TEXT("insert_unique_i_64"); return Out; } @@ -2568,7 +2561,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_i8"); + Out.ReducerName = TEXT("insert_unique_i_8"); return Out; } @@ -2616,7 +2609,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u128"); + Out.ReducerName = TEXT("insert_unique_u_128"); return Out; } @@ -2632,7 +2625,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u16"); + Out.ReducerName = TEXT("insert_unique_u_16"); return Out; } @@ -2648,7 +2641,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u256"); + Out.ReducerName = TEXT("insert_unique_u_256"); return Out; } @@ -2664,7 +2657,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u32"); + Out.ReducerName = TEXT("insert_unique_u_32"); return Out; } @@ -2680,7 +2673,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU32UpdatePkU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u32_update_pk_u32"); + Out.ReducerName = TEXT("insert_unique_u_32_update_pk_u_32"); return Out; } @@ -2696,7 +2689,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u64"); + Out.ReducerName = TEXT("insert_unique_u_64"); return Out; } @@ -2712,7 +2705,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertUniqueU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_unique_u8"); + Out.ReducerName = TEXT("insert_unique_u_8"); return Out; } @@ -2856,7 +2849,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecF32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_f32"); + Out.ReducerName = TEXT("insert_vec_f_32"); return Out; } @@ -2872,7 +2865,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecF64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_f64"); + Out.ReducerName = TEXT("insert_vec_f_64"); return Out; } @@ -2888,7 +2881,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i128"); + Out.ReducerName = TEXT("insert_vec_i_128"); return Out; } @@ -2904,7 +2897,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i16"); + Out.ReducerName = TEXT("insert_vec_i_16"); return Out; } @@ -2920,7 +2913,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i256"); + Out.ReducerName = TEXT("insert_vec_i_256"); return Out; } @@ -2936,7 +2929,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i32"); + Out.ReducerName = TEXT("insert_vec_i_32"); return Out; } @@ -2952,7 +2945,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i64"); + Out.ReducerName = TEXT("insert_vec_i_64"); return Out; } @@ -2968,7 +2961,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_i8"); + Out.ReducerName = TEXT("insert_vec_i_8"); return Out; } @@ -3048,7 +3041,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u128"); + Out.ReducerName = TEXT("insert_vec_u_128"); return Out; } @@ -3064,7 +3057,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u16"); + Out.ReducerName = TEXT("insert_vec_u_16"); return Out; } @@ -3080,7 +3073,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u256"); + Out.ReducerName = TEXT("insert_vec_u_256"); return Out; } @@ -3096,7 +3089,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u32"); + Out.ReducerName = TEXT("insert_vec_u_32"); return Out; } @@ -3112,7 +3105,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u64"); + Out.ReducerName = TEXT("insert_vec_u_64"); return Out; } @@ -3128,7 +3121,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::InsertVecU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("insert_vec_u8"); + Out.ReducerName = TEXT("insert_vec_u_8"); return Out; } @@ -3256,7 +3249,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i128"); + Out.ReducerName = TEXT("update_pk_i_128"); return Out; } @@ -3272,7 +3265,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i16"); + Out.ReducerName = TEXT("update_pk_i_16"); return Out; } @@ -3288,7 +3281,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i256"); + Out.ReducerName = TEXT("update_pk_i_256"); return Out; } @@ -3304,7 +3297,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i32"); + Out.ReducerName = TEXT("update_pk_i_32"); return Out; } @@ -3320,7 +3313,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i64"); + Out.ReducerName = TEXT("update_pk_i_64"); return Out; } @@ -3336,7 +3329,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_i8"); + Out.ReducerName = TEXT("update_pk_i_8"); return Out; } @@ -3400,7 +3393,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u128"); + Out.ReducerName = TEXT("update_pk_u_128"); return Out; } @@ -3416,7 +3409,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u16"); + Out.ReducerName = TEXT("update_pk_u_16"); return Out; } @@ -3432,7 +3425,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u256"); + Out.ReducerName = TEXT("update_pk_u_256"); return Out; } @@ -3448,7 +3441,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u32"); + Out.ReducerName = TEXT("update_pk_u_32"); return Out; } @@ -3464,7 +3457,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU32Two; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u32_two"); + Out.ReducerName = TEXT("update_pk_u_32_two"); return Out; } @@ -3480,7 +3473,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u64"); + Out.ReducerName = TEXT("update_pk_u_64"); return Out; } @@ -3496,7 +3489,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdatePkU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_pk_u8"); + Out.ReducerName = TEXT("update_pk_u_8"); return Out; } @@ -3560,7 +3553,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI128; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i128"); + Out.ReducerName = TEXT("update_unique_i_128"); return Out; } @@ -3576,7 +3569,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI16; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i16"); + Out.ReducerName = TEXT("update_unique_i_16"); return Out; } @@ -3592,7 +3585,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI256; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i256"); + Out.ReducerName = TEXT("update_unique_i_256"); return Out; } @@ -3608,7 +3601,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI32; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i32"); + Out.ReducerName = TEXT("update_unique_i_32"); return Out; } @@ -3624,7 +3617,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI64; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i64"); + Out.ReducerName = TEXT("update_unique_i_64"); return Out; } @@ -3640,7 +3633,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueI8; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_i8"); + Out.ReducerName = TEXT("update_unique_i_8"); return Out; } @@ -3688,7 +3681,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU128; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u128"); + Out.ReducerName = TEXT("update_unique_u_128"); return Out; } @@ -3704,7 +3697,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU16; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u16"); + Out.ReducerName = TEXT("update_unique_u_16"); return Out; } @@ -3720,7 +3713,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU256; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u256"); + Out.ReducerName = TEXT("update_unique_u_256"); return Out; } @@ -3736,7 +3729,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU32; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u32"); + Out.ReducerName = TEXT("update_unique_u_32"); return Out; } @@ -3752,7 +3745,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU64; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u64"); + Out.ReducerName = TEXT("update_unique_u_64"); return Out; } @@ -3768,7 +3761,7 @@ struct TESTCLIENT_API FReducer FReducer Out; Out.Tag = EReducerTag::UpdateUniqueU8; Out.Data.Set(Value); - Out.ReducerName = TEXT("update_unique_u8"); + Out.ReducerName = TEXT("update_unique_u_8"); return Out; } @@ -6896,6 +6889,14 @@ struct TESTCLIENT_API FTestClientEvent return Obj; } + static FTestClientEvent Transaction(const FSpacetimeDBUnit& Value) + { + FTestClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + static FTestClientEvent SubscribeError(const FString& Value) { FTestClientEvent Obj; @@ -6940,6 +6941,13 @@ struct TESTCLIENT_API FTestClientEvent return MessageData.Get(); } + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } FORCEINLINE FString GetAsSubscribeError() const { @@ -6963,6 +6971,7 @@ struct TESTCLIENT_API FTestClientEvent case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); default: return false; @@ -7005,6 +7014,12 @@ class TESTCLIENT_API UTestClientEventBpLib : public UBlueprintFunctionLibrary return FTestClientEvent::Disconnected(InValue); } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestClientEvent") + static FTestClientEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FTestClientEvent::Transaction(InValue); + } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestClientEvent") static FTestClientEvent SubscribeError(const FString& InValue) { @@ -7029,6 +7044,9 @@ class TESTCLIENT_API UTestClientEventBpLib : public UBlueprintFunctionLibrary UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestClientEvent") static bool IsDisconnected(const FTestClientEvent& Event) { return Event.IsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestClientEvent") + static bool IsTransaction(const FTestClientEvent& Event) { return Event.IsTransaction(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestClientEvent") static bool IsSubscribeError(const FTestClientEvent& Event) { return Event.IsSubscribeError(); } @@ -7059,6 +7077,12 @@ class TESTCLIENT_API UTestClientEventBpLib : public UBlueprintFunctionLibrary return Event.GetAsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestClientEvent") + static FSpacetimeDBUnit GetAsTransaction(const FTestClientEvent& Event) + { + return Event.GetAsTransaction(); + } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestClientEvent") static FString GetAsSubscribeError(const FTestClientEvent& Event) { @@ -7141,409 +7165,6 @@ DECLARE_DYNAMIC_DELEGATE_OneParam( FOnSubscriptionError, FErrorContext, Context); -UCLASS(BlueprintType) -class TESTCLIENT_API USetReducerFlags : public USetReducerFlagsBase -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteFromBtreeU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteLargeTable(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU32InsertPkU32Two(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU32Two(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeletePkUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void DeleteUniqueUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallTimestamp(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallUuidV4(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallUuidV7(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerOneConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerOneIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerPkConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerPkIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerUniqueConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerUniqueIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerVecConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertCallerVecIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertIntoBtreeU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertIntoIndexedSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertIntoPkBtreeU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertLargeTable(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneByteStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneEnumWithPayload(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneEveryPrimitiveStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneEveryVecStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneF32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneF64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneTimestamp(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneUnitStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOneUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionEveryPrimitiveStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertOptionVecOptionI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU32Two(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPkUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertPrimitivesAsStrings(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultEveryPrimitiveStructString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultI32String(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultIdentityString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultSimpleEnumI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultStringI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertResultVecI32String(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertTableHoldsTable(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU32UpdatePkU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUniqueUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertUser(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecByteStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecEnumWithPayload(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecEveryPrimitiveStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecEveryVecStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecF32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecF64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecTimestamp(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecUnitStruct(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void InsertVecUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void NoOpSucceeds(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void SortedUuidsInsert(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateIndexedSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkSimpleEnum(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU32Two(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdatePkUuid(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueBool(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueConnectionId(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueI8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueIdentity(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueString(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU128(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU16(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU256(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU32(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU64(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueU8(ECallReducerFlags Flag); - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void UpdateUniqueUuid(ECallReducerFlags Flag); - -}; - // RemoteTables class UCLASS(BlueprintType) class TESTCLIENT_API URemoteTables : public UObject @@ -10722,9 +10343,6 @@ class TESTCLIENT_API URemoteReducers : public UObject UPROPERTY() class UDbConnection* Conn; - - UPROPERTY() - USetReducerFlags* SetCallReducerFlags; }; // RemoteProcedures class @@ -10859,9 +10477,6 @@ class TESTCLIENT_API UDbConnection : public UDbConnectionBase UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteProcedures* Procedures; @@ -10913,5 +10528,15 @@ class TESTCLIENT_API UDbConnection : public UDbConnectionBase virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; // Override the procedure event failed handler virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/BtreeU32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/BtreeU32Table.g.h index 067e94c0618..a335ae737f4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/BtreeU32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/BtreeU32Table.g.h @@ -57,7 +57,7 @@ class TESTCLIENT_API UBtreeU32Table : public URemoteTable void PostInitialize(); - /** Update function for btree_u32 table*/ + /** Update function for btree_u_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -95,7 +95,7 @@ class TESTCLIENT_API UBtreeU32Table : public URemoteTable FOnBtreeU32Delete OnDelete; private: - const FString TableName = TEXT("btree_u32"); + const FString TableName = TEXT("btree_u_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF32Table.g.h index 789c5dafdc6..356a0a49cb1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneF32Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_f32 table*/ + /** Update function for one_f_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneF32Table : public URemoteTable FOnOneF32Delete OnDelete; private: - const FString TableName = TEXT("one_f32"); + const FString TableName = TEXT("one_f_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF64Table.g.h index 3dfb09c8b20..fdc739700cf 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneF64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneF64Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_f64 table*/ + /** Update function for one_f_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneF64Table : public URemoteTable FOnOneF64Delete OnDelete; private: - const FString TableName = TEXT("one_f64"); + const FString TableName = TEXT("one_f_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI128Table.g.h index dc370d4929f..8d434832c4e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI128Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI128Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i128 table*/ + /** Update function for one_i_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI128Table : public URemoteTable FOnOneI128Delete OnDelete; private: - const FString TableName = TEXT("one_i128"); + const FString TableName = TEXT("one_i_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI16Table.g.h index 0f26c456dbf..d3a334476b0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI16Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI16Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i16 table*/ + /** Update function for one_i_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI16Table : public URemoteTable FOnOneI16Delete OnDelete; private: - const FString TableName = TEXT("one_i16"); + const FString TableName = TEXT("one_i_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI256Table.g.h index aee4aedfb92..b66a8445eb1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI256Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI256Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i256 table*/ + /** Update function for one_i_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI256Table : public URemoteTable FOnOneI256Delete OnDelete; private: - const FString TableName = TEXT("one_i256"); + const FString TableName = TEXT("one_i_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI32Table.g.h index ed497686cd7..ca36ef53a53 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i32 table*/ + /** Update function for one_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI32Table : public URemoteTable FOnOneI32Delete OnDelete; private: - const FString TableName = TEXT("one_i32"); + const FString TableName = TEXT("one_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI64Table.g.h index dfb550e5662..6430333d295 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI64Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i64 table*/ + /** Update function for one_i_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI64Table : public URemoteTable FOnOneI64Delete OnDelete; private: - const FString TableName = TEXT("one_i64"); + const FString TableName = TEXT("one_i_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI8Table.g.h index f41b8bed6d5..aa035b2c9f1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneI8Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneI8Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_i8 table*/ + /** Update function for one_i_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneI8Table : public URemoteTable FOnOneI8Delete OnDelete; private: - const FString TableName = TEXT("one_i8"); + const FString TableName = TEXT("one_i_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU128Table.g.h index 0ccaa72f21f..d3c4ec8db55 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU128Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU128Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u128 table*/ + /** Update function for one_u_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU128Table : public URemoteTable FOnOneU128Delete OnDelete; private: - const FString TableName = TEXT("one_u128"); + const FString TableName = TEXT("one_u_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU16Table.g.h index 4501b0e7d59..0039e4b851c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU16Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU16Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u16 table*/ + /** Update function for one_u_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU16Table : public URemoteTable FOnOneU16Delete OnDelete; private: - const FString TableName = TEXT("one_u16"); + const FString TableName = TEXT("one_u_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU256Table.g.h index ad10a3b4727..35ba0eebb24 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU256Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU256Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u256 table*/ + /** Update function for one_u_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU256Table : public URemoteTable FOnOneU256Delete OnDelete; private: - const FString TableName = TEXT("one_u256"); + const FString TableName = TEXT("one_u_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU32Table.g.h index cbdecbcd491..b6c6c5ee232 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU32Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u32 table*/ + /** Update function for one_u_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU32Table : public URemoteTable FOnOneU32Delete OnDelete; private: - const FString TableName = TEXT("one_u32"); + const FString TableName = TEXT("one_u_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU64Table.g.h index 14ce8017a71..adea19b3bf0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU64Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u64 table*/ + /** Update function for one_u_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU64Table : public URemoteTable FOnOneU64Delete OnDelete; private: - const FString TableName = TEXT("one_u64"); + const FString TableName = TEXT("one_u_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU8Table.g.h index 128f8eb24cb..26062a9d79d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OneU8Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOneU8Table : public URemoteTable public: void PostInitialize(); - /** Update function for one_u8 table*/ + /** Update function for one_u_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOneU8Table : public URemoteTable FOnOneU8Delete OnDelete; private: - const FString TableName = TEXT("one_u8"); + const FString TableName = TEXT("one_u_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionI32Table.g.h index d404a836656..8807f71b633 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOptionI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for option_i32 table*/ + /** Update function for option_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOptionI32Table : public URemoteTable FOnOptionI32Delete OnDelete; private: - const FString TableName = TEXT("option_i32"); + const FString TableName = TEXT("option_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionVecOptionI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionVecOptionI32Table.g.h index be51577a72d..c36d54cc025 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionVecOptionI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/OptionVecOptionI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UOptionVecOptionI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for option_vec_option_i32 table*/ + /** Update function for option_vec_option_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UOptionVecOptionI32Table : public URemoteTable FOnOptionVecOptionI32Delete OnDelete; private: - const FString TableName = TEXT("option_vec_option_i32"); + const FString TableName = TEXT("option_vec_option_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI128Table.g.h index 0e1135a0b79..54351d3758a 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI128Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI128Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i128 table*/ + /** Update function for pk_i_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI128Table : public URemoteTable FOnPkI128Delete OnDelete; private: - const FString TableName = TEXT("pk_i128"); + const FString TableName = TEXT("pk_i_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI16Table.g.h index 11c67eb11e2..b4bc0a01602 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI16Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI16Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i16 table*/ + /** Update function for pk_i_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI16Table : public URemoteTable FOnPkI16Delete OnDelete; private: - const FString TableName = TEXT("pk_i16"); + const FString TableName = TEXT("pk_i_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI256Table.g.h index 54ac7cd2f4d..95c55e80bc3 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI256Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI256Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i256 table*/ + /** Update function for pk_i_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI256Table : public URemoteTable FOnPkI256Delete OnDelete; private: - const FString TableName = TEXT("pk_i256"); + const FString TableName = TEXT("pk_i_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI32Table.g.h index 6bfc39baee2..805711689ef 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI32Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI32Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i32 table*/ + /** Update function for pk_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI32Table : public URemoteTable FOnPkI32Delete OnDelete; private: - const FString TableName = TEXT("pk_i32"); + const FString TableName = TEXT("pk_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI64Table.g.h index c7fb8ceff7e..40e89be35b0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI64Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI64Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i64 table*/ + /** Update function for pk_i_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI64Table : public URemoteTable FOnPkI64Delete OnDelete; private: - const FString TableName = TEXT("pk_i64"); + const FString TableName = TEXT("pk_i_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI8Table.g.h index f33af5b4e60..8a03f4a049b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkI8Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkI8Table : public URemoteTable void PostInitialize(); - /** Update function for pk_i8 table*/ + /** Update function for pk_i_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkI8Table : public URemoteTable FOnPkI8Delete OnDelete; private: - const FString TableName = TEXT("pk_i8"); + const FString TableName = TEXT("pk_i_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU128Table.g.h index 898f2e0f36b..069815b49d6 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU128Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU128Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u128 table*/ + /** Update function for pk_u_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU128Table : public URemoteTable FOnPkU128Delete OnDelete; private: - const FString TableName = TEXT("pk_u128"); + const FString TableName = TEXT("pk_u_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU16Table.g.h index bf84e9c983a..2ddeb4be777 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU16Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU16Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u16 table*/ + /** Update function for pk_u_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU16Table : public URemoteTable FOnPkU16Delete OnDelete; private: - const FString TableName = TEXT("pk_u16"); + const FString TableName = TEXT("pk_u_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU256Table.g.h index 08c20ff62c8..b1d09deed13 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU256Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU256Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u256 table*/ + /** Update function for pk_u_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU256Table : public URemoteTable FOnPkU256Delete OnDelete; private: - const FString TableName = TEXT("pk_u256"); + const FString TableName = TEXT("pk_u_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32Table.g.h index a789c124636..d982facd05e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU32Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u32 table*/ + /** Update function for pk_u_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU32Table : public URemoteTable FOnPkU32Delete OnDelete; private: - const FString TableName = TEXT("pk_u32"); + const FString TableName = TEXT("pk_u_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32TwoTable.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32TwoTable.g.h index c339273c53f..c15593a2475 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32TwoTable.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU32TwoTable.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU32TwoTable : public URemoteTable void PostInitialize(); - /** Update function for pk_u32_two table*/ + /** Update function for pk_u_32_two table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU32TwoTable : public URemoteTable FOnPkU32TwoDelete OnDelete; private: - const FString TableName = TEXT("pk_u32_two"); + const FString TableName = TEXT("pk_u_32_two"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU64Table.g.h index 03b049c5649..d45897bb3ac 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU64Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU64Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u64 table*/ + /** Update function for pk_u_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU64Table : public URemoteTable FOnPkU64Delete OnDelete; private: - const FString TableName = TEXT("pk_u64"); + const FString TableName = TEXT("pk_u_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU8Table.g.h index be15b181216..d5dc231c9a2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/PkU8Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UPkU8Table : public URemoteTable void PostInitialize(); - /** Update function for pk_u8 table*/ + /** Update function for pk_u_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UPkU8Table : public URemoteTable FOnPkU8Delete OnDelete; private: - const FString TableName = TEXT("pk_u8"); + const FString TableName = TEXT("pk_u_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultI32StringTable.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultI32StringTable.g.h index 89b91d58575..6db46f146eb 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultI32StringTable.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultI32StringTable.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UResultI32StringTable : public URemoteTable public: void PostInitialize(); - /** Update function for result_i32_string table*/ + /** Update function for result_i_32_string table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UResultI32StringTable : public URemoteTable FOnResultI32StringDelete OnDelete; private: - const FString TableName = TEXT("result_i32_string"); + const FString TableName = TEXT("result_i_32_string"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultSimpleEnumI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultSimpleEnumI32Table.g.h index 793cdb36fc6..4b96a95de3b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultSimpleEnumI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultSimpleEnumI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UResultSimpleEnumI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for result_simple_enum_i32 table*/ + /** Update function for result_simple_enum_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UResultSimpleEnumI32Table : public URemoteTable FOnResultSimpleEnumI32Delete OnDelete; private: - const FString TableName = TEXT("result_simple_enum_i32"); + const FString TableName = TEXT("result_simple_enum_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultStringI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultStringI32Table.g.h index f1b5903f9e0..513f34fa5b9 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultStringI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultStringI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UResultStringI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for result_string_i32 table*/ + /** Update function for result_string_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UResultStringI32Table : public URemoteTable FOnResultStringI32Delete OnDelete; private: - const FString TableName = TEXT("result_string_i32"); + const FString TableName = TEXT("result_string_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultVecI32StringTable.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultVecI32StringTable.g.h index cfe2096b6ab..9bb989777c0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultVecI32StringTable.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/ResultVecI32StringTable.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UResultVecI32StringTable : public URemoteTable public: void PostInitialize(); - /** Update function for result_vec_i32_string table*/ + /** Update function for result_vec_i_32_string table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UResultVecI32StringTable : public URemoteTable FOnResultVecI32StringDelete OnDelete; private: - const FString TableName = TEXT("result_vec_i32_string"); + const FString TableName = TEXT("result_vec_i_32_string"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI128Table.g.h index 478c18396c4..69e8fa44459 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI128Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI128Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i128 table*/ + /** Update function for unique_i_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI128Table : public URemoteTable FOnUniqueI128Delete OnDelete; private: - const FString TableName = TEXT("unique_i128"); + const FString TableName = TEXT("unique_i_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI16Table.g.h index 19eed2f3e1f..089fd8288ed 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI16Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI16Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i16 table*/ + /** Update function for unique_i_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI16Table : public URemoteTable FOnUniqueI16Delete OnDelete; private: - const FString TableName = TEXT("unique_i16"); + const FString TableName = TEXT("unique_i_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI256Table.g.h index cd361f925f7..bade2cef4d8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI256Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI256Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i256 table*/ + /** Update function for unique_i_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI256Table : public URemoteTable FOnUniqueI256Delete OnDelete; private: - const FString TableName = TEXT("unique_i256"); + const FString TableName = TEXT("unique_i_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI32Table.g.h index aada4f1ff3e..6422e86d25a 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI32Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI32Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i32 table*/ + /** Update function for unique_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI32Table : public URemoteTable FOnUniqueI32Delete OnDelete; private: - const FString TableName = TEXT("unique_i32"); + const FString TableName = TEXT("unique_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI64Table.g.h index 764acab9cc8..b59d8424587 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI64Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI64Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i64 table*/ + /** Update function for unique_i_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI64Table : public URemoteTable FOnUniqueI64Delete OnDelete; private: - const FString TableName = TEXT("unique_i64"); + const FString TableName = TEXT("unique_i_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI8Table.g.h index aa7727c19d5..9a062ac349a 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueI8Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueI8Table : public URemoteTable void PostInitialize(); - /** Update function for unique_i8 table*/ + /** Update function for unique_i_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueI8Table : public URemoteTable FOnUniqueI8Delete OnDelete; private: - const FString TableName = TEXT("unique_i8"); + const FString TableName = TEXT("unique_i_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU128Table.g.h index 2677d84d330..94d3264339d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU128Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU128Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u128 table*/ + /** Update function for unique_u_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU128Table : public URemoteTable FOnUniqueU128Delete OnDelete; private: - const FString TableName = TEXT("unique_u128"); + const FString TableName = TEXT("unique_u_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU16Table.g.h index aea33985c3d..aff7315996c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU16Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU16Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u16 table*/ + /** Update function for unique_u_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU16Table : public URemoteTable FOnUniqueU16Delete OnDelete; private: - const FString TableName = TEXT("unique_u16"); + const FString TableName = TEXT("unique_u_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU256Table.g.h index 21ddf618b21..c194b4419a7 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU256Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU256Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u256 table*/ + /** Update function for unique_u_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU256Table : public URemoteTable FOnUniqueU256Delete OnDelete; private: - const FString TableName = TEXT("unique_u256"); + const FString TableName = TEXT("unique_u_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU32Table.g.h index c79c59b8e88..7cd143b611d 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU32Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU32Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u32 table*/ + /** Update function for unique_u_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU32Table : public URemoteTable FOnUniqueU32Delete OnDelete; private: - const FString TableName = TEXT("unique_u32"); + const FString TableName = TEXT("unique_u_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU64Table.g.h index 3d022c15183..80cbcaebaa1 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU64Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU64Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u64 table*/ + /** Update function for unique_u_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU64Table : public URemoteTable FOnUniqueU64Delete OnDelete; private: - const FString TableName = TEXT("unique_u64"); + const FString TableName = TEXT("unique_u_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU8Table.g.h index e07ea119744..5e38895c5d2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/UniqueU8Table.g.h @@ -60,7 +60,7 @@ class TESTCLIENT_API UUniqueU8Table : public URemoteTable void PostInitialize(); - /** Update function for unique_u8 table*/ + /** Update function for unique_u_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -98,7 +98,7 @@ class TESTCLIENT_API UUniqueU8Table : public URemoteTable FOnUniqueU8Delete OnDelete; private: - const FString TableName = TEXT("unique_u8"); + const FString TableName = TEXT("unique_u_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF32Table.g.h index fa09dc1ffa5..345cece0c99 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecF32Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_f32 table*/ + /** Update function for vec_f_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecF32Table : public URemoteTable FOnVecF32Delete OnDelete; private: - const FString TableName = TEXT("vec_f32"); + const FString TableName = TEXT("vec_f_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF64Table.g.h index 8eb0e28d7fd..4e0b736f6a7 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecF64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecF64Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_f64 table*/ + /** Update function for vec_f_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecF64Table : public URemoteTable FOnVecF64Delete OnDelete; private: - const FString TableName = TEXT("vec_f64"); + const FString TableName = TEXT("vec_f_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI128Table.g.h index 95485adaee0..882ed6b4883 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI128Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI128Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i128 table*/ + /** Update function for vec_i_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI128Table : public URemoteTable FOnVecI128Delete OnDelete; private: - const FString TableName = TEXT("vec_i128"); + const FString TableName = TEXT("vec_i_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI16Table.g.h index a793d1d42c1..5d50b9b67d0 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI16Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI16Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i16 table*/ + /** Update function for vec_i_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI16Table : public URemoteTable FOnVecI16Delete OnDelete; private: - const FString TableName = TEXT("vec_i16"); + const FString TableName = TEXT("vec_i_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI256Table.g.h index d61ef4e5ad5..2bf83deb384 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI256Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI256Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i256 table*/ + /** Update function for vec_i_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI256Table : public URemoteTable FOnVecI256Delete OnDelete; private: - const FString TableName = TEXT("vec_i256"); + const FString TableName = TEXT("vec_i_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI32Table.g.h index 7953feef881..2962afe1264 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI32Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i32 table*/ + /** Update function for vec_i_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI32Table : public URemoteTable FOnVecI32Delete OnDelete; private: - const FString TableName = TEXT("vec_i32"); + const FString TableName = TEXT("vec_i_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI64Table.g.h index 4493a09f494..d9f2401a3d5 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI64Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i64 table*/ + /** Update function for vec_i_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI64Table : public URemoteTable FOnVecI64Delete OnDelete; private: - const FString TableName = TEXT("vec_i64"); + const FString TableName = TEXT("vec_i_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI8Table.g.h index ea0d271ffe6..afb4c47813c 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecI8Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecI8Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_i8 table*/ + /** Update function for vec_i_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecI8Table : public URemoteTable FOnVecI8Delete OnDelete; private: - const FString TableName = TEXT("vec_i8"); + const FString TableName = TEXT("vec_i_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU128Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU128Table.g.h index 6ffec05f26e..6229d875c28 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU128Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU128Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU128Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u128 table*/ + /** Update function for vec_u_128 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU128Table : public URemoteTable FOnVecU128Delete OnDelete; private: - const FString TableName = TEXT("vec_u128"); + const FString TableName = TEXT("vec_u_128"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU16Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU16Table.g.h index c30d06a29b8..193a9682aa4 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU16Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU16Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU16Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u16 table*/ + /** Update function for vec_u_16 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU16Table : public URemoteTable FOnVecU16Delete OnDelete; private: - const FString TableName = TEXT("vec_u16"); + const FString TableName = TEXT("vec_u_16"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU256Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU256Table.g.h index 03939aceba1..873c966635e 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU256Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU256Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU256Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u256 table*/ + /** Update function for vec_u_256 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU256Table : public URemoteTable FOnVecU256Delete OnDelete; private: - const FString TableName = TEXT("vec_u256"); + const FString TableName = TEXT("vec_u_256"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU32Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU32Table.g.h index eac904322e1..075385b23f2 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU32Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU32Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU32Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u32 table*/ + /** Update function for vec_u_32 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU32Table : public URemoteTable FOnVecU32Delete OnDelete; private: - const FString TableName = TEXT("vec_u32"); + const FString TableName = TEXT("vec_u_32"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU64Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU64Table.g.h index c52cae6bb4d..6156442ba3b 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU64Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU64Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU64Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u64 table*/ + /** Update function for vec_u_64 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU64Table : public URemoteTable FOnVecU64Delete OnDelete; private: - const FString TableName = TEXT("vec_u64"); + const FString TableName = TEXT("vec_u_64"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU8Table.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU8Table.g.h index d3602f7adce..21c48b3f05f 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU8Table.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Tables/VecU8Table.g.h @@ -20,7 +20,7 @@ class TESTCLIENT_API UVecU8Table : public URemoteTable public: void PostInitialize(); - /** Update function for vec_u8 table*/ + /** Update function for vec_u_8 table*/ FTableAppliedDiff Update(TArray> InsertsRef, TArray> DeletesRef); /** Number of subscribed rows currently in the cache */ @@ -58,7 +58,7 @@ class TESTCLIENT_API UVecU8Table : public URemoteTable FOnVecU8Delete OnDelete; private: - const FString TableName = TEXT("vec_u8"); + const FString TableName = TEXT("vec_u_8"); TSharedPtr> Data; }; diff --git a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h index 79eca6d6c3b..1c4ef086cf8 100644 --- a/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h +++ b/sdks/unreal/tests/TestClient/Source/TestClient/Public/ModuleBindings/Types/EnumWithPayloadType.g.h @@ -4,9 +4,9 @@ #pragma once #include "CoreMinimal.h" #include "BSATN/UESpacetimeDB.h" -#include "Types/Builtins.h" #include "ModuleBindings/Types/SimpleEnumType.g.h" #include "Kismet/BlueprintFunctionLibrary.h" +#include "Types/Builtins.h" #include "EnumWithPayloadType.g.generated.h" UENUM(BlueprintType) @@ -46,7 +46,7 @@ struct TESTCLIENT_API FEnumWithPayloadType public: FEnumWithPayloadType() = default; - TVariant, TArray, uint8, int16, TArray, FSpacetimeDBIdentity, FString, uint16, uint32, FSpacetimeDBUInt128, FSpacetimeDBInt128, FSpacetimeDBConnectionId, int8, TArray, double, int32, bool, FSpacetimeDBUInt256> MessageData; + TVariant, uint32, int16, uint8, FSpacetimeDBInt128, FString, int64, uint64, int32, double, FSpacetimeDBInt256, TArray, bool, int8, uint16, FSpacetimeDBUInt128, float, FSpacetimeDBUInt256, FSpacetimeDBConnectionId, TArray, TArray, FSpacetimeDBTimestamp> MessageData; UPROPERTY(BlueprintReadOnly) EEnumWithPayloadTag Tag = static_cast(0); diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp index a6fb7dbf8f0..c08e7fea1dd 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Private/ModuleBindings/SpacetimeDBClient.g.cpp @@ -8,28 +8,12 @@ #include "ModuleBindings/Tables/PkUuidTable.g.h" #include "ModuleBindings/Tables/ProcInsertsIntoTable.g.h" -static FReducer DecodeReducer(const FReducerEvent& Event) -{ - const FString& ReducerName = Event.ReducerCall.ReducerName; - - if (ReducerName == TEXT("schedule_proc")) - { - FScheduleProcArgs Args = UE::SpacetimeDB::Deserialize(Event.ReducerCall.Args); - return FReducer::ScheduleProc(Args); - } - - return FReducer(); -} - UDbConnection::UDbConnection(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { - SetReducerFlags = ObjectInitializer.CreateDefaultSubobject(this, TEXT("SetReducerFlags")); - Db = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteTables")); Db->Initialize(); Reducers = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteReducers")); - Reducers->SetCallReducerFlags = SetReducerFlags; Reducers->Conn = this; Procedures = ObjectInitializer.CreateDefaultSubobject(this, TEXT("RemoteProcedures")); @@ -44,7 +28,6 @@ FContextBase::FContextBase(UDbConnection* InConn) { Db = InConn->Db; Reducers = InConn->Reducers; - SetReducerFlags = InConn->SetReducerFlags; Procedures = InConn->Procedures; Conn = InConn; } @@ -85,11 +68,6 @@ void URemoteTables::Initialize() /**/ } -void USetReducerFlags::ScheduleProc(ECallReducerFlags Flag) -{ - FlagMap.Add("ScheduleProc", Flag); -} - void URemoteReducers::ScheduleProc() { if (!Conn) @@ -98,7 +76,9 @@ void URemoteReducers::ScheduleProc() return; } - Conn->CallReducerTyped(TEXT("schedule_proc"), FScheduleProcArgs(), SetCallReducerFlags); + FScheduleProcArgs ReducerArgs; + const uint32 RequestId = Conn->CallReducerTyped(TEXT("schedule_proc"), ReducerArgs); + if (RequestId != 0) { Conn->RegisterPendingTypedReducer(RequestId, FReducer::ScheduleProc(ReducerArgs)); } } bool URemoteReducers::InvokeScheduleProc(const FReducerEventContext& Context, const UScheduleProcReducer* Args) @@ -459,11 +439,45 @@ void UDbConnection::OnUnhandledProcedureErrorHandler(const FProcedureEventContex } } +void UDbConnection::RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer) +{ + Reducer.RequestId = RequestId; + PendingTypedReducers.Add(RequestId, MoveTemp(Reducer)); +} + +bool UDbConnection::TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const +{ + if (const FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + return true; + } + return false; +} + +bool UDbConnection::TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer) +{ + if (FReducer* Found = PendingTypedReducers.Find(RequestId)) + { + OutReducer = *Found; + PendingTypedReducers.Remove(RequestId); + return true; + } + return false; +} + void UDbConnection::ReducerEvent(const FReducerEvent& Event) { if (!Reducers) { return; } - FReducer DecodedReducer = DecodeReducer(Event); + FReducer DecodedReducer; + if (!TryTakePendingTypedReducer(Event.RequestId, DecodedReducer)) + { + const FString ErrorMessage = FString::Printf(TEXT("Reducer result for unknown request_id %u"), Event.RequestId); + UE_LOG(LogTemp, Error, TEXT("%s"), *ErrorMessage); + ReducerEventFailed(Event, ErrorMessage); + return; + } FTestProcClientReducerEvent ReducerEvent; ReducerEvent.CallerConnectionId = Event.CallerConnectionId; @@ -475,8 +489,8 @@ void UDbConnection::ReducerEvent(const FReducerEvent& Event) FReducerEventContext Context(this, ReducerEvent); - // Use hardcoded string matching for reducer dispatching - const FString& ReducerName = Event.ReducerCall.ReducerName; + // Dispatch by typed reducer metadata + const FString& ReducerName = ReducerEvent.Reducer.ReducerName; if (ReducerName == TEXT("schedule_proc")) { @@ -676,7 +690,13 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime case ESpacetimeDBEventTag::Reducer: { FReducerEvent ReducerEvent = Event.GetAsReducer(); - FReducer Reducer = DecodeReducer(ReducerEvent); + FReducer Reducer; + if (!TryGetPendingTypedReducer(ReducerEvent.RequestId, Reducer)) + { + UE_LOG(LogTemp, Warning, TEXT("Missing typed reducer for request_id %u while building table-update event context; using UnknownTransaction event"), ReducerEvent.RequestId); + BaseEvent = FTestProcClientEvent::UnknownTransaction(FSpacetimeDBUnit()); + break; + } BaseEvent = FTestProcClientEvent::Reducer(Reducer); break; } @@ -693,6 +713,10 @@ void UDbConnection::DbUpdate(const FDatabaseUpdateType& Update, const FSpacetime BaseEvent = FTestProcClientEvent::Disconnected(Event.GetAsDisconnected()); break; + case ESpacetimeDBEventTag::Transaction: + BaseEvent = FTestProcClientEvent::Transaction(Event.GetAsTransaction()); + break; + case ESpacetimeDBEventTag::SubscribeError: BaseEvent = FTestProcClientEvent::SubscribeError(Event.GetAsSubscribeError()); break; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h index ecfb5d2d4b3..3269ea4c120 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/SpacetimeDBClient.g.h @@ -1,7 +1,7 @@ // THIS FILE IS AUTOMATICALLY GENERATED BY SPACETIMEDB. EDITS TO THIS FILE // WILL NOT BE SAVED. MODIFY TABLES IN YOUR MODULE SOURCE CODE INSTEAD. -// This was generated using spacetimedb cli version 1.12.0 (commit 11e258c2f8c9de8f67098f65e3f6a9db32026768). +// This was generated using spacetimedb cli version 2.0.1 (commit 6f8639a69dac2047da00b1fc8550c94ea2505892). #pragma once #include "CoreMinimal.h" @@ -9,7 +9,6 @@ #include "Connection/Callback.h" #include "Connection/DbConnectionBase.h" #include "Connection/DbConnectionBuilder.h" -#include "Connection/SetReducerFlags.h" #include "Connection/Subscription.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "ModuleBindings/Procedures/InsertWithTxCommit.g.h" @@ -66,7 +65,7 @@ struct TESTPROCCLIENT_API FContextBase { GENERATED_BODY() - FContextBase() : Db(nullptr), Reducers(nullptr), SetReducerFlags(nullptr), Procedures(nullptr), Conn(nullptr) {}; + FContextBase() : Db(nullptr), Reducers(nullptr), Procedures(nullptr), Conn(nullptr) {}; FContextBase(UDbConnection* InConn); UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") @@ -75,9 +74,6 @@ struct TESTPROCCLIENT_API FContextBase UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category = "SpacetimeDB") URemoteProcedures* Procedures; @@ -105,9 +101,6 @@ class TESTPROCCLIENT_API UContextBaseBpLib : public UBlueprintFunctionLibrary UFUNCTION(BlueprintPure, Category="SpacetimeDB") static URemoteReducers* GetReducers(const FContextBase& Ctx) { return Ctx.Reducers; } - UFUNCTION(BlueprintPure, Category="SpacetimeDB") - static USetReducerFlags* GetSetReducerFlags(const FContextBase& Ctx) { return Ctx.SetReducerFlags; } - static URemoteProcedures* GetProcedures(const FContextBase& Ctx) { return Ctx.Procedures; } UFUNCTION(BlueprintPure, Category="SpacetimeDB") @@ -674,6 +667,14 @@ struct TESTPROCCLIENT_API FTestProcClientEvent return Obj; } + static FTestProcClientEvent Transaction(const FSpacetimeDBUnit& Value) + { + FTestProcClientEvent Obj; + Obj.Tag = ESpacetimeDBEventTag::Transaction; + Obj.MessageData.Set(Value); + return Obj; + } + static FTestProcClientEvent SubscribeError(const FString& Value) { FTestProcClientEvent Obj; @@ -718,6 +719,13 @@ struct TESTPROCCLIENT_API FTestProcClientEvent return MessageData.Get(); } + FORCEINLINE bool IsTransaction() const { return Tag == ESpacetimeDBEventTag::Transaction; } + FORCEINLINE FSpacetimeDBUnit GetAsTransaction() const + { + ensureMsgf(IsTransaction(), TEXT("MessageData does not hold Transaction!")); + return MessageData.Get(); + } + FORCEINLINE bool IsSubscribeError() const { return Tag == ESpacetimeDBEventTag::SubscribeError; } FORCEINLINE FString GetAsSubscribeError() const { @@ -741,6 +749,7 @@ struct TESTPROCCLIENT_API FTestProcClientEvent case ESpacetimeDBEventTag::SubscribeApplied: return GetAsSubscribeApplied() == Other.GetAsSubscribeApplied(); case ESpacetimeDBEventTag::UnsubscribeApplied: return GetAsUnsubscribeApplied() == Other.GetAsUnsubscribeApplied(); case ESpacetimeDBEventTag::Disconnected: return GetAsDisconnected() == Other.GetAsDisconnected(); + case ESpacetimeDBEventTag::Transaction: return GetAsTransaction() == Other.GetAsTransaction(); case ESpacetimeDBEventTag::SubscribeError: return GetAsSubscribeError() == Other.GetAsSubscribeError(); case ESpacetimeDBEventTag::UnknownTransaction: return GetAsUnknownTransaction() == Other.GetAsUnknownTransaction(); default: return false; @@ -783,6 +792,12 @@ class TESTPROCCLIENT_API UTestProcClientEventBpLib : public UBlueprintFunctionLi return FTestProcClientEvent::Disconnected(InValue); } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestProcClientEvent") + static FTestProcClientEvent Transaction(const FSpacetimeDBUnit& InValue) + { + return FTestProcClientEvent::Transaction(InValue); + } + UFUNCTION(BlueprintCallable, Category = "SpacetimeDB|TestProcClientEvent") static FTestProcClientEvent SubscribeError(const FString& InValue) { @@ -807,6 +822,9 @@ class TESTPROCCLIENT_API UTestProcClientEventBpLib : public UBlueprintFunctionLi UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestProcClientEvent") static bool IsDisconnected(const FTestProcClientEvent& Event) { return Event.IsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestProcClientEvent") + static bool IsTransaction(const FTestProcClientEvent& Event) { return Event.IsTransaction(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestProcClientEvent") static bool IsSubscribeError(const FTestProcClientEvent& Event) { return Event.IsSubscribeError(); } @@ -837,6 +855,12 @@ class TESTPROCCLIENT_API UTestProcClientEventBpLib : public UBlueprintFunctionLi return Event.GetAsDisconnected(); } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestProcClientEvent") + static FSpacetimeDBUnit GetAsTransaction(const FTestProcClientEvent& Event) + { + return Event.GetAsTransaction(); + } + UFUNCTION(BlueprintPure, Category = "SpacetimeDB|TestProcClientEvent") static FString GetAsSubscribeError(const FTestProcClientEvent& Event) { @@ -919,17 +943,6 @@ DECLARE_DYNAMIC_DELEGATE_OneParam( FOnSubscriptionError, FErrorContext, Context); -UCLASS(BlueprintType) -class TESTPROCCLIENT_API USetReducerFlags : public USetReducerFlagsBase -{ - GENERATED_BODY() - -public: - UFUNCTION(BlueprintCallable, Category = "SpacetimeDB") - void ScheduleProc(ECallReducerFlags Flag); - -}; - // RemoteTables class UCLASS(BlueprintType) class TESTPROCCLIENT_API URemoteTables : public UObject @@ -981,9 +994,6 @@ class TESTPROCCLIENT_API URemoteReducers : public UObject UPROPERTY() class UDbConnection* Conn; - - UPROPERTY() - USetReducerFlags* SetCallReducerFlags; }; DECLARE_DYNAMIC_DELEGATE_ThreeParams(FOnInsertWithTxCommitComplete, @@ -1209,9 +1219,6 @@ class TESTPROCCLIENT_API UDbConnection : public UDbConnectionBase UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteReducers* Reducers; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") - USetReducerFlags* SetReducerFlags; - UPROPERTY(BlueprintReadOnly, Category="SpacetimeDB") URemoteProcedures* Procedures; @@ -1263,5 +1270,15 @@ class TESTPROCCLIENT_API UDbConnection : public UDbConnectionBase virtual void ReducerEventFailed(const FReducerEvent& Event, const FString ErrorMessage) override; // Override the procedure event failed handler virtual void ProcedureEventFailed(const FProcedureEvent& Event, const FString ErrorMessage) override; + + friend class URemoteReducers; + + // Internal reducer correlation helpers (request_id -> typed reducer) + void RegisterPendingTypedReducer(uint32 RequestId, FReducer Reducer); + bool TryGetPendingTypedReducer(uint32 RequestId, FReducer& OutReducer) const; + bool TryTakePendingTypedReducer(uint32 RequestId, FReducer& OutReducer); + +private: + TMap PendingTypedReducers; }; diff --git a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Types/ReturnEnumType.g.h b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Types/ReturnEnumType.g.h index 14b4b797c33..a0235284c48 100644 --- a/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Types/ReturnEnumType.g.h +++ b/sdks/unreal/tests/TestProcClient/Source/TestProcClient/Public/ModuleBindings/Types/ReturnEnumType.g.h @@ -22,7 +22,7 @@ struct TESTPROCCLIENT_API FReturnEnumType public: FReturnEnumType() = default; - TVariant MessageData; + TVariant MessageData; UPROPERTY(BlueprintReadOnly) EReturnEnumTag Tag = static_cast(0);