/** * 建立链接 * 发送消息 * 接受消息 * 打印日志 */ async Task LinkWs() { var wsAddress = WsAddressTBox.Text.Trim(); wsClient?.Dispose(); wsClient = await WsClient.ConnectAsync(new Uri(wsAddress)); Console.WriteLine("建立链接!"); }
public async Task ValidateCryptoHandshake() { var server = new WsServer(); var serverKey = CryptoExtensions.GenerateKey(); var clientKey = CryptoExtensions.GenerateKey(); ECPoint serverPub, clientPub = new ECPoint(); await server.StartAsync(new IPEndPoint(IPAddress.Loopback, 0), async stream => { clientPub = await stream.EncryptAsync(serverKey); }); await Task.Delay(500); // start client var client = new WsClient(); var conn = await client.ConnectAsync(new Uri($"ws://" + server.ListeningAddresses[0].Substring(7))); serverPub = await conn.EncryptAsync(clientKey); await Task.Delay(500); Assert.Equal(serverKey.Q.X, serverPub.X); Assert.Equal(clientKey.Q.X, clientPub.X); server.Dispose(); client.Dispose(); }
public async Task Test() { // create the server var server = new WsServer(); var serverKey = CryptoExtensions.GenerateKey(); var clientKey = CryptoExtensions.GenerateKey(); Console.WriteLine($"Server key is: [{serverKey.Q.GetFingerprintString()}]"); Console.WriteLine($"Client key is: [{clientKey.Q.GetFingerprintString()}]"); await server.StartAsync(new IPEndPoint(IPAddress.Any, 8080), async stream => { // encrypt // called when a client connects var br = new BinaryWriter(stream); var ct = Encoding.ASCII.GetBytes($"Hello from Server! {DateTime.Now}"); br.Write(ct.Length); br.Write(ct); var res = await stream.EncryptAsync(serverKey); Console.WriteLine($"Client connected with fingerprint of [{res.GetFingerprintString()}]"); while (stream.Connected) { var bytes = Encoding.ASCII.GetBytes($"Hello from Server! {DateTime.Now}"); br.Write(bytes.Length); br.Write(bytes); await Task.Delay(1000); } await stream.CloseAsync(); }); // start client var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://localhost:8080")); // measure client data // read data var binReader = new BinaryReader(connection); int e = binReader.ReadInt32(); var g = binReader.ReadBytes(e); Console.WriteLine(Encoding.ASCII.GetString(g)); var serverRes = await connection.EncryptAsync(clientKey); Console.WriteLine($"Connected to server with fingerprint of [{serverRes.GetFingerprintString()}]"); for (int i = 0; i < 100; i++) { int b = binReader.ReadInt32(); var bytesRead = binReader.ReadBytes(b); Console.WriteLine(Encoding.ASCII.GetString(bytesRead)); } // cleanup client.Dispose(); server.Dispose(); }
public async Task Test() { // create the server var server = new WsServer(); await server.StartAsync(new IPEndPoint(IPAddress.Loopback, 8080), async stream => { //await stream.EncryptAsync(); Console.WriteLine($"Tunnel Opened: remote => localhost:12345"); var sock = new Socket(SocketType.Stream, ProtocolType.Tcp); await sock.ConnectAsync("localhost", 12345); var ns = new NetworkStream(sock); var t1 = ns.CopyToAsync(stream, 62000); var t2 = stream.CopyToAsync(ns, 62000); await Task.WhenAny(t1, t2); sock.Dispose(); await stream.DisposeAsync(); Console.WriteLine($"Tunnel Closed: remote => localhost:25565"); }); Socket lSock = new Socket(SocketType.Stream, ProtocolType.Tcp); lSock.Bind(new IPEndPoint(IPAddress.Loopback, 1234)); lSock.Listen(10); var cts = new CancellationTokenSource(); Console.WriteLine($"Started... Listening to localhost:1234. Press ctrl + c to exit"); Console.CancelKeyPress += (q, e) => { cts.Cancel(); }; while (!cts.Token.IsCancellationRequested) { var ksock = await lSock.AcceptAsync(); Task.Run(async() => { // start client var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://localhost:8080")); //await connection.EncryptAsync(); var ns = new NetworkStream(ksock); var t1 = ns.CopyToAsync(connection, 62000); var t2 = connection.CopyToAsync(ns, 62000); await Task.WhenAny(t1, t2); ksock.Dispose(); await connection.DisposeAsync(); client.Dispose(); }); } // cleanup server.Dispose(); }
public Task <bool> ConnectAsync() { connectedSubject.OnNext(false); IsConnected = false; var tcs = new TaskCompletionSource <bool>(); try { HttpClient .LoginAsync() .ContinueWith(t => { if (t.Result != null && t.Result.IsSuccessful) { _logger.Information($"{Username} logged in success!"); if (WsClient != null) { WsClient.Dispose(); } WsClient = new IqOptionWebSocketClient(t.Result.Data.Ssid); SubscribeWebSocket(); IsConnected = true; connectedSubject.OnNext(true); tcs.TrySetResult(true); return; } _logger.Information( $"{Username} logged in failed due to {t.Result?.Errors?.GetErrorMessage()}"); tcs.TrySetResult(false); }); } catch (Exception ex) { tcs.TrySetException(ex); } return(tcs.Task); }
public async Task ValidateReadWriteStatistics() { InterceptData clientData = null, serverData = null; var server = new WsServer(); await server.StartAsync(new IPEndPoint(IPAddress.Loopback, 0), async stream => { await stream.WrapSocketAsync(x => Task.FromResult <WStreamSocket>(new Interceptor(x, out serverData)) ); var abr = new AsyncBinaryReader(stream); for (int i = 0; i < 100000; i++) { Assert.Equal(i, await abr.ReadInt32Async()); } await stream.CloseAsync(); }); var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://" + server.ListeningAddresses[0].Substring(7))); await connection.WrapSocketAsync(x => Task.FromResult <WStreamSocket>(new Interceptor(x, out clientData)) ); var abw = new AsyncBinaryWriter(connection); for (int i = 0; i < 100000; i++) { await abw.WriteAsync(i); } await abw.FlushAsync(); await Task.Delay(1000); Assert.Equal(4 * 100000, clientData.BytesWritten); Assert.Equal(4 * 100000, serverData.BytesRead); client.Dispose(); server.Dispose(); }
public async Task Test() { InterceptData clientData = null, serverData = null; // create the server var server = new WsServer(); await server.StartAsync(new IPEndPoint(IPAddress.Any, 8080), async stream => { // measure server data await stream.WrapSocketAsync(x => // create a new interceptor Task.FromResult <WStreamSocket>(new Interceptor(x, out serverData)) ); // called when a client connects await stream.WriteAsync(BitConverter.GetBytes(DateTime.Now.ToBinary())); await stream.CloseAsync(); }); // start client var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://localhost:8080")); // measure client data await connection.WrapSocketAsync(x => // create a new interceptor Task.FromResult <WStreamSocket>(new Interceptor(x, out clientData)) ); // read data var binReader = new BinaryReader(connection); Console.WriteLine($"Current time is {DateTime.FromBinary(binReader.ReadInt64())}"); Console.WriteLine($"Intercepted Data from client - Written {clientData.BytesWritten} / Read {clientData.BytesRead}"); Console.WriteLine($"Intercepted Data from server - Written {serverData.BytesWritten} / Read {serverData.BytesRead}"); // cleanup client.Dispose(); server.Dispose(); }
public static async Task Start() { try { log.LogInformation("Инициализация"); wsTunnelConfig = ConfigWatcher.GetSection("wstunnel").ConvertValue <WSTunnelConfig>(); client = new WsClient(); await client.OpenManagerTunnel(wsTunnelConfig, DisconnectTunnel, DisconnectSocket); await client.Auth(); var tunnelGuid = await client.OpenDataTunnel(DataReceiver, DisconnecDataTunnel); dataConnections.TryAdd(tunnelGuid, new WSDataConnectionInfo { TunnelId = tunnelGuid }); var testObj = new EchoReq { ReqId = Guid.NewGuid(), Timestamp = DateTime.UtcNow }; var buffer = Encoding.UTF8.GetBytes(testObj.ToJson()); await client.SendData(tunnelGuid, Guid.Empty, buffer, buffer.Length); log.LogInformation($"Послали echo - {testObj.ReqId}"); server = new Socks5Server(); server.Start(wsTunnelConfig.Port, RequireNewConnection, TransferData, CloseSocket); } catch (Exception e) { log.LogError($"Ошибка инициализации: {e.Message}"); server?.Dispose(); client?.Dispose(); } }
public async Task Test() { // create the server var server = new WsServer(); await server.StartAsync(new IPEndPoint(IPAddress.Any, 8080), async stream => { // called when a client connects var br = new BinaryWriter(stream); while (stream.Connected) { var bytes = Encoding.ASCII.GetBytes($"Hello from Server! {DateTime.Now}"); br.Write(bytes.Length); br.Write(bytes); await Task.Delay(1000); } await stream.CloseAsync(); }); // start client var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://localhost:8080")); // read data var binReader = new BinaryReader(connection); for (int i = 0; i < 100; i++) { int b = binReader.ReadInt32(); var bytesRead = binReader.ReadBytes(b); Console.WriteLine(Encoding.ASCII.GetString(bytesRead)); } // cleanup client.Dispose(); server.Dispose(); }
public async Task Test() { // create the server var server = new WsServer(); await server.StartAsync(new IPEndPoint(IPAddress.Any, 8080), async stream => { // called when a client connects await stream.WriteAsync(BitConverter.GetBytes(DateTime.Now.ToBinary())); await stream.CloseAsync(); }); // start client var client = new WsClient(); var connection = await client.ConnectAsync(new Uri("ws://localhost:8080")); // read data var binReader = new BinaryReader(connection); Console.WriteLine($"Current time is {DateTime.FromBinary(binReader.ReadInt64())}"); // cleanup client.Dispose(); server.Dispose(); }
public void Dispose() { connectedSubject?.Dispose(); WsClient?.Dispose(); }
private void OnApplicationQuit() { _client.Dispose(); }
void OnApplicationQuit() { client_.Dispose(); }
public static Task Stop() { server?.Dispose(); client?.Dispose(); return(Task.CompletedTask); }