@@ -32,6 +32,7 @@ void osn::Service::Register(ipc::server &srv)
3232 std::make_shared<ipc::function>(" Create" , std::vector<ipc::type>{ipc::type::String, ipc::type::String, ipc::type::String}, Create));
3333 cls->register_function (std::make_shared<ipc::function>(
3434 " Create" , std::vector<ipc::type>{ipc::type::String, ipc::type::String, ipc::type::String, ipc::type::String}, Create));
35+ cls->register_function (std::make_shared<ipc::function>(" Destroy" , std::vector<ipc::type>{ipc::type::UInt64}, Destroy));
3536 cls->register_function (std::make_shared<ipc::function>(" CreatePrivate" , std::vector<ipc::type>{ipc::type::String, ipc::type::String}, CreatePrivate));
3637 cls->register_function (std::make_shared<ipc::function>(" CreatePrivate" , std::vector<ipc::type>{ipc::type::String, ipc::type::String, ipc::type::String},
3738 CreatePrivate));
@@ -93,6 +94,21 @@ void osn::Service::Create(void *data, const int64_t id, const std::vector<ipc::v
9394 AUTO_DEBUG;
9495}
9596
97+ void osn::Service::Destroy (void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval)
98+ {
99+ obs_service_t *service = static_cast <obs_service_t *>(osn::Service::Manager::GetInstance ().find (args[0 ].value_union .ui64 ));
100+ if (!service) {
101+ PRETTY_ERROR_RETURN (ErrorCode::InvalidReference, " Service reference is not valid." );
102+ }
103+
104+ osn::Service::Manager::GetInstance ().free (service);
105+
106+ obs_service_release (service);
107+
108+ rval.push_back (ipc::value ((uint64_t )ErrorCode::Ok));
109+ AUTO_DEBUG;
110+ }
111+
96112void osn::Service::CreatePrivate (void *data, const int64_t id, const std::vector<ipc::value> &args, std::vector<ipc::value> &rval)
97113{
98114 std::string serviceId, name;
0 commit comments