using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Net.Http; using System.Web; using System.Windows.Forms; namespace SatlocCloud.API.Sample { public partial class frmMain : Form { #region Variables private HttpClient _httpClient; private string _baseUrl; private string _isAliveAPI; private string _authenticateUserAPI; private string _getAircraftListAPI; private string _uploadJobAPI; private string _getAircraftLogsAPI; private string _getAircraftLogDataAPI; private User _user; private List _aircraftList = new List(); private Guid _selectAircraftId; private string _selectJobFile; private List _aircraftLogList; private AircraftLog _selectedLogData; private const string PMD_EXT = ".pmd"; private const string PMH_EXT = ".pmh"; #endregion #region Constructor public frmMain() { InitializeComponent(); } #endregion #region Events private void frmMain_Load(object sender, EventArgs e) { // get values from App Config _baseUrl = ConfigurationManager.AppSettings["BaseUrl"].ToString(); _isAliveAPI = ConfigurationManager.AppSettings["IsAliveAPI"].ToString(); _authenticateUserAPI = ConfigurationManager.AppSettings["AuthenticateUserAPI"].ToString(); _getAircraftListAPI = ConfigurationManager.AppSettings["GetAircraftListAPI"].ToString(); _uploadJobAPI = ConfigurationManager.AppSettings["UploadJobAPI"].ToString(); _getAircraftLogsAPI = ConfigurationManager.AppSettings["GetAircraftLogsAPI"].ToString(); _getAircraftLogDataAPI = ConfigurationManager.AppSettings["GetAircraftLogDataAPI"].ToString(); var userLogin = ConfigurationManager.AppSettings["UserLogin"].ToString(); var password = ConfigurationManager.AppSettings["Password"].ToString(); // instanciate HTTP Client _httpClient = new HttpClient { BaseAddress = new Uri(_baseUrl) }; // check API service is available if (IsAlive()) { // check if Authenticate API User is successful if(AuthenticateUser(userLogin, password)) { // get list of aircraft associated with the Company GetAircraftList(); // enable controls if data exist if(_aircraftList.Count > 0) { // enable group box grpAPIData.Enabled = true; // load Aircraft List DisplayAircraftList(); } } } } private void lstAircraft_SelectedIndexChanged(object sender, EventArgs e) { // select selected aircraft _selectAircraftId = ((Aircraft)lstAircraft.SelectedItem).Id; // load selected aircraft log list GetAircraftLogs(); // display selected aircraft log list DisplayAircraftLogs(); // enable download all logs btnDownloadSelectedLog.Enabled = _selectedLogData != null && !string.IsNullOrEmpty(txtDownloadPath.Text); // enable download all logs btnDownloadAllLogs.Enabled = _aircraftLogList.Count > 0 && !string.IsNullOrEmpty(txtDownloadPath.Text); } private void btnSelectJob_Click(object sender, EventArgs e) { SelectJob(); } private void btnUploadSelectedJob_Click(object sender, EventArgs e) { UploadSelectedJobData(_selectJobFile, _selectAircraftId, txtNotes.Text); } private void btnUploadMulitpleJobs_Click(object sender, EventArgs e) { UploadMultipeJobData(); } private void lstLogList_SelectedIndexChanged(object sender, EventArgs e) { // set seleted log data _selectedLogData = (AircraftLog)lstLogList.SelectedItem; // enable download log btnDownloadSelectedLog.Enabled = !string.IsNullOrEmpty(txtDownloadPath.Text); } private void btnSelectPath_Click(object sender, EventArgs e) { using (var fldrDlg = new FolderBrowserDialog()) { // quickly set download path if (fldrDlg.ShowDialog() == DialogResult.OK) { //fldrDlg.SelectedPath -- your result txtDownloadPath.Text = fldrDlg.SelectedPath; // enable download selected log btnDownloadSelectedLog.Enabled = _selectedLogData != null; // enable download all logs btnDownloadAllLogs.Enabled = _aircraftLogList.Count > 0; } } } private void btnDownloadSelectedLog_Click(object sender, EventArgs e) { DownloadSelectedLogData(); } private void btnDownloadAllLogs_Click(object sender, EventArgs e) { DownloadAllLogData(); } #endregion #region Private Methods private bool IsAlive() { var returnData = false; try { // create uri with parameters var builder = new UriBuilder(_baseUrl + _isAliveAPI); // initialize http client var client = new HttpClient(); // execute get var response = client.GetAsync(builder.Uri).Result; returnData = GetBooleanResponse(response); } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } return returnData; } private bool AuthenticateUser(string userLogin, string password) { var returnData = false; try { // instanciate client var client = new HttpClient { BaseAddress = new Uri(_baseUrl) }; // create uri with parameters var builder = new UriBuilder(_baseUrl + _authenticateUserAPI); builder.Query = "userLogin=" + HttpUtility.UrlEncode(userLogin) + "&password=" + HttpUtility.UrlEncode(password); var response = client.GetAsync(builder.Uri).Result; if (response.IsSuccessStatusCode) //User should be returned { // deserialize data local object APIUser _user = response.Content.ReadAsAsync().Result; returnData = true; } else { MessageBox.Show(response.ReasonPhrase.ToString()); } } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } return returnData; } public void GetAircraftList() { try { // create uri with parameters var builder = new UriBuilder(_baseUrl + _getAircraftListAPI); builder.Query = "userId=" + _user.UserId + "&companyId=" + _user.CompanyId; // execute get var response = _httpClient.GetAsync(builder.Uri).Result; _aircraftList = response.Content.ReadAsAsync>().Result; } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } public void GetAircraftLogs() { try { // create uri with parameters var builder = new UriBuilder(_baseUrl + _getAircraftLogsAPI); builder.Query = "userId=" + _user.UserId + "&aircraftId=" + _selectAircraftId; // execute get var response = _httpClient.GetAsync(builder.Uri).Result; _aircraftLogList = response.Content.ReadAsAsync>().Result; } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } private void UploadSelectedJobData(string filePath, Guid aircraftId, string notes = "") { HttpResponseMessage uploadStatus = null; try { var fileName = Path.GetFileName(filePath); var ext = Path.GetExtension(filePath).ToLower(); // create job package and job data object var jobPackage = new JobPackage { CompanyId = _user.CompanyId, UserId = _user.UserId }; var jobDataModel = new JobDataModel(); // check ext type if (ext.Equals(PMD_EXT)) { // load original data var byteArray = File.ReadAllBytes(filePath); jobDataModel = new JobDataModel { AircraftId = aircraftId, JobData = byteArray, JobName = fileName, Notes = notes }; jobPackage.JobDataList.Add(jobDataModel); // check if accompanying data exist if (File.Exists(filePath.ToLower().Replace(PMD_EXT, PMH_EXT))) { // load accompanying data var stringData = File.ReadAllText(filePath.ToLower().Replace(PMD_EXT, PMH_EXT)); jobDataModel = new JobDataModel { AircraftId = aircraftId, JobData = stringData, JobName = fileName.ToLower().Replace(PMD_EXT, PMH_EXT) }; jobPackage.JobDataList.Add(jobDataModel); } } else if (ext.Equals(PMH_EXT)) { // load orginal data var stringData = File.ReadAllText(filePath); jobDataModel = new JobDataModel { AircraftId = aircraftId, JobData = stringData, JobName = fileName, Notes = notes }; jobPackage.JobDataList.Add(jobDataModel); // check if accompanying data exist if (File.Exists(filePath.ToLower().Replace(PMH_EXT, PMD_EXT))) { // load data var byteArray = File.ReadAllBytes(filePath.ToLower().Replace(PMH_EXT, PMD_EXT)); jobDataModel = new JobDataModel { AircraftId = aircraftId, JobData = byteArray, JobName = fileName.ToLower().Replace(PMH_EXT, PMD_EXT) }; jobPackage.JobDataList.Add(jobDataModel); } } else // handle regular job file { var stringData = File.ReadAllText(filePath); jobDataModel = new JobDataModel { AircraftId = aircraftId, JobData = stringData, JobName = fileName, Notes = notes }; jobPackage.JobDataList.Add(jobDataModel); } // POST Json var jsonData = JsonConvert.SerializeObject(jobPackage); uploadStatus = _httpClient.PostAsJsonAsync(_baseUrl + _uploadJobAPI, jsonData).Result; // display notification if (uploadStatus.StatusCode == System.Net.HttpStatusCode.OK) UploadJobSuccessful(); } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } private void UploadMultipeJobData() { HttpResponseMessage uploadStatus = null; try { // load multiple jobs var jobFile = File.ReadAllText(@"C:\__1 SATLOC\Projects\SampleFiles\SampleJob1.job"); var textFile = File.ReadAllText(@"C:\__1 SATLOC\Projects\SampleFiles\SampleJob3.PMH"); var byteArray = File.ReadAllBytes(@"C:\__1 SATLOC\Projects\SampleFiles\SampleJob3.PMD"); // instanciate job Package var jobPackage = new JobPackage { CompanyId = _user.CompanyId, UserId = _user.UserId }; // instanciate job data model var jobDataModel = new JobDataModel { AircraftId = _selectAircraftId, JobData = byteArray, JobName = "SampleJob3.PMD" }; // add to job package jobPackage.JobDataList.Add(jobDataModel); // instanciate another job data model jobDataModel = new JobDataModel { AircraftId = _selectAircraftId, JobData = textFile, JobName = "SampleJob3.PMH" }; jobPackage.JobDataList.Add(jobDataModel); jobDataModel = new JobDataModel { AircraftId = _selectAircraftId, JobData = jobFile, JobName = "SampleJob1.job" }; jobPackage.JobDataList.Add(jobDataModel); // POST Json var jsonData = JsonConvert.SerializeObject(jobPackage); uploadStatus = _httpClient.PostAsJsonAsync(_baseUrl + _uploadJobAPI, jsonData).Result; // display notification if (uploadStatus.StatusCode == System.Net.HttpStatusCode.OK) UploadJobSuccessful(); } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } private void UploadJobSuccessful() { MessageBox.Show("Upload Job(s) completed successfully!"); } private void DownloadLogSuccessful() { MessageBox.Show("Download Log(s) completed successfully!"); } public void DownloadSelectedLogData() { try { // create uri with parameters var builder = new UriBuilder(_baseUrl + _getAircraftLogDataAPI); builder.Query = "userId=" + _user.UserId + "&logId=" + _selectedLogData.Id; // execute get var response = _httpClient.GetAsync(builder.Uri).Result; var aircraftLogData = response.Content.ReadAsAsync().Result; // write file to File.WriteAllBytes(Path.Combine(txtDownloadPath.Text, aircraftLogData.LogFileName), aircraftLogData.LogFile); DownloadLogSuccessful(); } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } public void DownloadAllLogData() { try { // iterate thru log list foreach (var logData in _aircraftLogList) { // create uri with parameters var builder = new UriBuilder(_baseUrl + _getAircraftLogDataAPI); builder.Query = "userId=" + _user.UserId + "&logId=" + logData.Id; // execute get var response = _httpClient.GetAsync(builder.Uri).Result; var aircraftLogData = response.Content.ReadAsAsync().Result; // write file to File.WriteAllBytes(Path.Combine(txtDownloadPath.Text, aircraftLogData.LogFileName), aircraftLogData.LogFile); } DownloadLogSuccessful(); } catch (Exception ex) { // Show exception MessageBox.Show(ex.ToString()); } } private void DisplayAircraftList() { // populate Aircraft Combo lstAircraft.ValueMember = "Id"; lstAircraft.DisplayMember = "TailNumber"; lstAircraft.DataSource = _aircraftList; } private void DisplayAircraftLogs() { // reset lstLogList.DataSource = null; // populate Aircraft Combo lstLogList.ValueMember = "Id"; lstLogList.DisplayMember = "LogFileName"; lstLogList.DataSource = _aircraftLogList; } private static bool GetBooleanResponse(HttpResponseMessage response) { // return boolean result return response.IsSuccessStatusCode ? JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result) : false; } private void SelectJob() { if (openFileDialog.ShowDialog() == DialogResult.OK) { //Get the path of specified file _selectJobFile = openFileDialog.FileName; // set filename on textbox txtJobName.Text = openFileDialog.SafeFileName; // enable job upload btnUploadSelectedJob.Enabled = _selectAircraftId != Guid.Empty; } } #endregion } }