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)); } }
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"); } }