diff options
-rw-r--r-- | Assistant/SkuAssist.cs (renamed from SkuAssist.cs) | 17 | ||||
-rw-r--r-- | CancellationDisposable.cs | 38 | ||||
-rw-r--r-- | DefaultDisposable.cs | 21 | ||||
-rw-r--r-- | ExcelTaskUtil.cs | 133 | ||||
-rw-r--r-- | Functions.cs | 12 | ||||
-rw-r--r-- | Rehau.Sku.Assist.csproj | 5 |
6 files changed, 9 insertions, 217 deletions
diff --git a/SkuAssist.cs b/Assistant/SkuAssist.cs index 1c0be3b..1167274 100644 --- a/SkuAssist.cs +++ b/Assistant/SkuAssist.cs @@ -8,25 +8,14 @@ namespace Rehau.Sku.Assist { static class SkuAssist { - static private HttpClient _httpClient; - - public static void EnsureHttpInitialized() + public async static Task<AngleSharp.Dom.IDocument> GetDocumentAsync(string request, HttpClient httpClient) { - if (_httpClient == null) - { - _httpClient = new HttpClient(); - } - } - - public async static Task<AngleSharp.Dom.IDocument> GetDocumentAsync(string request) - { - string url = "https://shop-rehau.ru/catalogsearch/result/?q=" + request; + string uri = "https://shop-rehau.ru/catalogsearch/result/?q=" + request; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; - HttpResponseMessage response = await _httpClient.GetAsync(url); + HttpResponseMessage response = await httpClient.GetAsync(uri); response.EnsureSuccessStatusCode(); - IConfiguration config = Configuration.Default; IBrowsingContext context = BrowsingContext.New(config); diff --git a/CancellationDisposable.cs b/CancellationDisposable.cs deleted file mode 100644 index 700a2c2..0000000 --- a/CancellationDisposable.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Threading; - -namespace Rehau.Sku.Assist -{ - sealed class CancellationDisposable : IDisposable - { - - readonly CancellationTokenSource cts; - public CancellationDisposable(CancellationTokenSource cts) - { - if (cts == null) - { - throw new ArgumentNullException("cts"); - } - - this.cts = cts; - } - - public CancellationDisposable() - : this(new CancellationTokenSource()) - { - } - - public CancellationToken Token - { - get { return cts.Token; } - } - - public void Dispose() - { - cts.Cancel(); - } - } - -} - - diff --git a/DefaultDisposable.cs b/DefaultDisposable.cs deleted file mode 100644 index f991181..0000000 --- a/DefaultDisposable.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; - -namespace Rehau.Sku.Assist -{ - sealed class DefaultDisposable : IDisposable - { - - public static readonly DefaultDisposable Instance = new DefaultDisposable(); - - DefaultDisposable() - { - } - - public void Dispose() - { - } - } - -} - - diff --git a/ExcelTaskUtil.cs b/ExcelTaskUtil.cs deleted file mode 100644 index c7d1b94..0000000 --- a/ExcelTaskUtil.cs +++ /dev/null @@ -1,133 +0,0 @@ -using ExcelDna.Integration; -using System.Threading.Tasks; -using System; -using System.Threading; - -namespace Rehau.Sku.Assist -{ - internal static class ExcelTaskUtil - { - public static object Run<TResult>(string callerFunctionName, object callerParameters, Func<CancellationToken, Task<TResult>> taskSource) - { - return ExcelAsyncUtil.Observe(callerFunctionName, callerParameters, delegate - { - var cts = new CancellationTokenSource(); - var task = taskSource(cts.Token); - return new ExcelTaskObservable<TResult>(task, cts); - }); - } - - public static object Run<TResult>(string callerFunctionName, object callerParameters, Func<Task<TResult>> taskSource) - { - return ExcelAsyncUtil.Observe(callerFunctionName, callerParameters, delegate - { - var task = taskSource(); - return new ExcelTaskObservable<TResult>(task); - }); - } - - class ExcelTaskObservable<TResult> : IExcelObservable - { - readonly Task<TResult> _task; - readonly CancellationTokenSource _cts; - public ExcelTaskObservable(Task<TResult> task) - { - _task = task; - } - - public ExcelTaskObservable(Task<TResult> task, CancellationTokenSource cts) - : this(task) - { - _cts = cts; - } - - public IDisposable Subscribe(IExcelObserver observer) - { - switch (_task.Status) - { - case TaskStatus.RanToCompletion: - observer.OnNext(_task.Result); - observer.OnCompleted(); - break; - case TaskStatus.Faulted: - observer.OnError(_task.Exception.InnerException); - break; - case TaskStatus.Canceled: - observer.OnError(new TaskCanceledException(_task)); - break; - default: - _task.ContinueWith(t => - { - switch (t.Status) - { - case TaskStatus.RanToCompletion: - observer.OnNext(t.Result); - observer.OnCompleted(); - break; - case TaskStatus.Faulted: - observer.OnError(t.Exception.InnerException); - break; - case TaskStatus.Canceled: - observer.OnError(new TaskCanceledException(t)); - break; - } - }); - break; - } - - if (_cts != null) - { - return new CancellationDisposable(_cts); - } - - return DefaultDisposable.Instance; - } - } - - sealed class DefaultDisposable : IDisposable - { - - public static readonly DefaultDisposable Instance = new DefaultDisposable(); - - DefaultDisposable() - { - } - - public void Dispose() - { - } - } - - sealed class CancellationDisposable : IDisposable - { - - readonly CancellationTokenSource cts; - public CancellationDisposable(CancellationTokenSource cts) - { - if (cts == null) - { - throw new ArgumentNullException("cts"); - } - - this.cts = cts; - } - - public CancellationDisposable() - : this(new CancellationTokenSource()) - { - } - - public CancellationToken Token - { - get { return cts.Token; } - } - - public void Dispose() - { - cts.Cancel(); - } - } - - } -} - diff --git a/Functions.cs b/Functions.cs index 576e03c..aefdd87 100644 --- a/Functions.cs +++ b/Functions.cs @@ -1,25 +1,23 @@ using ExcelDna.Integration; +using System.Net.Http; namespace Rehau.Sku.Assist { public class Functions : IExcelAddIn { - [ExcelFunction(description: "Получение наименования и артикула позиции")] + static readonly HttpClient httpClient = new HttpClient(); + public static object RAUNAME(string request) { - SkuAssist.EnsureHttpInitialized(); - - return ExcelTaskUtil.Run("RAUNAME ASYNC", request, async token => + return ExcelAsyncUtil.Run("RAUNAME", request, delegate { - var document = await SkuAssist.GetDocumentAsync(request); + var document = SkuAssist.GetDocumentAsync(request, httpClient).Result; return SkuAssist.GetResultFromDocument(document); }); } public void AutoClose() { - ExcelIntegration.RegisterUnhandledExceptionHandler( - delegate (object ex) { return string.Format("!!!ERROR: {0}", ex.ToString()); }); } public void AutoOpen() diff --git a/Rehau.Sku.Assist.csproj b/Rehau.Sku.Assist.csproj index 37744c7..2fc2307 100644 --- a/Rehau.Sku.Assist.csproj +++ b/Rehau.Sku.Assist.csproj @@ -58,12 +58,9 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> - <Compile Include="CancellationDisposable.cs" /> - <Compile Include="DefaultDisposable.cs" /> - <Compile Include="ExcelTaskUtil.cs" /> <Compile Include="Functions.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="SkuAssist.cs" /> + <Compile Include="Assistant\SkuAssist.cs" /> </ItemGroup> <ItemGroup> <None Include="Rehau.Sku.Assist-AddIn.dna" /> |