Пример #1
0
 public Drone(DronePost.DataModel.Drone drone, IMessageHandlerDrone handler)
 {
     Id              = drone.Id;
     Latitude        = drone.Latitude;
     Longitude       = drone.Longitude;
     Model           = drone.Model;
     _batteryCharge  = drone.Model.BatteryCapacity;
     _tasks          = new Queue <DroneTask>();
     _messageHandler = handler;
 }
Пример #2
0
 public void CheckOut(DronePost.DataModel.Drone drone)
 {
     base.Channel.CheckOut(drone);
 }
Пример #3
0
 public System.Threading.Tasks.Task CheckInAsync(DronePost.DataModel.Drone drone)
 {
     return(base.Channel.CheckInAsync(drone));
 }
Пример #4
0
 public System.Threading.Tasks.Task <int> RegisterDroneAsync(DronePost.DataModel.Drone drone)
 {
     return(base.Channel.RegisterDroneAsync(drone));
 }
Пример #5
0
 public int RegisterDrone(DronePost.DataModel.Drone drone)
 {
     return(base.Channel.RegisterDrone(drone));
 }
Пример #6
0
        private void Simulation()
        {
            _currentTaskIsFinished = true;
            while (_isWorking)
            {
                if (_tasks.Count > 0)
                {
                    DoNextTask();
                    _currentTaskIsFinished = false;
                    switch (_currentTask.Type)
                    {
                    case DroneTaskType.TakePackage:

                        break;

                    case DroneTaskType.GoToStation:
                        Log($"moving to statation {_currentTask.Station.Id}");
                        // todo over time
                        float distanceLat = Math.Abs(_currentTask.Station.Latitude - Latitude);
                        float distanceLon = Math.Abs(_currentTask.Station.Longitude - Longitude);
                        int   ticks       = (int)Math.Sqrt(Math.Pow(distanceLat, 2) + Math.Pow(distanceLon, 2));
                        distanceLat *= Latitude > _currentTask.Station.Latitude ? 1 : -1;
                        distanceLon *= Longitude > _currentTask.Station.Longitude ? 1 : -1;
                        ticks       %= 100;
                        for (int i = 0; i < ticks; i++)
                        {
                            Thread.Sleep(5000);
                            Latitude  += distanceLat / 100;
                            Longitude += distanceLon / 100;
                        }

                        Latitude  = _currentTask.Station.Latitude;
                        Longitude = _currentTask.Station.Longitude;
                        string address = "http://localhost:5000/Station/" + _currentTask.Station.Id;
                        StationServiceClient      stationServiceClient = new StationServiceClient(new WSHttpBinding(), new EndpointAddress(new Uri(address)));
                        DronePost.DataModel.Drone tmpDrone             = new DronePost.DataModel.Drone()
                        {
                            Id        = this.Id,
                            Longitude = this.Longitude,
                            Latitude  = this.Latitude,
                            Model     = this.Model
                        };
                        stationServiceClient.CheckIn(tmpDrone);
                        Log($"arrived to statation {_currentTask.Station.Id}");
                        break;

                    case DroneTaskType.LeavePackage:

                        break;

                    case DroneTaskType.ChargeAtStation:

                        break;
                    }
                    _currentTaskIsFinished = true;
                }
                else
                {
                    Thread.Sleep(5000); // Wait 5 secends for new tasks.
                }
            }
        }