add veilid flutter plugin skeleton
This commit is contained in:
		
							
								
								
									
										17
									
								
								veilid-flutter/windows/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								veilid-flutter/windows/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
flutter/
 | 
			
		||||
 | 
			
		||||
# Visual Studio user-specific files.
 | 
			
		||||
*.suo
 | 
			
		||||
*.user
 | 
			
		||||
*.userosscache
 | 
			
		||||
*.sln.docstates
 | 
			
		||||
 | 
			
		||||
# Visual Studio build-related files.
 | 
			
		||||
x64/
 | 
			
		||||
x86/
 | 
			
		||||
 | 
			
		||||
# Visual Studio cache files
 | 
			
		||||
# files ending in .cache can be ignored
 | 
			
		||||
*.[Cc]ache
 | 
			
		||||
# but keep track of directories ending in .cache
 | 
			
		||||
!*.[Cc]ache/
 | 
			
		||||
							
								
								
									
										24
									
								
								veilid-flutter/windows/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								veilid-flutter/windows/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
cmake_minimum_required(VERSION 3.14)
 | 
			
		||||
set(PROJECT_NAME "veilid")
 | 
			
		||||
project(${PROJECT_NAME} LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
# This value is used when generating builds using this plugin, so it must
 | 
			
		||||
# not be changed
 | 
			
		||||
set(PLUGIN_NAME "veilid_plugin")
 | 
			
		||||
 | 
			
		||||
add_library(${PLUGIN_NAME} SHARED
 | 
			
		||||
  "veilid_plugin.cpp"
 | 
			
		||||
)
 | 
			
		||||
apply_standard_settings(${PLUGIN_NAME})
 | 
			
		||||
set_target_properties(${PLUGIN_NAME} PROPERTIES
 | 
			
		||||
  CXX_VISIBILITY_PRESET hidden)
 | 
			
		||||
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
 | 
			
		||||
target_include_directories(${PLUGIN_NAME} INTERFACE
 | 
			
		||||
  "${CMAKE_CURRENT_SOURCE_DIR}/include")
 | 
			
		||||
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter flutter_wrapper_plugin)
 | 
			
		||||
 | 
			
		||||
# List of absolute paths to libraries that should be bundled with the plugin
 | 
			
		||||
set(veilid_bundled_libraries
 | 
			
		||||
  ""
 | 
			
		||||
  PARENT_SCOPE
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										23
									
								
								veilid-flutter/windows/include/veilid/veilid_plugin.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								veilid-flutter/windows/include/veilid/veilid_plugin.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
#ifndef FLUTTER_PLUGIN_VEILID_PLUGIN_H_
 | 
			
		||||
#define FLUTTER_PLUGIN_VEILID_PLUGIN_H_
 | 
			
		||||
 | 
			
		||||
#include <flutter_plugin_registrar.h>
 | 
			
		||||
 | 
			
		||||
#ifdef FLUTTER_PLUGIN_IMPL
 | 
			
		||||
#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport)
 | 
			
		||||
#else
 | 
			
		||||
#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
FLUTTER_PLUGIN_EXPORT void VeilidPluginRegisterWithRegistrar(
 | 
			
		||||
    FlutterDesktopPluginRegistrarRef registrar);
 | 
			
		||||
 | 
			
		||||
#if defined(__cplusplus)
 | 
			
		||||
}  // extern "C"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif  // FLUTTER_PLUGIN_VEILID_PLUGIN_H_
 | 
			
		||||
							
								
								
									
										82
									
								
								veilid-flutter/windows/veilid_plugin.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								veilid-flutter/windows/veilid_plugin.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
#include "include/veilid/veilid_plugin.h"
 | 
			
		||||
 | 
			
		||||
// This must be included before many other Windows headers.
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
// For getPlatformVersion; remove unless needed for your plugin implementation.
 | 
			
		||||
#include <VersionHelpers.h>
 | 
			
		||||
 | 
			
		||||
#include <flutter/method_channel.h>
 | 
			
		||||
#include <flutter/plugin_registrar_windows.h>
 | 
			
		||||
#include <flutter/standard_method_codec.h>
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
class VeilidPlugin : public flutter::Plugin {
 | 
			
		||||
 public:
 | 
			
		||||
  static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar);
 | 
			
		||||
 | 
			
		||||
  VeilidPlugin();
 | 
			
		||||
 | 
			
		||||
  virtual ~VeilidPlugin();
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // Called when a method is called on this plugin's channel from Dart.
 | 
			
		||||
  void HandleMethodCall(
 | 
			
		||||
      const flutter::MethodCall<flutter::EncodableValue> &method_call,
 | 
			
		||||
      std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// static
 | 
			
		||||
void VeilidPlugin::RegisterWithRegistrar(
 | 
			
		||||
    flutter::PluginRegistrarWindows *registrar) {
 | 
			
		||||
  auto channel =
 | 
			
		||||
      std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>(
 | 
			
		||||
          registrar->messenger(), "veilid",
 | 
			
		||||
          &flutter::StandardMethodCodec::GetInstance());
 | 
			
		||||
 | 
			
		||||
  auto plugin = std::make_unique<VeilidPlugin>();
 | 
			
		||||
 | 
			
		||||
  channel->SetMethodCallHandler(
 | 
			
		||||
      [plugin_pointer = plugin.get()](const auto &call, auto result) {
 | 
			
		||||
        plugin_pointer->HandleMethodCall(call, std::move(result));
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
  registrar->AddPlugin(std::move(plugin));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VeilidPlugin::VeilidPlugin() {}
 | 
			
		||||
 | 
			
		||||
VeilidPlugin::~VeilidPlugin() {}
 | 
			
		||||
 | 
			
		||||
void VeilidPlugin::HandleMethodCall(
 | 
			
		||||
    const flutter::MethodCall<flutter::EncodableValue> &method_call,
 | 
			
		||||
    std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
 | 
			
		||||
  if (method_call.method_name().compare("getPlatformVersion") == 0) {
 | 
			
		||||
    std::ostringstream version_stream;
 | 
			
		||||
    version_stream << "Windows ";
 | 
			
		||||
    if (IsWindows10OrGreater()) {
 | 
			
		||||
      version_stream << "10+";
 | 
			
		||||
    } else if (IsWindows8OrGreater()) {
 | 
			
		||||
      version_stream << "8";
 | 
			
		||||
    } else if (IsWindows7OrGreater()) {
 | 
			
		||||
      version_stream << "7";
 | 
			
		||||
    }
 | 
			
		||||
    result->Success(flutter::EncodableValue(version_stream.str()));
 | 
			
		||||
  } else {
 | 
			
		||||
    result->NotImplemented();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace
 | 
			
		||||
 | 
			
		||||
void VeilidPluginRegisterWithRegistrar(
 | 
			
		||||
    FlutterDesktopPluginRegistrarRef registrar) {
 | 
			
		||||
  VeilidPlugin::RegisterWithRegistrar(
 | 
			
		||||
      flutter::PluginRegistrarManager::GetInstance()
 | 
			
		||||
          ->GetRegistrar<flutter::PluginRegistrarWindows>(registrar));
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user