using linker.messenger.api; using linker.messenger.decenter; using linker.messenger.exroute; using linker.messenger.flow; using linker.messenger.forward; using linker.messenger.listen; using linker.messenger.logger; using Microsoft.Extensions.DependencyInjection; using linker.messenger.pcp; using linker.messenger.relay; using linker.messenger.sforward; using linker.messenger.signin; using linker.messenger.socks5; using linker.messenger.sync; using linker.messenger.tunnel; using linker.messenger.tuntap; using linker.messenger.updater; using linker.messenger.store.file; using linker.messenger.serializer.memorypack; using linker.libs; namespace linker.messenger.entry { public static class LinkerMessengerEntry { private static ServiceCollection serviceCollection; private static ServiceProvider serviceProvider; private static OperatingManager inited = new OperatingManager(); private static OperatingManager builded = new OperatingManager(); private static OperatingManager setuped = new OperatingManager(); /// /// 开始初始化 /// /// public static void Initialize() { if (inited.StartOperation() == false) return; serviceCollection = new ServiceCollection(); serviceCollection //日志 .AddLoggerClient() //api接口和web .AddApiClient() //路由排除 .AddExRoute() //服务器监听 .AddListen() //权限 .AddAccessClient().AddAccessServer() //自定义验证 .AddActionClient().AddActionServer() //数据同步 .AddDecenterClient().AddDecenterServer() //端口转发 .AddForwardClient().AddForwardServer() //pcp .AddPcpClient().AddPcpServer() //中继 .AddRelayClient().AddRelayServer() //服务器穿透 .AddSForwardClient().AddSForwardServer() //登录 .AddSignInClient().AddSignInServer() //socks5 .AddSocks5Client().AddSocks5Server() //同步 .AddSyncClient().AddSyncServer() //打洞 .AddTunnelClient().AddTunnelServer() //虚拟网卡 .AddTuntapClient().AddTuntapServer() //更新 .AddUpdaterClient().AddUpdaterServer() //流量统计 .AddFlowClient().AddFlowServer() //信标 .AddMessenger() //持久化,文件 .AddStoreFile() //序列化 MemoryPack .AddSerializerMemoryPack(); } /// /// 注入 /// /// public static void AddService() where TService : class { serviceCollection.AddSingleton(); } /// /// 注入 /// /// /// public static void AddService() where TService : class where TImplementation : class, TService { serviceCollection.AddSingleton(); } /// /// 构建 /// /// public static void Build() { if (builded.StartOperation() == false) return; serviceProvider = serviceCollection.BuildServiceProvider(); } /// /// 获取服务 /// /// /// public static TService GetService() where TService : class { return serviceProvider.GetService(); } /// /// 开始运行 /// /// 排除哪些模块,默认无 public static void Setup(ExcludeModule modules = ExcludeModule.None) { if (setuped.StartOperation() == false) return; ICommonStore commonStore = serviceProvider.GetService(); serviceProvider.UseMessenger(); if ((modules & ExcludeModule.StoreFile) != ExcludeModule.StoreFile) serviceProvider.UseStoreFile(); if ((modules & ExcludeModule.SerializerMemoryPack) != ExcludeModule.SerializerMemoryPack) serviceProvider.UseSerializerMemoryPack(); if ((commonStore.Modes & CommonModes.Server) == CommonModes.Server) { if ((modules & ExcludeModule.Action) != ExcludeModule.Action) serviceProvider.UseActionServer(); if ((modules & ExcludeModule.Forward) != ExcludeModule.Forward) serviceProvider.UseForwardServer(); if ((modules & ExcludeModule.SForward) != ExcludeModule.SForward) serviceProvider.UseSForwardServer(); if ((modules & ExcludeModule.Socks5) != ExcludeModule.Socks5) serviceProvider.UseSocks5Server(); if ((modules & ExcludeModule.Tuntap) != ExcludeModule.Tuntap) serviceProvider.UseTuntapServer(); if ((modules & ExcludeModule.Updater) != ExcludeModule.Updater) serviceProvider.UseUpdaterServer(); serviceProvider.UseAccessServer().UseDecenterServer().UsePcpServer().UseRelayServer() .UseSignInServer().UseSyncServer().UseTunnelServer().UseFlowServer(); serviceProvider.UseListen(); } if ((commonStore.Modes & CommonModes.Client) == CommonModes.Client) { serviceProvider.UseLoggerClient(); if ((modules & ExcludeModule.Api) != ExcludeModule.Api) serviceProvider.UseApiClient(); if ((modules & ExcludeModule.Action) != ExcludeModule.Action) serviceProvider.UseActionClient(); if ((modules & ExcludeModule.Forward) != ExcludeModule.Forward) serviceProvider.UseForwardClient(); if ((modules & ExcludeModule.SForward) != ExcludeModule.SForward) serviceProvider.UseSForwardClient(); if ((modules & ExcludeModule.Socks5) != ExcludeModule.Socks5) serviceProvider.UseSocks5Client(); if ((modules & ExcludeModule.Tuntap) != ExcludeModule.Tuntap) serviceProvider.UseTuntapClient(); if ((modules & ExcludeModule.Updater) != ExcludeModule.Updater) serviceProvider.UseUpdaterClient(); serviceProvider.UseExRoute().UseAccessClient().UseDecenterClient().UsePcpClient().UseRelayClient().UseSyncClient().UseTunnelClient().UseFlowClient(); serviceProvider.UseSignInClient(); } } } /// /// 排除那些模块 /// [Flags] public enum ExcludeModule : uint { /// /// 无 /// None = 0, /// /// 端口转发 /// Forward = 1, /// /// 内网穿透 /// SForward = 2, /// /// socks5 /// Socks5 = 4, /// /// 虚拟网卡 /// Tuntap = 8, /// /// 更新检测 /// Updater = 16, /// /// 文件存储库 /// StoreFile = 32, /// /// MemoryPack序列化库 /// SerializerMemoryPack = 64, /// /// 管理接口和网页 /// Api = 128, /// /// 自定义认证 /// Action = 256, } }