Ejemplo n.º 1
0
        public async Task PublishZipDeploy(Site functionApp, Func <Task <Stream> > zipFileFactory)
        {
            await RetryHelper.Retry(async() =>
            {
                using (var handler = new ProgressMessageHandler(new HttpClientHandler()))
                    using (var client = GetRemoteZipClient(new Uri($"https://{functionApp.ScmUri}"), handler))
                        using (var request = new HttpRequestMessage(HttpMethod.Post, new Uri("api/zipdeploy", UriKind.Relative)))
                        {
                            request.Headers.IfMatch.Add(EntityTagHeaderValue.Any);

                            ColoredConsole.WriteLine("Creating archive for current directory...");

                            (var content, var length) = CreateStreamContentZip(await zipFileFactory());
                            request.Content           = content;

                            HttpResponseMessage response = null;
                            using (var pb = new SimpleProgressBar($"Uploading {Utilities.BytesToHumanReadable(length)}"))
                            {
                                handler.HttpSendProgress += (s, e) => pb.Report(e.ProgressPercentage);
                                response = await client.SendAsync(request);
                            }

                            if (response == null || !response.IsSuccessStatusCode)
                            {
                                throw new CliException($"Error uploading archive ({response.StatusCode}).");
                            }

                            ColoredConsole.WriteLine("Upload completed successfully.");
                        }
            }, 2);
        }
        /// <summary>
        /// 打开选定的文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void OpenFile_PreviewMouseLeftButtonUpAsync(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            e.Handled = true;
            TextBlock curTextBlock = sender as TextBlock;

            Lib.MemberFile SelectFile = curTextBlock.DataContext as Lib.MemberFile;
            if (SelectFile == null)
            {
                AppFuns.ShowMessage("未读到选取文件信息!", Caption: "错误", isErr: true);
                return;
            }
            ProgressMessageHandler progress = new ProgressMessageHandler();

            progress.HttpReceiveProgress += (object sender, HttpProgressEventArgs e) =>
            {
                SelectFile.DownIntProgress = e.ProgressPercentage;
            };

            string theDownFileName = await DataMemberFileRepository.DownloadFile(SelectFile, false, progress);

            if (theDownFileName != null)
            {
                SelectFile.DownIntProgress = 100;
                FileOperation.UseDefaultAppOpenFile(theDownFileName);
            }
            else
            {
                AppFuns.ShowMessage("文件下载失败,可能该文件已被删除!", Caption: "警告");
            }
            curTextBlock.IsEnabled = true;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Upload file from target path asynchronous
        /// </summary>
        /// <param name="url">URL for upload</param>
        /// <param name="sourceFileName">Target file name for upload</param>
        /// <param name="progress">Function for display progress upload</param>
        /// <returns>True if upload complete successful</returns>
        internal static async Task <bool> UploadFileAsync(string url, string sourceFileName, IProgress <double> progress = null)
        {
            bool success = false;
            ProgressMessageHandler progressHandler = new ProgressMessageHandler();
            HttpClient             client          = HttpClientFactory.Create(progressHandler);

            try
            {
                using (StreamContent streamContent = new StreamContent(new FileStream(sourceFileName, FileMode.Open, FileAccess.Read)))
                {
                    progressHandler.HttpSendProgress += (send, value) => progress?.Report(value.ProgressPercentage);
                    HttpResponseMessage response = await client.PutAsync(url, streamContent);

                    if (response.StatusCode == System.Net.HttpStatusCode.Created)
                    {
                        success = true;
                    }
                }
            }
            catch (Exception)
            {
                return(success);
            }

            return(success);
        }
Ejemplo n.º 4
0
        public HttpNetwork(string useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116")
        {
            _httpClientHandler = new HttpClientHandler {
                ClientCertificateOptions = ClientCertificateOption.Automatic,
                AllowAutoRedirect        = true,
                MaxAutomaticRedirections = 3,
                UseCookies            = true,
                CookieContainer       = new CookieContainer(),
                Credentials           = CredentialCache.DefaultCredentials,
                UseDefaultCredentials = true
            };

            ProgressMessageHandler = new ProgressMessageHandler();

            _httpClient = HttpClientFactory.Create(_httpClientHandler, ProgressMessageHandler);
            _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(useragent);
            _httpClient.Timeout = TimeSpan.FromMinutes(1);

            _httpClient.DefaultRequestHeaders.Accept.Clear();
            _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));
            _httpClient.DefaultRequestHeaders.ExpectContinue = false;

            RecivedData     = string.Empty;
            RecivedHttpCode = HttpStatusCode.Forbidden;
            RecivedUri      = new Uri("http://localhost/");
        }
Ejemplo n.º 5
0
        private static async Task UploadPackage(PushOptions options, PackageHelper packageHelper)
        {
            try
            {
                // HttpClient will use this event handler to give us
                // Reporting on how its progress the file upload
                var processMsgHandler = new ProgressMessageHandler(new HttpClientHandler());
                processMsgHandler.HttpSendProgress += (sender, e) =>
                {
                    // Could try to reimplement progressbar - but that library did not work in GH Actions :(
                    var percent = e.ProgressPercentage;
                };

                var keyParts        = packageHelper.SplitKey(options.ApiKey);
                var packageFileName = Path.GetFileName(options.Package);

                Console.WriteLine(Resources.Push_Uploading, packageFileName);

                var url = "/Umbraco/Api/ProjectUpload/UpdatePackage";

                using (var client = packageHelper.GetClientBase(url, keyParts.Token, keyParts.MemberId, keyParts.ProjectId))
                {
                    MultipartFormDataContent form = new MultipartFormDataContent();
                    var fileInfo = new FileInfo(options.Package);
                    var content  = new StreamContent(fileInfo.OpenRead());
                    content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
                    {
                        Name     = "file",
                        FileName = fileInfo.Name
                    };
                    form.Add(content);
                    form.Add(new StringContent(ParsePublishFlag(options.Publish)), "isCurrent");
                    form.Add(new StringContent(options.DotNetVersion), "dotNetVersion");
                    form.Add(new StringContent("package"), "fileType");
                    form.Add(GetVersionCompatibility(options.WorksWith), "umbracoVersions");

                    var httpResponse = await client.PostAsync(url, form);

                    if (httpResponse.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        packageHelper.WriteError(Resources.Push_ApiKeyInvalid);
                        Environment.Exit(5); // ERROR_ACCESS_DENIED
                    }
                    else if (httpResponse.IsSuccessStatusCode)
                    {
                        Console.WriteLine(Resources.Push_Complete, packageFileName);

                        // Response is not reported (at the moment)
                        // var apiReponse = await httpResponse.Content.ReadAsStringAsync();
                        // Console.WriteLine(apiReponse);
                    }
                }
            }
            catch (HttpRequestException ex)
            {
                // Could get network error or our.umb down
                Console.WriteLine(Resources.Error, ex);
                throw;
            }
        }
Ejemplo n.º 6
0
        public Networker(string useragent)
        {
            _cookies = new CookieContainer();

            _handler = new HttpClientHandler {
                ClientCertificateOptions = ClientCertificateOption.Automatic,
                AllowAutoRedirect        = true,
                MaxAutomaticRedirections = 3,
                UseCookies            = true,
                CookieContainer       = _cookies,
                Credentials           = CredentialCache.DefaultCredentials,
                UseDefaultCredentials = true
            };

            ProgressHandler = new ProgressMessageHandler();

            ProgressHandler.HttpSendProgress    += SendProgress;
            ProgressHandler.HttpReceiveProgress += RecvProgress;

            _client = HttpClientFactory.Create(_handler, ProgressHandler);
            _client.DefaultRequestHeaders.UserAgent.ParseAdd(useragent);
            _client.Timeout = TimeSpan.FromMinutes(30);

            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"));
            _client.DefaultRequestHeaders.ExpectContinue = false;
        }
Ejemplo n.º 7
0
        public async Task <DeployStatus> PerformServerSideBuild(Site functionApp, Func <Task <Stream> > zipFileFactory, Func <HttpClient, Task <DeployStatus> > deploymentStatusPollTask)
        {
            using (var handler = new ProgressMessageHandler(new HttpClientHandler()))
                using (var client = GetRemoteZipClient(new Uri($"https://{functionApp.ScmUri}"), handler))
                    using (var request = new HttpRequestMessage(HttpMethod.Post, new Uri(
                                                                    $"api/zipdeploy?isAsync=true&author={Environment.MachineName}", UriKind.Relative)))
                    {
                        ColoredConsole.WriteLine("Creating archive for current directory...");

                        request.Headers.IfMatch.Add(EntityTagHeaderValue.Any);

                        (var content, var length) = CreateStreamContentZip(await zipFileFactory());
                        request.Content           = content;
                        HttpResponseMessage response = await PublishHelper.InvokeLongRunningRequest(client, handler, request, length, "Uploading");

                        await PublishHelper.CheckResponseStatusAsync(response, "Uploading archive...");

                        // Streaming deployment status for Linux Server Side Build
                        DeployStatus status = await deploymentStatusPollTask(client);

                        if (status == DeployStatus.Success)
                        {
                            ColoredConsole.WriteLine(Green("Remote build succeeded!"));
                        }
                        else if (status == DeployStatus.Failed)
                        {
                            throw new CliException("Remote build failed!");
                        }
                        else if (status == DeployStatus.Unknown)
                        {
                            ColoredConsole.WriteLine(Yellow($"Failed to retrieve remote build status, please visit https://{functionApp.ScmUri}/api/deployments"));
                        }
                        return(status);
                    }
        }
Ejemplo n.º 8
0
        public async Task <string> MakePostRequest(string id, string apiName,
                                                   ProgressMessageHandler progressMessageHandler, bool save = false)
        {
            return(await Task.Run(async() =>
            {
                var makeParams = new MakeParams();
                makeParams.AddSignatureParam(id, apiName);
                HttpContent httpContent = new StringContent(makeParams.GetParam());
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded")
                {
                    CharSet = "utf-8"
                };

                using (var client = new HttpClient(progressMessageHandler)
                {
                    BaseAddress = new Uri(Define.BaseUrl)
                })
                {
                    client.DefaultRequestHeaders.Add("Expect", "100-continue");
                    client.DefaultRequestHeaders.Add("X-Unity-Version", "2018.2.6f1");
                    client.DefaultRequestHeaders.Add("UserAgent",
                                                     "Dalvik/2.1.0 (Linux; U; Android 5.1.1; xiaomi 8 Build/LMY49I)");
                    client.DefaultRequestHeaders.Add("Host", "api.t7s.jp");
                    client.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
                    client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip");

                    var httpResponse = client.PostAsync(Define.GetApiName(Define.APINAME_TYPE.result)
                                                        , httpContent).Result;
                    httpResponse.EnsureSuccessStatusCode();
                    //ManualResetEvent.WaitOne(100);
                    return await httpResponse.Content.ReadAsStringAsync();
                }
            }));
        }
Ejemplo n.º 9
0
        static async void RunClient()
        {
            // Create a progress notification handler
            ProgressMessageHandler progress = new ProgressMessageHandler();

            progress.HttpSendProgress += ProgressEventHandler;

            // Create an HttpClient and wire up the progress handler
            HttpClient client = HttpClientFactory.Create(progress);

            // Set the request timeout as large uploads can take longer than the default 2 minute timeout
            client.Timeout = TimeSpan.FromMinutes(20);

            // Open the file we want to upload and submit it
            using (FileStream fileStream = new FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, useAsync: true))
            {
                // Create a stream content for the file
                StreamContent content = new StreamContent(fileStream, BufferSize);

                // Create Multipart form data content, add our submitter data and our stream content
                MultipartFormDataContent formData = new MultipartFormDataContent();
                formData.Add(new StringContent("Me"), "submitter");
                formData.Add(content, "filename", _filename);

                // Post the MIME multipart form data upload with the file
                Uri address = new Uri(_baseAddress + "api/fileupload");
                HttpResponseMessage response = await client.PostAsync(address, formData);

                //await response.Content.ReadAsAsync();
                //Console.WriteLine("{0}Result:{0}  Filename:  {1}{0}  Submitter: {2}", Environment.NewLine, result.FileNames.FirstOrDefault(), result.Submitter);
            }
        }
Ejemplo n.º 10
0
        public GitHubClient GetClient(Action <HttpProgressEventArgs> action = null)
        {
            var progress = new ProgressMessageHandler();

            if (action != null)
            {
                progress.HttpSendProgress += (object sender, HttpProgressEventArgs e) => action(e);
            }

            progress.InnerHandler = HttpMessageHandlerFactory.CreateDefault();

            var connection = new Connection
                             (
                productInformation: new ProductHeaderValue(repositoryName),
                baseAddress: new Uri(Url),
                credentialStore: new InMemoryCredentialStore(new Credentials(userName, password)),
                httpClient: new HttpClientAdapter(() => progress),
                serializer: new SimpleJsonSerializer()
                             );

            var client = new GitHubClient(connection);

            client.Connection.SetRequestTimeout(Timeout);
            return(client);
        }
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="downFileName">将下载的文件名</param>
        /// <param name="showDownProgress">显示下载进度的委托方法,可为空</param>
        /// <returns>返回下载成功的文件目录(包括路径)</returns>
        public static async void DownloadFile(string downFileName, ProgressMessageHandler showDownProgress = null)
        {
            HttpResponseMessage httpResponseMessage = await DataApiRepository.GetApiUri <HttpResponseMessage>("http://172.16.0.9/Api/FileDown/Update/" + downFileName, showDownProgress);

            Stream responseStream = await httpResponseMessage.Content.ReadAsStreamAsync();

            //以上两句代码不能用下一句代替,否则进度报告出现卡顿。
            if (httpResponseMessage.Content.Headers.ContentLength > 0 && responseStream != null)
            {
                string needUpDateFile = System.IO.Path.Combine(Application.StartupPath, downFileName);

                //创建一个文件流
                FileStream fileStream = new FileStream(needUpDateFile, FileMode.Create);
                //await responseStream.CopyToAsync(fileStream);
                byte[] buffer = new byte[2048];
                int    readLength;
                while ((readLength = await responseStream.ReadAsync(buffer, 0, buffer.Length)) != 0)
                {
                    // 写入到文件
                    fileStream.Write(buffer, 0, readLength);
                }
                responseStream.Close();
                fileStream.Close();
            }
            else
            {
                MessageBox.Show("下载失败,可能该文件已被从服务器上删除", "不存在", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Ejemplo n.º 12
0
        private async Task <double> GetUploadBytesPerSecond(string uploadUrl, byte[] data, int timeout)
        {
            var cancellationTokenSource = new CancellationTokenSource();
            //cancellationTokenSource.CancelAfter(timeout);
            CancellationToken cancellationToken = cancellationTokenSource.Token;

            var sw = Stopwatch.StartNew();
            var progresshandler = new ProgressMessageHandler();
            var client          = HttpClientFactory.Create(progresshandler);
            var transfared      = 0D;

            progresshandler.HttpSendProgress += (s, e) =>
            {
                transfared = e.BytesTransferred;
            };
            try
            {
                using (HttpResponseMessage response = await client.PostAsync(uploadUrl, new ByteArrayContent(data), cancellationToken))
                {
                    sw.Stop();
                    response.EnsureSuccessStatusCode();
                    return(transfared / sw.Elapsed.TotalSeconds);
                }
            }
            catch (Exception ex)
            {
                sw.Stop();
                return(transfared / sw.Elapsed.TotalSeconds);
            }
        }
Ejemplo n.º 13
0
        private ProgressMessageHandler BuildProgressHandle()
        {
            var result = new ProgressMessageHandler();

            result.HttpReceiveProgress += (s, e) => this.HttpReceiveProgress?.Invoke(this, e);
            result.HttpSendProgress    += (s, e) => this.HttpSendProgress?.Invoke(this, e);
            return(result);
        }
Ejemplo n.º 14
0
        public HttpClient RasHttp()
        {
            var handler  = new HttpClientHandler();
            var progress = new ProgressMessageHandler();
            var ras      = new RasHandler(EntryName);

            return(HttpClientFactory.Create(handler, ras, progress));
        }
Ejemplo n.º 15
0
        public async Task DownloadAsZip(Uri publiclink, string FileSaveDir, IProgress <ReportStatus> ReportCls = null, CancellationToken token = default)
        {
            string FileName = $"pCloudPublicLink_{Utilitiez.RandomString(3)}.zip";

            ReportCls = ReportCls ?? new Progress <ReportStatus>();
            ReportCls.Report(new ReportStatus {
                Finished = false, TextStatus = "Initializing..."
            });
            try
            {
                var progressHandler = new ProgressMessageHandler(new HCHandler());
                progressHandler.HttpReceiveProgress += (sender, e) => { ReportCls.Report(new ReportStatus {
                        ProgressPercentage = e.ProgressPercentage, BytesTransferred = e.BytesTransferred, TotalBytes = e.TotalBytes ?? 0, TextStatus = "Downloading..."
                    }); };
                var localHttpClient = new HtpClient(progressHandler);
                HttpRequestMessage HtpReqMessage = new HttpRequestMessage(HttpMethod.Get, new pUri("/getpubzip", new AuthDictionary()
                {
                    { "code", publiclink.GetParameterInUrl("code") }, { "filename", FileName }
                }));

                using (HttpResponseMessage ResPonse = await localHttpClient.SendAsync(HtpReqMessage, HttpCompletionOption.ResponseContentRead, token).ConfigureAwait(false))
                {
                    if (ResPonse.IsSuccessStatusCode)
                    {
                        ReportCls.Report(new ReportStatus {
                            Finished = true, TextStatus = $"[{FileName}] Downloaded successfully."
                        });
                    }
                    else
                    {
                        ReportCls.Report(new ReportStatus {
                            Finished = true, TextStatus = $"Error code: {ResPonse.StatusCode}"
                        });
                    }
                    ResPonse.EnsureSuccessStatusCode();
                    Stream stream_ = await ResPonse.Content.ReadAsStreamAsync();

                    var FPathname = Path.Combine(FileSaveDir, FileName);
                    using (FileStream fileStream = new FileStream(FPathname, FileMode.Append, FileAccess.Write))
                    {
                        stream_.CopyTo(fileStream);
                    }
                }
            }
            catch (Exception ex)
            {
                ReportCls.Report(new ReportStatus {
                    Finished = true
                });
                if (!ex.Message.ToString().ToLower().Contains("a task was canceled"))
                {
                    throw new pCloudException(ex.Message, 1001);
                }
                ReportCls.Report(new ReportStatus {
                    TextStatus = ex.Message
                });
            }
        }
Ejemplo n.º 16
0
        public async Task OpenAsync(string userName, CancellationToken cancellationToken)
        {
            _cookieContainer   = new CookieContainer();
            _httpClientHandler = new HttpClientHandler {
                CookieContainer = _cookieContainer
            };

            _progressMessageHandler = new ProgressMessageHandler(_httpClientHandler);
            _progressMessageHandler.HttpSendProgress += MessageHandler_HttpSendProgress;

            _client = new HttpClient(_progressMessageHandler)
            {
                Timeout = TimeSpan.FromMinutes(PackageUploadTimelimitInMinutes)
            };
            _client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");

            var token = await AuthenticateUserAsync(userName, "", cancellationToken);

            _login = userName;

            _connection = new HubConnectionBuilder()
                          .WithUrl($"{ServerAddress}/sionline?token={token}", options =>
            {
                options.AccessTokenProvider = () => Task.FromResult(Convert.ToBase64String(Encoding.UTF8.GetBytes(_login)));
            })
                          .WithAutomaticReconnect()
                          .AddMessagePackProtocol()
                          .Build();

            _connection.Reconnecting += async e =>
            {
                if (Reconnecting != null)
                {
                    await Reconnecting(e);
                }
            };

            _connection.Reconnected += async s =>
            {
                if (Reconnected != null)
                {
                    await Reconnected(s);
                }
            };

            _connection.Closed += OnConnectionClosed;

            _connection.HandshakeTimeout = TimeSpan.FromMinutes(1);

            _connection.On <string, string>("Say", (user, text) => OnUI(() => Receieve?.Invoke(user, text)));
            _connection.On <SI.GameServer.Contract.GameInfo>("GameCreated", (gameInfo) => OnUI(() => GameCreated?.Invoke(ToSICoreGame(gameInfo))));
            _connection.On <int>("GameDeleted", (gameId) => OnUI(() => GameDeleted?.Invoke(gameId)));
            _connection.On <SI.GameServer.Contract.GameInfo>("GameChanged", (gameInfo) => OnUI(() => GameChanged?.Invoke(ToSICoreGame(gameInfo))));
            _connection.On <string>("Joined", (user) => OnUI(() => Joined?.Invoke(user)));
            _connection.On <string>("Leaved", (user) => OnUI(() => Leaved?.Invoke(user)));

            await _connection.StartAsync(cancellationToken);
        }
Ejemplo n.º 17
0
        protected virtual void OnProgressMessageEvent(TarEntry entry, string message)
        {
            ProgressMessageHandler progressMessageEvent = this.ProgressMessageEvent;

            if (progressMessageEvent != null)
            {
                progressMessageEvent(this, entry, message);
            }
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Raises the ProgressMessage event
        /// </summary>
        /// <param name="entry">The <see cref="TarEntry">TarEntry</see> for this event</param>
        /// <param name="message">message for this event.  Null is no message</param>
        protected virtual void OnProgressMessageEvent(TarEntry entry, string message)
        {
            ProgressMessageHandler handler = ProgressMessageEvent;

            if (handler != null)
            {
                handler(this, entry, message);
            }
        }
Ejemplo n.º 19
0
        public Uri ConfigureHttp()
        {
            try {
                if (errorMap.Count == 0)
                {
                    return(Client.BaseAddress);
                }
                ProgressMessageHandler progress = null;
                HttpClientHandler      handler  = null;
                //нужен еще один клиент тк BaseAddress после первого запроса менять нельзя
                using (var client = Settings.GetHttpClient(Config, ref progress, ref handler)) {
                    var minErrorCount = errorMap.Values.Min();
                    var urls          = errorMap.Where(x => x.Value == minErrorCount).Select(x => x.Key).ToArray();
                    Log.Info($"Поиск доступного хоста, выбор из {urls.Implode()}");
                    var requests = urls.Select(x => Tuple.Create(x, Check(client, x))).ToArray();
                    Task.WaitAll(requests.Select(x => x.Item2).ToArray(), 10 * 1000, Token);

                    var responded = requests
                                    .Where(x => x.Item2.IsCompleted && x.Item2.Result is Version)
                                    .ToArray();
                    var faulted = requests
                                  .Where(x => x.Item2.IsCompleted && x.Item2.Result is Exception)
                                  .ToArray();
                    var cancelled = requests.Except(responded).Except(faulted).ToArray();
                    if (responded.Length > 0)
                    {
                        Log.Info($"Ответили {responded.Implode(x => x.Item1)}");
                    }
                    if (faulted.Length > 0)
                    {
                        Log.Info($"Недоступны {faulted.Implode(x => x.Item1)}");
                    }
                    if (cancelled.Length > 0)
                    {
                        Log.Info($"Нет ответа {cancelled.Implode(x => x.Item1)}");
                    }

                    if (responded.Length > 0)
                    {
                        //для тестирования в тестах мы всегда должны брать первый из доступных
#if DEBUG
                        var host = new Uri(responded[0].Item1);
#else
                        var host = new Uri(responded[new Random().Next(responded.Length)].Item1);
#endif
                        Log.Info($"Выбран для обмена данными {host}");
                        return(host);
                    }
                }
            }
            catch (Exception e) {
                Log.Error("Не удалось определить хост для обмена данными", e);
            }
            return(Client.BaseAddress);
        }
Ejemplo n.º 20
0
        public ImageDownloader(IClipboardService clipboardService)
        {
            _clipboardService = clipboardService;

            var progressHandler = new ProgressMessageHandler();

            progressHandler.HttpReceiveProgress += (sender, args) =>
            {
                OnReceiveProgress(args);
            };
            _httpClient         = HttpClientFactory.Create(progressHandler);
            _cancellationSource = new CancellationTokenSource();
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Create an authenticated HttpClient
        /// </summary>
        /// <returns></returns>
        private async Task <HttpClient> CreateAuthenticatedHttpClientAsync(ProgressMessageHandler handler = null)
        {
            var data = new FormUrlEncodedContent(new List <KeyValuePair <String, String> >
            {
                new KeyValuePair <String, String>("username", _username),
                new KeyValuePair <String, String>("password", _password),
            });

            var client = handler != null ? new HttpClient(handler) : new HttpClient();
            await client.PostAsync("https://openmobile.ipass.com/moservices/rest/api/login", data);

            return(client);
        }
Ejemplo n.º 22
0
        public virtual HttpClient GetHttpClient(Config.Config config,
                                                ref ProgressMessageHandler progress,
                                                ref HttpClientHandler handler)
        {
            var version = typeof(AppBootstrapper).Assembly.GetName().Version;

            handler = new HttpClientHandler {
                Credentials     = GetCredential(),
                PreAuthenticate = true,
                Proxy           = GetProxy()
            };
            if (handler.Credentials == null)
            {
                handler.UseDefaultCredentials = true;
            }
            progress = new ProgressMessageHandler();
            var handlers = Handlers().Concat(new[] { progress }).ToArray();
            var client   = HttpClientFactory.Create(handler, handlers);

            client.DefaultRequestHeaders.Add("Version", version.ToString());
            client.DefaultRequestHeaders.Add("Client-Token", GetClientToken());
            var exe = Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location);

            if (exe.Match("AnalitF.Net.Client"))
            {
                client.DefaultRequestHeaders.Add("Branch", "master");
            }
            else if (exe.Match("AnalitF"))
            {
                client.DefaultRequestHeaders.Add("Branch", "migration");
            }
            //признак по которому запросы можно объединить, нужно что бы в интерфейсе связать лог и запрос
            client.DefaultRequestHeaders.Add("Request-Token", Guid.NewGuid().ToString());
            try {
                client.DefaultRequestHeaders.Add("OS-Version", Environment.OSVersion.VersionString);
            } catch (Exception) { }
#if DEBUG
            client.DefaultRequestHeaders.Add("Debug-UserName", UserName);
            if (DebugTimeout > 0)
            {
                client.DefaultRequestHeaders.Add("debug-timeout", DebugTimeout.ToString());
            }
            if (DebugFault)
            {
                client.DefaultRequestHeaders.Add("debug-fault", "true");
            }
#endif
            client.BaseAddress = config.BaseUrl;
            return(client);
        }
 public static ProgressMessageHandler CreateProgressMessageHandler(out MockProgressEventHandler progressEventHandler, bool sendProgress)
 {
     ProgressMessageHandler progressHandler = new ProgressMessageHandler();
     progressEventHandler = new MockProgressEventHandler();
     if (sendProgress)
     {
         progressHandler.HttpSendProgress += progressEventHandler.Handler;
     }
     else
     {
         progressHandler.HttpReceiveProgress += progressEventHandler.Handler;
     }
     return progressHandler;
 }
Ejemplo n.º 24
0
        /// <summary>
        /// Download file from target url asynchronous
        /// </summary>
        /// <param name="url">URL for download</param>
        /// <param name="destFileName">Destination file name</param>
        /// <param name="progress">Function for display progress download</param>
        /// <returns>True if download complete successful</returns>
        internal static async Task <bool> DownloadFileAsync(string url, string destFileName, IProgress <double> progress = null)
        {
            bool success = false;
            ProgressMessageHandler progressHandler = new ProgressMessageHandler();
            HttpClient             client          = HttpClientFactory.Create(progressHandler);

            try
            {
                //Delete if exist
                using (FileStream file = new FileStream(destFileName, FileMode.Create, FileAccess.Write))
                {
                    file.Close();
                }

                progressHandler.HttpReceiveProgress += (send, value) => progress?.Report(value.ProgressPercentage);
                HttpResponseMessage response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);

                using (Stream stream = await response.Content.ReadAsStreamAsync())
                {
                    byte[] buf          = new byte[4096];
                    bool   isMoreToRead = true;

                    do
                    {
                        int read = await stream.ReadAsync(buf, 0, buf.Length);

                        if (read != 0)
                        {
                            byte[] write = new byte[read];
                            buf.ToList().CopyTo(0, write, 0, read);
                            using (FileStream file = new FileStream(destFileName, FileMode.Append, FileAccess.Write))
                            {
                                file.Write(write, 0, read);
                            }
                        }
                        else
                        {
                            isMoreToRead = false;
                        }
                    } while (isMoreToRead);
                }
                success = true;
            }
            catch (Exception)
            {
                return(success);
            }

            return(success);
        }
        private static HttpClient CreateHttpClient(ProgressMessageHandler processMessageHander = null)
        {
            HttpClient _Client;

            if (processMessageHander != null)
            {
                _Client = HttpClientFactory.Create(processMessageHander);
            }
            else
            {
                _Client = HttpClientFactory.Create();
            }
            _Client.Timeout = TimeSpan.FromSeconds(60);
            return(_Client);
        }
Ejemplo n.º 26
0
        public static ProgressMessageHandler CreateProgressMessageHandler(out MockProgressEventHandler progressEventHandler, bool sendProgress)
        {
            ProgressMessageHandler progressHandler = new ProgressMessageHandler();

            progressEventHandler = new MockProgressEventHandler();
            if (sendProgress)
            {
                progressHandler.HttpSendProgress += progressEventHandler.Handler;
            }
            else
            {
                progressHandler.HttpReceiveProgress += progressEventHandler.Handler;
            }
            return(progressHandler);
        }
        private async void BtnUploadFile_ClickAsync(object sender, RoutedEventArgs e)
        {
            try
            {
                ExcuteResult JsonResult = new ExcuteResult();
                if (_CurWinViewModel.EntityFile.ContentType == null)
                {
                    AppFuns.ShowMessage("请选择文件内容类型!", Caption: "警告");
                    return;
                }
                _CurWinViewModel.EntityFile.CanReadUserIds = _CurWinViewModel.GetSelectUserIds();

                if (!_CurWinViewModel.EntityFile.CanReadUserIds.Contains(AppSet.LoginUser.Id))
                {
                    if (!AppFuns.ShowMessage("你本人没有读取该文件的权限?", Caption: "确认", showYesNo: true))
                    {
                        return;
                    }
                }

                BtnUpFile.IsEnabled = false;
                ProgressMessageHandler progress = new ProgressMessageHandler();
                progress.HttpSendProgress += (object sender, HttpProgressEventArgs e) =>
                {
                    _CurWinViewModel.EntityFile.UpIntProgress = e.ProgressPercentage;
                };

                JsonResult = await DataPlanFileRepository.UpLoadFileInfo(_CurWinViewModel.EntityFile, _CurWinViewModel.UpFileInfo.OpenRead(), "upfilekey", "upfilename", progress);

                if (JsonResult != null && JsonResult.State == 0)
                {
                    _CurWinViewModel.EntityFile.Id              = JsonResult.Tag;
                    _CurWinViewModel.EntityFile.UpIntProgress   = 100;
                    _CurWinViewModel.EntityFile.DownIntProgress = 0;
                    _CallBackFunc(_CurWinViewModel.EntityFile);
                    this.Close();
                }
                else
                {
                    AppFuns.ShowMessage(JsonResult.Msg, Caption: "错误", isErr: true);
                    BtnUpFile.IsEnabled = true;
                }
            }
            catch (Exception ex)
            {
                AppFuns.ShowMessage(ex.Message, Caption: "错误", isErr: true);
            }
        }
Ejemplo n.º 28
0
        private async Task DownloadAsync(Uri uri, string localFullName)
        {
            HttpClientHandler httpClientHandler = new HttpClientHandler();

            ProgressMessageHandler progressMessageHandler = new ProgressMessageHandler(httpClientHandler);
            HttpClient             httpClient             = new HttpClient(progressMessageHandler);

            progressMessageHandler.HttpReceiveProgress += (object sender, HttpProgressEventArgs e) => Reportor.Report(e.ProgressPercentage);//捕获下载进度,向外汇报
            FileStream fileStream = File.Create(localFullName, 1024, FileOptions.Asynchronous);

            byte[] bytes = await httpClient.GetByteArrayAsync(uri);

            fileStream.Write(bytes, 0, bytes.Length);
            fileStream.Flush();
            fileStream.Close();
        }
Ejemplo n.º 29
0
        public HttpDownloader(EventHandler <HttpProgressEventArgs> progressHandler, bool noCache = false)
        {
            var handler = new ProgressMessageHandler()
            {
                InnerHandler = new HttpClientHandler()
            };

            handler.HttpReceiveProgress += progressHandler;

            _client = new HttpClient(handler);

            _client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue
            {
                NoCache = noCache
            };
        }
Ejemplo n.º 30
0
 public NetSwap(Settings settings, string cookieurl = null)
 {
     Settings          = settings;
     HttpClientHandler = new HttpClientHandler {
         Proxy = settings.Proxy
     };
     if (cookieurl != null)
     {
         var cookie  = new CookieContainer();
         var cookies = cookie.GetCookies(new Uri(cookieurl));
         HttpClientHandler.CookieContainer.Add(cookies);
     }
     ProgressMessageHandler = new ProgressMessageHandler(HttpClientHandler);
     Client = new HttpClient(ProgressMessageHandler);
     Client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36");
     Client.Timeout = TimeSpan.FromSeconds(20);
 }
Ejemplo n.º 31
0
        //private static ManualResetEvent ManualResetEvent = new ManualResetEvent(true);

        public void HttpClientTest(ProgressMessageHandler progressMessageHandler)
        {
            _getClient = new HttpClient(progressMessageHandler)
            {
                BaseAddress = new Uri(Define.Domin),
                Timeout     = new TimeSpan(0, 0, 10)
            };

            Task.Run(() =>
            {
                _getClient.SendAsync(new HttpRequestMessage
                {
                    Method     = new HttpMethod("POST"),
                    RequestUri = new Uri(Define.BaseUrl + Define.GetApiName(Define.APINAME_TYPE.inspection))
                });
            });
        }