diff --git a/SpeckleConnector/Connector.vcxproj b/SpeckleConnector/Connector.vcxproj
index b00b5d6..b23699d 100644
--- a/SpeckleConnector/Connector.vcxproj
+++ b/SpeckleConnector/Connector.vcxproj
@@ -113,6 +113,7 @@
+
@@ -140,6 +141,7 @@
+
diff --git a/SpeckleConnector/Connector.vcxproj.filters b/SpeckleConnector/Connector.vcxproj.filters
index 70ab169..5ce1529 100644
--- a/SpeckleConnector/Connector.vcxproj.filters
+++ b/SpeckleConnector/Connector.vcxproj.filters
@@ -143,6 +143,9 @@
Connector\Interface\Browser\Bridge\Test\Arg
+
+ Connector\Interface\Browser\Bridge\Test
+
@@ -223,5 +226,8 @@
Connector\Interface\Browser\Bridge\Test\Arg
+
+ Connector\Interface\Browser\Bridge\Test
+
\ No newline at end of file
diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/Arg/ComplexType.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/Arg/ComplexType.cpp
index 746e043..8bccce4 100644
--- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/Arg/ComplexType.cpp
+++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/Arg/ComplexType.cpp
@@ -19,7 +19,7 @@ namespace {
///Serialisation field IDs
static std::array fieldID = {
- Identity{"Id"},
+ Identity{"id"},
Identity{"count"},
Identity{"thisIsABoolean"},
};
@@ -40,8 +40,8 @@ struct std::hash {
--------------------------------------------------------------------*/
ComplexType::ComplexType() {
//This is the required test values
- ID = String{std::hash()(*this)} + " - I am a string";
count = static_cast(std::hash()(*this));
+ ID = String{count} + " - I am a string";
} //ComplexType::ComplexType
@@ -56,9 +56,9 @@ bool ComplexType::fillInventory(Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
- { fieldID[unID], unID, element },
- { fieldID[countID], countID, element },
- { fieldID[isTestID], isTestID, element },
+ { fieldID[unID], unID, element, !ID.empty() },
+ { fieldID[countID], countID, element, count != 0 },
+ { fieldID[isTestID], isTestID, element, testBool },
},
}.withType(&typeid(ComplexType)));
return true;
diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/SayHi.h b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/SayHi.h
index b6e0fb5..a78bf5e 100644
--- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/SayHi.h
+++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/SayHi.h
@@ -7,7 +7,7 @@
namespace connector::interfac::browser::bridge {
///Argument for the parameters of a test message
- using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType;
+ using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType;
/*!
JS Function class to return a test message based on sample data
diff --git a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/TriggerEvent.cpp b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/TriggerEvent.cpp
index ed3d918..9fe7238 100644
--- a/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/TriggerEvent.cpp
+++ b/SpeckleConnector/Connector/Interface/Browser/Bridge/Test/TriggerEvent.cpp
@@ -4,6 +4,8 @@
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
+#include
+
using namespace active::serialise;
using namespace active::setting;
using namespace connector::interfac::browser::bridge;
diff --git a/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgument.h b/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgument.h
index 5cb8ffa..a424383 100644
--- a/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgument.h
+++ b/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgument.h
@@ -57,6 +57,12 @@ namespace speckle::interfac::browser::bridge {
@return True if the argument contains an error
*/
bool hasError() const { return m_errorMessage.operator bool(); }
+ /*!
+ Get the number of parameters in the argument
+ @return The number of parameters
+ */
+ virtual uint32_t parameterCount() const { return 1; }
+
/*!
Get any error message relating to the arguments
@return The error message (nullopt if no errors occurred)
@@ -92,7 +98,7 @@ namespace speckle::interfac::browser::bridge {
};
///Definition of the argument for a JS callable method (enclosing the local function argument)
- template
+ template
class JSArgType : public BridgeArgument {
public:
@@ -115,6 +121,11 @@ namespace speckle::interfac::browser::bridge {
*/
JSArgType(const JSArgType& source) : BridgeArgument{source}, value{source.value} {}
+ /*!
+ Get the number of parameters in the argument
+ @return The number of parameters
+ */
+ uint32_t parameterCount() const override { return Params; }
/*!
Fill an inventory with the cargo items
@param inventory The inventory to receive the cargo items
diff --git a/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgumentWrap.cpp b/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgumentWrap.cpp
index 7fc73eb..7ab331c 100644
--- a/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgumentWrap.cpp
+++ b/SpeckleLib/Speckle/Interface/Browser/Bridge/BridgeArgumentWrap.cpp
@@ -5,6 +5,7 @@
#include "Active/Serialise/Package/Wrapper/ValueSettingWrap.h"
#include "Active/Serialise/JSON/JSONTransport.h"
#include "Active/Utility/BufferIn.h"
+#include "Speckle/Utility/Exception.h"
using namespace active::serialise;
using namespace active::serialise::json;
@@ -133,22 +134,32 @@ std::unique_ptr BridgeArgumentWrap::makeArgument(const String& m
if (auto maker = m_argumentFactory.find(methodID); (maker != m_argumentFactory.end())) {
if (auto result = reinterpret_cast(maker->second(methodID, requestID)); result != nullptr) {
try {
- //The argument is passed as an array of stringified JSON - first unpack the array
- JSONTransport transport{Transport::Policy::verbose};
+ //The argument is passed as an array of stringified JSON - first unpack the array
+ JSONTransport transport;
ValueSetting args;
transport.receive(ValueSettingWrap{args}, Identity{}, argument);
- //Then unify the argument strings into a single JSON argument
- String unifiedArgument{"{"};
- int32_t argIndex = 0;
- bool isFirst = true;
- for (auto& arg : args.operator std::vector()) {
- if (isFirst)
- isFirst = false;
- else
- unifiedArgument += ",";
- unifiedArgument += "\"" + String{argIndex++} + "\":" + JSONTransport::convertFromJSONString(arg);
+ if (args.size() != result->parameterCount())
+ throw Exception{"Function called with wrong number of parameters"};
+ String unifiedArgument;
+ if (dynamic_cast(result) != nullptr) {
+ //Unify the argument strings into a single JSON argument
+ unifiedArgument = "{";
+ int32_t argIndex = 0;
+ bool isFirst = true;
+ for (auto& arg : args.operator std::vector()) {
+ if (isFirst)
+ isFirst = false;
+ else
+ unifiedArgument += ",";
+ unifiedArgument += "\"" + String{argIndex++} + "\":" + JSONTransport::convertFromJSONString(arg);
+ }
+ unifiedArgument += "}";
+ } else {
+ //An item can only receive a single parameter
+ if (args.size() > 1)
+ throw Exception{"Function called with wrong number of parameters"};
+ unifiedArgument = args;
}
- unifiedArgument += "}";
//And receive the unified argument into the method argument
transport.receive(std::forward(*result), Identity{}, unifiedArgument);
return std::unique_ptr{result};
diff --git a/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/FunctionBinding.h b/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/FunctionBinding.h
deleted file mode 100644
index ff9684f..0000000
--- a/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/FunctionBinding.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
-#define SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
-
-#include "Speckle/Interface/Browser/JSBinding.h"
-
-#ifdef ARCHICAD
-#include "Speckle/Serialise/JSBase/JSBaseTransport.h"
-
-#include
-#include
-#else
-#include "Active/Serialise/JSON/JSONTransport.h"
-#endif
-
-namespace speckle::interfac::browser::bridge {
-
- ///Define the bridge binding protocols according to platform (argument/result serialisation and transport for (de)serialisation)
-#ifdef ARCHICAD
- //Archicad uses a proprietary JS::Base type for JS values
- using PlatformBinding = JSBinding, speckle::serialise::jsbase::JSBaseTransport>;
-#else
- //All others will use JSON (in a String)
- using PlatformBinding = JSBinding;
-#endif
-
-}
-
-#endif //SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
diff --git a/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/GetCallResult.cpp b/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/GetCallResult.cpp
index d8a7f10..464e9b2 100644
--- a/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/GetCallResult.cpp
+++ b/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/GetCallResult.cpp
@@ -38,12 +38,8 @@ std::unique_ptr GetCallResult::getResult(WrappedResultArg& arg
if (!hasBridge())
return nullptr;
//Retrieve the requested result
-<<<<<<< Updated upstream
using namespace json;
- auto result = m_bridge.releaseResult(argument);
-=======
auto result = getBridge()->releaseResult(argument);
->>>>>>> Stashed changes
auto item = dynamic_cast(result.get());
if (!item)
return nullptr;
diff --git a/SpeckleLib/SpeckleLib17.vcxproj b/SpeckleLib/SpeckleLib17.vcxproj
index e18fa3f..bb63d76 100644
--- a/SpeckleLib/SpeckleLib17.vcxproj
+++ b/SpeckleLib/SpeckleLib17.vcxproj
@@ -27,17 +27,17 @@
+
+
+
+
+
-
+
-
-
-
-
-
@@ -57,13 +57,13 @@
+
+
-
-
diff --git a/SpeckleLib/SpeckleLib17.vcxproj.filters b/SpeckleLib/SpeckleLib17.vcxproj.filters
index dc5655b..17b945d 100644
--- a/SpeckleLib/SpeckleLib17.vcxproj.filters
+++ b/SpeckleLib/SpeckleLib17.vcxproj.filters
@@ -106,19 +106,7 @@
Speckle\Interface\Browser\Bridge
-
- Speckle\Interface\Browser\Bridge
-
-
- Speckle\Interface\Browser\Bridge
-
-
- Speckle\Interface\Browser\Bridge
-
-
- Speckle\Interface\Browser\Bridge
-
-
+
Speckle\Interface\Browser\Bridge\Functions
@@ -145,7 +133,19 @@
Speckle\Interface\Browser\Bridge\Functions
-
+
+ Speckle\Interface\Browser\Bridge
+
+
+ Speckle\Interface\Browser\Bridge
+
+
+ Speckle\Interface\Browser\Bridge
+
+
+ Speckle\Interface\Browser\Bridge
+
+
Speckle\Interface\Browser\Bridge
@@ -171,12 +171,6 @@
Speckle\Interface\Browser\Bridge
-
- Speckle\Interface\Browser\Bridge
-
-
- Speckle\Interface\Browser\Bridge
-
Speckle\Interface\Browser\Bridge\Functions
@@ -198,6 +192,12 @@
Speckle\Interface\Browser\Bridge\Functions
+
+ Speckle\Interface\Browser\Bridge
+
+
+ Speckle\Interface\Browser\Bridge
+