128 lines
2.8 KiB
C#
128 lines
2.8 KiB
C#
// See https://aka.ms/new-console-template for more information
|
||
|
||
using System.Diagnostics;
|
||
using System.Globalization;
|
||
using System.Text;
|
||
using BITKit;
|
||
using BITKit.Mod;
|
||
using BITKit.Net;
|
||
using MemoryPack;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using Microsoft.Extensions.Logging;
|
||
using Net.BITKit.Teleport;
|
||
|
||
await BITAppForNet.InitializeAsync("Net.BITKit.Teleport");
|
||
|
||
var isClient = Environment.GetCommandLineArgs().Contains("client", StringComparer.CurrentCultureIgnoreCase);
|
||
|
||
var serviceCollection = new ServiceCollection();
|
||
|
||
serviceCollection.AddLogging(x =>
|
||
{
|
||
x.AddConsole();
|
||
Console.OutputEncoding=Encoding.UTF8;
|
||
});
|
||
|
||
serviceCollection.AddTransient<NetProviderService>();
|
||
serviceCollection.AddSingleton<ENetServer>();
|
||
serviceCollection.AddSingleton<ENetClient>();
|
||
|
||
if (isClient)
|
||
{
|
||
serviceCollection.AddSingleton<INetProvider>(x => x.GetRequiredService<ENetClient>());
|
||
|
||
serviceCollection.AddRemoteInterface<IMyRemoteInterface>();
|
||
|
||
}
|
||
else
|
||
{
|
||
serviceCollection.AddSingleton<INetProvider>(x => x.GetRequiredService<ENetServer>());
|
||
|
||
serviceCollection.AddSingleton<IMyRemoteInterface,MyRemoteInterface>();
|
||
}
|
||
|
||
|
||
var serviceProvider = serviceCollection.BuildServiceProvider();
|
||
|
||
var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
|
||
|
||
|
||
|
||
if (isClient)
|
||
{
|
||
var client = serviceProvider.GetRequiredService<ENetClient>();
|
||
|
||
Tick(client);
|
||
|
||
if (await client.Connect() is false)
|
||
{
|
||
throw new Exception("Failed to connect to server.");
|
||
}
|
||
|
||
var rpc = serviceProvider.GetRequiredService<IMyRemoteInterface>();
|
||
|
||
for (int i = 1; i <= 3; i++)
|
||
{
|
||
//rpc.Func(i.ToString());
|
||
logger.LogInformation("Rpc:\t" + await rpc.FuncAsync(i.ToString()));
|
||
}
|
||
|
||
logger.LogInformation("客户端链接完成,按任意键开始Rpc测试");
|
||
|
||
var isPressed=false;
|
||
|
||
Console.CancelKeyPress += (sender, args) =>
|
||
{
|
||
isPressed = true;
|
||
args.Cancel = true; // Prevent the process from terminating
|
||
};
|
||
|
||
while (true)
|
||
{
|
||
if (isPressed)
|
||
{
|
||
using var stopWatcher = new StopWatcher(logger,"Rpc测试");
|
||
|
||
logger.LogInformation("Rpc:\t" + await rpc.FuncAsync(DateTime.Now.ToString(CultureInfo.InvariantCulture)));
|
||
isPressed = false;
|
||
}
|
||
|
||
await Task.Delay(100);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var server = serviceProvider.GetRequiredService<ENetServer>();
|
||
|
||
Tick(server);
|
||
|
||
server.StartServer();
|
||
|
||
var count = 0;
|
||
|
||
while (true)
|
||
{
|
||
await Task.Delay(1000);
|
||
|
||
foreach (var id in server.Connections.Keys)
|
||
{
|
||
server.SendMessageToClient(id,$"Tick:{++count} from server!");
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
while (true)
|
||
{
|
||
await Task.Delay(300);
|
||
}
|
||
|
||
async void Tick(INetProvider netProvider)
|
||
{
|
||
while (true)
|
||
{
|
||
netProvider.Tick();
|
||
|
||
await Task.Delay(30);
|
||
}
|
||
} |