/// <summary> /// Uploads the APK and its details as entered on the form to the web service. /// A progress bar is shown duting this progress. /// </summary> private void UploadPackage() { try { if (!webService.TestWebService()) { MessageBox.Show("Cannot reach web service at " + webService.Endpoint + "."); return; } fragmentSize = Convert.ToInt32(comboSize.SelectedItem); fragments = SplitPackageIntoFragments(package, fragmentSize); if (webService.CheckForActiveUploads(packageDetails)) { var dialogResult = MessageBox.Show("Package is already being uploaded. Do you want to cancel that upload and proceed with this one?", "Duplicate Upload", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.Yes) { var t = webService.CancelUpload(packageDetails); } else { return; } } var result = webService.StartUpload(packageDetails, package.Length, Convert.ToInt32(comboSize.SelectedItem)); Uploading = true; if (!result) { MessageBox.Show("Error while initiating upload. "); } else { MaximumSize = new System.Drawing.Size(Width, 270); MinimumSize = new System.Drawing.Size(Width, 270); Size = new System.Drawing.Size(Width, 270); barUploadProgress.Value = 0; barUploadProgress.Refresh(); lblUploadMsg.Refresh(); int retryMax = 3; int retrycounter = 0; int currentIndex = 0; while (currentIndex < fragments.Count) { barUploadProgress.Value = (int)(((currentIndex + 1) / (float)fragments.Count) * 100); barUploadProgress.Refresh(); lblUploadMsg.Refresh(); var packageFragment = new Fragment(); packageFragment.PackageDetails = packageDetails; packageFragment.Data = fragments[currentIndex]; var fragmentResult = webService.UploadNextFragment(packageFragment); while (!fragmentResult && retrycounter < retryMax) { retrycounter++; fragmentResult = webService.UploadNextFragment(packageFragment); } if (retrycounter == retryMax && !fragmentResult) { break; } else { currentIndex++; } } if (currentIndex == fragments.Count) { result = webService.FinishUpload(packageDetails); if (result) { Uploading = false; MessageBox.Show("Succesfully uploaded " + this.packageDetails.Name + " " + this.packageDetails.Version + " to server"); Close(); } } else { MessageBox.Show("Error occured while uploading fragment " + (currentIndex + 1) + " of " + fragments.Count + ". "); webService.CancelUpload(packageDetails); } } } catch (Exception e) { LoggingControl.Log("Error occured while uploading package.", e); MessageBox.Show("Error occured while uploading package."); webService.CancelUpload(packageDetails); Close(); } }