close https://github.com/livekit/client-sdk-flutter/issues/734 - [x] Windows - [x] Linux 
61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "include/flutter/plugin_registrar.h"
|
|
|
|
#include <iostream>
|
|
#include <map>
|
|
|
|
#include "binary_messenger_impl.h"
|
|
#include "include/flutter/engine_method_result.h"
|
|
#include "include/flutter/method_channel.h"
|
|
#include "texture_registrar_impl.h"
|
|
|
|
namespace flutter {
|
|
|
|
// ===== PluginRegistrar =====
|
|
|
|
PluginRegistrar::PluginRegistrar(FlPluginRegistrar* registrar)
|
|
: registrar_(registrar) {
|
|
auto core_messenger = fl_plugin_registrar_get_messenger(registrar);
|
|
messenger_ = std::make_unique<BinaryMessengerImpl>(core_messenger);
|
|
auto texture_registrar = fl_plugin_registrar_get_texture_registrar(registrar);
|
|
texture_registrar_ =
|
|
std::make_unique<TextureRegistrarImpl>(texture_registrar);
|
|
}
|
|
|
|
PluginRegistrar::~PluginRegistrar() {
|
|
// This must always be the first call.
|
|
ClearPlugins();
|
|
|
|
// Explicitly cleared to facilitate testing of destruction order.
|
|
messenger_.reset();
|
|
}
|
|
|
|
void PluginRegistrar::AddPlugin(std::unique_ptr<Plugin> plugin) {
|
|
plugins_.insert(std::move(plugin));
|
|
}
|
|
|
|
void PluginRegistrar::ClearPlugins() {
|
|
plugins_.clear();
|
|
}
|
|
|
|
// ===== PluginRegistrarManager =====
|
|
|
|
// static
|
|
PluginRegistrarManager* PluginRegistrarManager::GetInstance() {
|
|
static PluginRegistrarManager* instance = new PluginRegistrarManager();
|
|
return instance;
|
|
}
|
|
|
|
PluginRegistrarManager::PluginRegistrarManager() = default;
|
|
|
|
// static
|
|
void PluginRegistrarManager::OnRegistrarDestroyed(
|
|
FlPluginRegistrar* registrar) {
|
|
GetInstance()->registrars()->erase(registrar);
|
|
}
|
|
|
|
} // namespace flutter
|