diff --git a/EonaCat.Network.Tester/Program.cs b/EonaCat.Network.Tester/Program.cs index 7b2454c..88cd9bb 100644 --- a/EonaCat.Network.Tester/Program.cs +++ b/EonaCat.Network.Tester/Program.cs @@ -1,7 +1,9 @@ // This file is part of the EonaCat project(s) which is released under the Apache License. // See the LICENSE file or go to https://EonaCat.com/License for full license details. +using System.Net.Security; using System.Reflection; +using System.Security.Authentication; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using EonaCat.WebSockets; @@ -58,7 +60,6 @@ internal class Program { var serverUri = "wss://localhost:8443"; var clientUri = "wss://localhost:8443/Welcome"; - var clientName = "TestClient"; var certificatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "localhost.pfx"); var certificatePassword = ""; var requiredPassword = ""; @@ -67,11 +68,22 @@ internal class Program StartServer(serverUri, certificatePath, certificatePassword, requiredPassword); // Start the client in the main thread + await StartClientAsync(clientUri, certificatePath, certificatePassword).ConfigureAwait(false); + Console.WriteLine("Connected to the server."); + } + + private static async Task StartClientAsync(string clientUri, string certificatePath, string certificatePassword) + { var configuration = new AsyncWebSocketClientConfiguration(); + configuration.SslTargetHost = "localhost"; + configuration.SslEncryptionPolicy = EncryptionPolicy.RequireEncryption; + configuration.SslCheckCertificateRevocation = false; + configuration.SslPolicyErrorsBypassed = true; + configuration.SslEnabledProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; + configuration.SslClientCertificates = new X509CertificateCollection { new X509Certificate2(certificatePath, certificatePassword) }; + _client = new AsyncWebSocketClient(new Uri(clientUri), OnServerTextReceived, OnServerBinaryReceived, OnServerConnected, OnServerDisconnected, OnServerFragmentationStreamOpened, OnServerFragmentationStreamOpened, OnServerFragmentationStreamClosed, configuration); await _client.ConnectAsync().ConfigureAwait(false); - //(sender, e) => Console.WriteLine($"Error: {sender}\n{e}"); - Console.WriteLine("Connected to the server."); } private static Task OnServerFragmentationStreamClosed(AsyncWebSocketClient arg1, byte[] arg2, int arg3, int arg4) @@ -156,12 +168,21 @@ internal class Program private static void StartServer(string serverUri, string certificatePath, string certificatePassword, string requiredPassword) { + // split the server uri to get the port + var uri = new Uri(serverUri); + var port = uri.Port; + var test = new AsyncWebSocketServerModuleCatalog(); - //var module = new AsyncWebSocketServerModule - //test.RegisterModule(); - //_server = new AsyncWebSocketServer(serverUri); - //_server.SSL.Certificate = new X509Certificate2(certificatePath, certificatePassword); - //_server.AddEndpoint("/Welcome"); - //_server.Start(); + test.RegisterModule(new TestModule()); + var configuration = new AsyncWebSocketServerConfiguration(); + configuration.SslEnabled = true; + configuration.SslEncryptionPolicy = EncryptionPolicy.RequireEncryption; + configuration.SslCheckCertificateRevocation = false; + configuration.SslPolicyErrorsBypassed = true; + configuration.SslClientCertificateRequired = true; + configuration.SslEnabledProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; + configuration.SslServerCertificate = new X509Certificate2(certificatePath, certificatePassword); + _server = new AsyncWebSocketServer(port, test, configuration); + _server.Listen(); } } \ No newline at end of file diff --git a/EonaCat.Network.Tester/TestModule.cs b/EonaCat.Network.Tester/TestModule.cs new file mode 100644 index 0000000..13d372b --- /dev/null +++ b/EonaCat.Network.Tester/TestModule.cs @@ -0,0 +1,16 @@ +// This file is part of the EonaCat project(s) which is released under the Apache License. +// See the LICENSE file or go to https://EonaCat.com/License for full license details. + +using EonaCat.WebSockets; + +internal class TestModule : AsyncWebSocketServerModule +{ + public TestModule() + : base("/Welcome") + { + } + public override async Task OnSessionTextReceived(AsyncWebSocketSession session, string text) + { + await session.SendTextAsync(text); + } +} \ No newline at end of file