static async Task Main(string[] args) { Encoding Utf8Encoding = new UTF8Encoding(); var pipelineFilter = new CommandLinePipelineFilter { Decoder = new DefaultStringPackageDecoder() }; IEasyClient <StringPackageInfo> client = new EasyClient <StringPackageInfo>(pipelineFilter); StringPackageInfo package = null; client.PackageHandler += async(s, p) => { package = p; if (string.IsNullOrWhiteSpace(p.Key)) { Console.WriteLine("unexpected result ---------"); } else { Console.WriteLine(p.Key); } await Task.CompletedTask; }; var connected = await client.ConnectAsync(new IPEndPoint(IPAddress.Loopback, 8899)); Console.WriteLine(connected); client.StartReceive(); byte[] bytes1 = Utf8Encoding.GetBytes(new char[] { (char)0x00, (char)0x00, (char)0x01, (char)0x61 }); byte[] bytes2 = Utf8Encoding.GetBytes(new char[] { (char)0x00, (char)0x00, (char)0x01, (char)0x61, (char)0x62 }); byte[] bytes3 = Utf8Encoding.GetBytes(new char[] { (char)0x00, (char)0x00, (char)0x01, (char)0x61 }); byte[] bytes4 = Utf8Encoding.GetBytes(new char[] { (char)0x00, (char)0x00, (char)0x01, (char)0x61 }); await client.SendAsync(bytes1); //expected result: a, true result: a await Task.Delay(1000); await client.SendAsync(bytes2); //expected result: a, true result: a await Task.Delay(1000); await client.SendAsync(bytes3); //expected result: a, true result: null await Task.Delay(1000); await client.SendAsync(bytes4); //expected result: a, tree result: null await Task.Delay(1000); await client.CloseAsync(); }
public async Task <IActionResult> Execute(CommandForm form) { var command = new Command { OperatorId = form.OperatorId, Ip = form.Ip, Content = form.Command }; string content; await using (var stream = new MemoryStream()) { command.WriteTo(stream); content = Encoding.UTF8.GetString(stream.ToArray()); } var pipelineFilter = new CommandLinePipelineFilter { Decoder = new PackageDecoder() }; var client = new EasyClient <PackageInfo>(pipelineFilter).AsClient(); var address = IPAddress.Parse(_serverIp); if (!await client.ConnectAsync(new IPEndPoint(address, _serverPort))) { return(StatusCode((int)HttpStatusCode.InternalServerError, "Failed to connect to the server.")); } await client.SendAsync(Encoding.UTF8.GetBytes($"{CommandKey.Connect} {ClientType.Short.ToString()}{Package.Terminator}")); await client.SendAsync(Encoding.UTF8.GetBytes($"{CommandKey.Execute} {content}{Package.Terminator}")); while (true) { var p = await client.ReceiveAsync(); if (p == null) { return(StatusCode((int)HttpStatusCode.InternalServerError, "Connection dropped.")); } if (!string.IsNullOrWhiteSpace(p.Content) && p.Content.Equals("Started", StringComparison.OrdinalIgnoreCase)) { await client.CloseAsync(); return(Ok(form.OperatorId)); } } }
public async Task <IActionResult> List() { var pipelineFilter = new CommandLinePipelineFilter { Decoder = new PackageDecoder() }; var client = new EasyClient <PackageInfo>(pipelineFilter).AsClient(); var address = IPAddress.Parse(_serverIp); if (!await client.ConnectAsync(new IPEndPoint(address, _serverPort))) { return(StatusCode((int)HttpStatusCode.InternalServerError, "Failed to connect to the server.")); } await client.SendAsync(Encoding.UTF8.GetBytes($"{CommandKey.Connect} {ClientType.Short.ToString()}{Package.Terminator}")); while (true) { var p = await client.ReceiveAsync(); if (p == null) { return(StatusCode((int)HttpStatusCode.InternalServerError, "Connection dropped.")); } switch (p.Key) { case CommandKey.Connected: await client.SendAsync(Encoding.UTF8.GetBytes($"{CommandKey.ListAgent}{Package.Terminator}")); break; default: var agents = JsonConvert.DeserializeObject <List <AgentInfo> >(p.Content); await client.CloseAsync(); return(Ok(agents)); } } }