示例#1
0
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection()
                           .AddLogging(x =>
            {
                x.ClearProviders();
                x.AddConsole();
            })
                           .BuildServiceProvider();

            var serviceDescriptor = new ServiceDiscoveryMessage()
            {
                IpAddress  = ByteString.CopyFrom(IPUtils.GetLocalIpAddress().GetAddressBytes()),
                Port       = 8765,
                ServerName = Environment.MachineName
            };

            var s = new Socket(new SocketInformation());

            var logger       = services.GetRequiredService <ILogger <PhoneRemoteServiceBroadcaster <IMessage> > >();
            var clientLogger = services.GetRequiredService <ILogger <PhoneRemoteClient <IMessage> > >();

            var rnd = new Random();

            var tcpClient = new PhoneRemoteClient <IMessage>(new ProtobufMessageSerializer(), true, clientLogger);
            var endpoint  = await tcpClient.DiscoverServerAsync <ServiceDiscoveryMessage>(CancellationToken.None);

            await tcpClient.ConnectAsync(new IPEndPoint(endpoint.Address, endpoint.Port), CancellationToken.None);

            while (true)
            {
                await tcpClient.SendAsync(new CursorAction { DX = rnd.Next(-100, 100), DY = rnd.Next(-100, 100) }, CancellationToken.None);
            }
        }
示例#2
0
        private Task StartConnecting(ServiceDiscoveryMessage message)
        {
            this.serverConnectCancel = CancellationTokenSource.CreateLinkedTokenSource(this.tokenSource.Token);

            var token = serverConnectCancel.Token;

            this.serverConnectTask = Task.Run(async() =>
            {
                while (!token.IsCancellationRequested)
                {
                    try
                    {
                        await this.tcpClient.ConnectAsync(new System.Net.IPEndPoint(message.Address, message.Port), token);
                        return;
                    }
                    catch
                    {
                    }

                    await Task.Delay(1000, token);
                }

                throw new TaskCanceledException();
            });

            return(this.serverConnectTask);
        }
示例#3
0
        private void OnServerDiscovery(object sender, PhoneRemoteClientEventArgs e)
        {
            this.discoveryMessage = e.Message;

            this.StopDiscover();
            this.StartConnecting(e.Message);
        }
示例#4
0
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection()
                           .AddLogging(x =>
            {
                x.ClearProviders();
                x.AddConsole();
            })
                           .BuildServiceProvider();

            var serviceDescriptor = new ServiceDiscoveryMessage()
            {
                IpAddress  = ByteString.CopyFrom(IPUtils.GetLocalIpAddress().GetAddressBytes()),
                Port       = 8765,
                ServerName = Environment.MachineName
            };

            var logger       = services.GetRequiredService <ILogger <PhoneRemoteServiceBroadcaster <IMessage> > >();
            var serverLogger = services.GetRequiredService <ILogger <PhoneRemoteServer <IMessage> > >();

            var serializer  = new ProtobufMessageSerializer();
            var broadcaster = new PhoneRemoteServiceBroadcaster <IMessage>(serializer, serviceDescriptor, logger);
            var server      = new PhoneRemoteServer <IMessage>(serializer, new IPEndPoint(new IPAddress(serviceDescriptor.IpAddress.Span), serviceDescriptor.Port), serverLogger);

            broadcaster.StartListenForClients();

            Console.WriteLine("Listening on local..");
            await server.WaitForConnectionAsync(CancellationToken.None);

            Console.WriteLine("Got connection. Listening for messages..");

            var cursor = CursorUtils.GetCursorInfo();

            await foreach (var action in server.WaitForMessageAsync <CursorAction>(CancellationToken.None))
            {
                //Console.SetCursorPosition(0, 2);

                //cursor.ptScreenPos.x += pos.DX;
                //cursor.ptScreenPos.y += pos.DY;

                //Console.WriteLine($"dx,dy={pos.DX},{pos.DY}");

                CursorUtils.DispatchMouseEvent(action);
            }
        }