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();
///
/// 开始初始化
///
///
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();
serviceProvider.UseMessenger().UseStoreFile().UseSerializerMemoryPack();
ICommonStore commonStore = serviceProvider.GetService();
if ((commonStore.Modes & CommonModes.Server) == CommonModes.Server)
{
serviceProvider.UseAccessServer().UseActionServer().UseDecenterServer().UseForwardServer().UsePcpServer().UseRelayServer().UseSForwardServer().UseSignInServer().UseSocks5Server().UseSyncServer().UseTunnelServer().UseTuntapServer().UseUpdaterServer().UseFlowServer();
serviceProvider.UseListen();
}
if ((commonStore.Modes & CommonModes.Client) == CommonModes.Client)
{
serviceProvider.UseLoggerClient().UseApiClient().UseExRoute().UseAccessClient().UseActionClient().UseDecenterClient().UseForwardClient().UsePcpClient().UseRelayClient().UseSForwardClient().UseSocks5Client().UseSyncClient().UseTunnelClient().UseTuntapClient().UseUpdaterClient().UseFlowClient();
serviceProvider.UseSignInClient();
}
}
///
/// 获取服务
///
///
///
public static TService GetService() where TService : class
{
return serviceProvider.GetService();
}
}
}