Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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));
                }
            }
        }
Ejemplo n.º 3
0
        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));
                }
            }
        }