private bool Switch; // To see if the server is BACK online to reconnect the plane //constructor public Form1() { InitializeComponent(); context = new InstanceContext(this); proxy = new AirplaneClient(context); CancelTokenSource = new CancellationTokenSource(); Token = CancelTokenSource.Token; Switch = false; connected = false; canAbort = false; Cancel_Request.Enabled = false; timer1.Interval = 1000; timer2.Interval = 30000; dialog = new DialogForm(); dialog.Show(); dialog.FormClosed += Dialog_FormClosed; this.FlightNumberAndFuelGenerator(); lb_flightNumber.Text = FlightNumber; _lock = new object(); progress = -1; progressTicks = 0; this.Undock.Enabled = false; statusDict = proxy.GetStatusDictionaryPilot(); }
//Checks server status. If server is on or not -Jose private void timer1_Tick(object sender, EventArgs e) { try { TcpClient tcp = new TcpClient(proxy.Endpoint.Address.Uri.Host, Convert.ToInt32(proxy.Endpoint.Address.Uri.OriginalString.TrimStart('h', 't', 't', 'p', '/', '/', 'l', 'o', 'c', 'a', 'l', 'h', 'o', 's', 't', ':').Split('/')[0])); lbl_serverStatus.Text = " I "; lbl_serverStatus.BackColor = Color.Green; if (Switch == true) { this.context = new InstanceContext(this); this.proxy = new AirplaneClient(context); CancelTokenSource = new CancellationTokenSource(); Token = CancelTokenSource.Token; if (connected == true) { lock (this._lock) { proxy.Connect(this.FlightNumber, this.FuelLevel, this.status); try { if (requestType == "TakeOff") { this.proxy.TakeOffRequestAsync(this.FlightNumber); } else if (requestType == "Land") { this.proxy.LandRequestAsync(this.FlightNumber); } else if (requestType == "Emergency") { this.proxy.EmergencyRequestAsync(this.FlightNumber); } } catch (Exception) { } } } Switch = false; } } catch (Exception) { CancelTokenSource.Cancel(); lbl_serverStatus.Text = "O"; lbl_serverStatus.BackColor = Color.Red; Switch = true; } // timer1.Stop(); // IPAddress ip = Dns.GetHostAddresses(proxy.Endpoint.Address.Uri.Host)[0]; //PingReply reply = ping.Send(ip); // pining = reply.Status == IPStatus.Success; // MessageBox.Show(pining.ToString()); // timer1.Start(); }
public void ExecuteEscort(string planeID) { logger.Info("Thread started"); logger.Info("Airplane ID is {0}", planeID); //7 начальный статус "в гараже" Busy var flag = true; while (flag) { var resp = GroundControlClient.StatusUpdate(Vehicle.Instance.stat); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { logger.Info("StatusUpdate: OK" + "Location: " + Vehicle.Instance.GetVehicleStatus().locationCode + " Status:" + Vehicle.Instance.GetVehicleStatus().status); flag = false; } } //7 найти где самолёт getTFInformation flag = true; var loc = ""; var req_loc = new LocateAirplaneRequest(); req_loc.identifier = planeID; while (flag) { var resp = GroundControlClient.FindAirplane(req_loc); if (resp.result == "Not found") { logger.Error("Airplane " + planeID + " location"); Thread.Sleep(5000); } else { logger.Info("Airplane: " + resp.identifier + " at " + resp.locationCode); loc = resp.locationCode; flag = false; } } //7 запросить разрешение на передвижение к самолёту flag = true; var req_perm = new PermissionRequest { from = Vehicle.Instance.GetVehicleStatus().locationCode, to = loc, service = Vehicle.Instance.GetVehicleStatus().service, identifier = Vehicle.Instance.GetVehicleStatus().identifier }; while (flag) { var resp = GroundControlClient.AskPermission(req_perm); if (resp.permission == "Denied") { logger.Error("Permission from " + req_perm.from + "to" + req_perm.to + "DENIED"); Thread.Sleep(5000); } else { logger.Info("Permission from: " + req_perm.from + "to" + req_perm.to + resp.permission); flag = false; } } //7 поменять статус на "в дороге" к самолёту flag = true; var stat = new Status { identifier = Vehicle.Instance.stat.identifier, locationCode = req_perm.from + "-" + req_perm.to, status = "Moving" }; while (flag) { var resp = GroundControlClient.StatusUpdate(stat); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat); logger.Info("StatusUpdate: OK" + "Location: " + Vehicle.Instance.GetVehicleStatus().locationCode + " Status:" + Vehicle.Instance.GetVehicleStatus().status); flag = false; } } //таймаут(еду до самолёта) logger.Info("Moving...."); Thread.Sleep(7000); //7 поменять статус на "Busy" на ВПП flag = true; var stat1 = stat; stat1.status = "Busy"; stat1.locationCode = req_perm.to; while (flag) { var resp = GroundControlClient.StatusUpdate(stat1); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat1); logger.Info("StatusUpdate: OK" + "Location: " + stat1.locationCode + " Status:" + stat1.status); flag = false; } } //14 контакт с самолётом /plane/ready_followme/*id* flag = true; while (flag) { var resp = AirplaneClient.AreYouReady(planeID); if (resp == "0") { logger.Error("Airplane is not ready to go"); Thread.Sleep(5000); } else { logger.Info("Airplane ready to go"); flag = false; } } //запросить разрешение на движение к гейту flag = true; var req_perm2 = new PermissionRequest { from = req_perm.to, to = "Gate", service = Vehicle.Instance.GetVehicleStatus().service, identifier = Vehicle.Instance.GetVehicleStatus().identifier }; while (flag) { var resp = GroundControlClient.AskPermission(req_perm2); if (resp.permission == "Denied") { logger.Error("Permission from " + req_perm2.from + "to" + req_perm2.to + "DENIED"); Thread.Sleep(5000); } else { logger.Info("Permission from: " + req_perm2.from + "to" + req_perm2.to + resp.permission); flag = false; } } //поменять статус на "в дороге" к гейту flag = true; var stat2 = new Status { service = Vehicle.Instance.GetVehicleStatus().service, identifier = Vehicle.Instance.GetVehicleStatus().identifier, locationCode = req_perm2.from + "-" + req_perm2.to, status = "Moving" }; while (flag) { var resp = GroundControlClient.StatusUpdate(stat2); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat2); logger.Info("StatusUpdate: OK" + "Location: " + stat2.locationCode + " Status:" + stat2.status); flag = false; } } //поменять статус самолёта на "в дороге" к гейту flag = true; var stat_pl1 = new Status { service = "Air Facility", identifier = planeID, locationCode = req_perm2.from + "-" + req_perm2.to, status = "Moving" }; while (flag) { var resp = GroundControlClient.StatusUpdate(stat_pl1); if (resp.error == "true") { logger.Error("StatusUpdate: " + "Airplane:" + planeID); Thread.Sleep(5000); } else { logger.Info("StatusUpdate: OK" + "Airplane:" + planeID + "Location: " + stat_pl1.locationCode + " Status:" + stat_pl1.status); flag = false; } } //через таймаут поддерживать связь с самолётом(Move) //7 поменять статус на "idle" у гейта flag = true; var stat3 = new Status { identifier = Vehicle.Instance.stat.identifier, locationCode = req_perm2.to, status = "Idle" }; while (flag) { var resp = GroundControlClient.StatusUpdate(stat3); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat3); logger.Info("StatusUpdate: OK" + "Location: " + stat3.locationCode + " Status:" + stat3.status); flag = false; } } //14 Сообщить самолёту что приехали (статус 3) flag = true; while (flag) { var resp = AirplaneClient.StatusUpdate(planeID, "3"); if (resp == "0") { logger.Error("Direct airplane StatusUpdate"); Thread.Sleep(5000); } else { logger.Info("Direct airplane StatusUpdate: OK"); flag = false; } } //7 поменять статус самолёта на "Busy" у гейта flag = true; var stat_pl2 = stat3; stat_pl2.service = "Air Facility"; stat_pl2.identifier = planeID; stat_pl2.status = "Busy"; while (flag) { var resp = GroundControlClient.StatusUpdate(stat_pl2); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { logger.Info("StatusUpdate: OK" + "Airplane:" + planeID + "Location: " + stat_pl2.locationCode + " Status:" + stat_pl2.status); flag = false; } } //сообщить 8, что выполнено // // // // // //7 запросить разрешение уехать в гараж flag = true; var req_perm3 = req_perm2; req_perm3.from = stat3.locationCode; req_perm3.to = "Garage"; while (flag) { var resp = GroundControlClient.AskPermission(req_perm3); if (resp.permission == "Denied") { logger.Error("Permission from " + req_perm3.from + " to " + req_perm3.to + " DENIED"); Thread.Sleep(5000); } else { logger.Info("Permission from: " + req_perm3.from + " to " + req_perm3.to + " " + resp.permission); flag = false; } } //обновить статус на Moving в гараж flag = true; var stat4 = stat2; stat4.locationCode = stat3.locationCode + "-" + req_perm3.to; while (flag) { var resp = GroundControlClient.StatusUpdate(stat4); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat4); logger.Info("StatusUpdate: OK" + "Location: " + stat4.locationCode + " Status:" + stat4.status); flag = false; } } //таймаут(еду в гараж) logger.Info("Moving...."); Thread.Sleep(7000); //обновить статус Idle в гараже flag = true; var stat5 = stat3; stat5.locationCode = req_perm3.to; while (flag) { var resp = GroundControlClient.StatusUpdate(stat5); if (resp.error == "true") { logger.Error("StatusUpdate: " + resp.description); Thread.Sleep(5000); } else { Vehicle.Instance.SetVehicleStatus(stat5); logger.Info("StatusUpdate: OK" + "Location: " + stat5.locationCode + " Status:" + stat5.status); flag = false; } } }