Esempio n. 1
0
 private void Messenger_MessageReceived(object sender, WebsocketReceiveEventArgs e)
 {
     try
     {
         // TODO: type is response, not command
         var response = Responseo.Parse(e.Message);
         if (response.Sequence == 0)
         {
             // TODO: message type
             Broadcast?.Invoke(this, EventArgs.Empty);
         }
         else
         {
             if (commandCompletionSources.TryRemove(response.Sequence, out var tcs))
             {
                 // TODO: outcome
                 tcs.TrySetResult(response);
             }
             else
             {
                 // TODO: desync? throw?
             }
         }
     }
     catch (FormatException)
     {
         MessageError?.Invoke(this, EventArgs.Empty);
     }
 }
        public Responseo BeginProcess(Commando command)
        {
            switch (command.Action)
            {
            case CommandAction.MouseMove:
                var(deltaX, deltaY) = command.GetInts();
                MoveMouse(deltaX, deltaY);
                return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));

            case CommandAction.MouseSet:
                var(xPosition, yPosition) = command.GetInts();
                SetMouse(xPosition, yPosition);
                return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));

            case CommandAction.MouseClick:
                var clickButton = command.GetEnum <MouseButton>();
                ClickMouse(clickButton);
                return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));

            case CommandAction.MouseWheel:
                var(wheelDirection, wheelAmount) = command.GetEnumInt <MouseWheelDirection>();
                WheelMouse(wheelDirection, wheelAmount);
                return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));

            default:
                return(Responseo.CreateResponse(command, CommandDispatchResult.Nack));
            }
        }
 public Responseo BeginProcess(Commando command)
 {
     if (!CanProcess(command.Action))
     {
         throw new NotSupportedException("Command not supported");
     }
     _ = messenger.SendAsync(command.ToString());
     return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));
 }
 public Responseo Process(Commando command)
 {
     if (hostProcessor.CanProcess(command.Action))
     {
         hostProcessor.BeginProcess(command);
         return(Responseo.CreateResponse(command, CommandDispatchResult.Ack));
     }
     else if (BrowserProcessor == null)
     {
         return(Responseo.CreateResponse(command, CommandDispatchResult.NoHandler));
     }
     else if (BrowserProcessor.CanProcess(command.Action))
     {
         return(BrowserProcessor.BeginProcess(command));
     }
     else
     {
         return(Responseo.CreateResponse(command, CommandDispatchResult.NoHandler));
     }
 }
Esempio n. 5
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("What port you running on?");
            var portEntry = Console.ReadLine();

            if (int.TryParse(portEntry, out var port))
            {
                using (var c = await Client.ConnectNewAsync(new Uri($"ws://localhost:{port}/ws")))
                {
                    c.Broadcast    += (sender, e) => Console.WriteLine("New broadcast: {0}", e);
                    c.MessageError += (sender, e) => Console.WriteLine("Say what now?! {0}", e);
                    try
                    {
                        while (true)
                        {
                            Console.WriteLine("[S]tate; [M]ove; [ESC] to quit");
                            var key = Console.ReadKey(true);
                            switch (key.Key)
                            {
                            case ConsoleKey.Escape:
                                Console.WriteLine("Quitting.");
                                return;

                            case ConsoleKey.Z:
                                Console.Write("Wiggiling mouse until intterupted (any key) ");
                                async Task <Responseo> GetRandomMoveResult()
                                {
                                    Responseo result = default(Responseo);

                                    while (!Console.KeyAvailable)
                                    {
                                        var random = new Random();
                                        result = await c.MoveRelative(random.Next(-5, 5), random.Next(-5, 5));

                                        if (result.DispatchResult != CommandDispatchResult.Ack)
                                        {
                                            break;
                                        }
                                    }
                                    if (Console.KeyAvailable)
                                    {
                                        Console.ReadKey();
                                    }
                                    return(result);
                                }
                                Console.WriteLine(await GetRandomMoveResult());
                                break;

                            case ConsoleKey.M:
                                Console.WriteLine("Moving: ");
                                Console.WriteLine(await c.MoveAndClick());
                                break;

                            case ConsoleKey.S:
                                Console.Write("Requesting state: ");
                                Console.WriteLine(await c.RequestState());
                                break;

                            default:
                                Console.WriteLine("Could not parse command. Try again or enter empty line to quit.");
                                break;
                            }
                        }
                    }
                    catch (TaskCanceledException)
                    {
                        // the task will be cancelled if the server gets closed while waiting on the task
                        // in this case, we can just re-enter the loop.
                        Console.WriteLine("Remote server closed connection. Goodbye.");
                        return;
                    }
                }
            }
            else
            {
                Console.WriteLine($"{portEntry} is not an integer. Better luck next time");
            }
        }