Files
speckle-cpp-connectors/SpeckleLib/Speckle/Interface/Browser/Bridge/Functions/GetCallResult.cpp
T
Ralph Wessel 71dac48830 Updated Xcode project
Implemented caching to avoid slow API material lookup
Some minor fixes
Eliminated some warnings
2024-10-30 11:47:48 +00:00

52 lines
1.8 KiB
C++

#include "Speckle/Interface/Browser/Bridge/Functions/GetCallResult.h"
#include "Active/Serialise/Item/Wrapper/ItemWrap.h"
#include "Active/Serialise/JSON/JSONTransport.h"
#include "Active/Utility/BufferOut.h"
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Record/Element/ModelElement.h"
#include <utility>
#ifdef ARCHICAD
#include <ACAPinc.h>
#include <MessageLoopExecutor.hpp>
#endif
using namespace active::serialise;
using namespace speckle::serialise::jsbase;
using namespace speckle::interfac::browser;
using namespace speckle::interfac::browser::bridge;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Constructor
--------------------------------------------------------------------*/
GetCallResult::GetCallResult() : JSFunction{"GetCallResult", [&](const auto& args) {
return getResult(args);
}} {
} //GetCallResult::GetCallResult
/*--------------------------------------------------------------------
Get the result for a specified call
argument: The method arguments specifying the target bridge and requestID
return: The requested result (nullptr on failure)
--------------------------------------------------------------------*/
std::unique_ptr<WrappedResultArg> GetCallResult::getResult(const WrappedResultArg& argument) const {
if (!hasBridge())
return nullptr;
//Retrieve the requested result
using namespace json;
auto result = getBridge()->releaseResult(argument);
auto item = dynamic_cast<Cargo*>(result.get());
if (!item)
return nullptr;
String jsonOutput;
JSONTransport().send(std::forward<Cargo&&>(*item), Identity{}, jsonOutput);
record::element::ModelElement::resetCache();
return std::make_unique<WrappedResultArg>(jsonOutput);
} //GetCallResult::getResult