public DroneApi() { this.webserver = new HttpServer("http", "*", 6606); this.drone = new Drone(); drone.ThrottleChanged += (value) => webserver.Broadcast(WebSocketMessageFactory.CreateThrottlesMessage(value)); drone.PositionChanged += (value) => webserver.Broadcast(WebSocketMessageFactory.CreatePositionMessage(value)); drone.OrientationChanged += (value) => webserver.Broadcast(WebSocketMessageFactory.CreateOrientationMessage(value)); this.webserver.SocketConnected += HandleSocketConnect; Task.Run(async() => { try { AddActions(); await drone.Init(); drone.StartOrientationThread(); webserver.AddAuthorizationMethod(new TimeBasedHmacAuthorizationHandler("mySecret", new TimeSpan(0, 0, 3), 2)); webserver.Start(); } catch (Exception exception) { Console.WriteLine($"{exception.Message}\n{exception.StackTrace}"); } }); }
private async void HandleSocketConnect(WebSocket socket) { await Task.WhenAll(new Task[] { socket.SendAsync(WebSocketMessageFactory.CreateAuthorizedMessage(), System.Net.WebSockets.WebSocketMessageType.Binary, true, new CancellationToken()), socket.SendAsync(WebSocketMessageFactory.CreateFlagsMessage( (drone.AreMotorsEnabled ? DroneFlags.MotorsEnabled : 0) | (drone.IsGpsEnabled ? DroneFlags.GpsEnabled : 0) | (drone.IsOrientationSensorEnabled ? DroneFlags.OrientationSensorEnabled : 0) | (drone.IsOrientationAssistEnabled ? DroneFlags.OrientationAssistEnabled : 0) ), System.Net.WebSockets.WebSocketMessageType.Binary, true, new CancellationToken()) }); }