From 993e6c6bb7311afe0ea05d285fca6a625d0bd7d5 Mon Sep 17 00:00:00 2001 From: KristofferStrube Date: Thu, 20 Jun 2024 21:11:23 +0200 Subject: [PATCH] Released alpha 1 to NuGet. --- README.md | 2 +- docs/icon.png | Bin 0 -> 5845 bytes .../{Job.cs => IJob.cs} | 4 +-- .../JobWorker.cs | 2 +- .../JsonJob.cs | 4 +-- .../KristofferStrube.Blazor.WebWorkers.csproj | 23 ++++++++++++++++++ .../SlimWorker.cs | 2 +- 7 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 docs/icon.png rename src/KristofferStrube.Blazor.WebWorkers/{Job.cs => IJob.cs} (87%) diff --git a/README.md b/README.md index 2b73c75..1505e0a 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ This looks like so: Another more basic abstraction is the `JobWorker`. This simple abstraction runs some job with an input and an output on a worker. The `.csproj` look identical to the one used for the `SlimWorker`. -But what differs is that we need to create a class that implements the interface `Job` in the worker project. A simple way to do this is by extending the abstract class `JsonJob` which uses JSON as the format for transfering its input and output. This limits us to only use inputs and outputs that can be JSON serialized and deserialized. +But what differs is that we need to create a class that implements the interface `IJob` in the worker project. A simple way to do this is by extending the abstract class `JsonJob` which uses JSON as the format for transfering its input and output. This limits us to only use inputs and outputs that can be JSON serialized and deserialized. Here were implement a job that can find the sum of the codes of each individual char in a string. diff --git a/docs/icon.png b/docs/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..accdadbe5c851655755fd1f8a9effaae9fc50c8d GIT binary patch literal 5845 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 literal 0 HcmV?d00001 diff --git a/src/KristofferStrube.Blazor.WebWorkers/Job.cs b/src/KristofferStrube.Blazor.WebWorkers/IJob.cs similarity index 87% rename from src/KristofferStrube.Blazor.WebWorkers/Job.cs rename to src/KristofferStrube.Blazor.WebWorkers/IJob.cs index 721c1ee..8229d37 100644 --- a/src/KristofferStrube.Blazor.WebWorkers/Job.cs +++ b/src/KristofferStrube.Blazor.WebWorkers/IJob.cs @@ -5,7 +5,7 @@ namespace KristofferStrube.Blazor.WebWorkers; /// /// A job that takes some input and returns some output. /// -public interface Job +public interface IJob { /// /// How the job will send execute the job on the worker. @@ -15,5 +15,5 @@ public interface Job /// The worker that the job should be runned on. /// The dictionary that manages which executions finishes. /// The output of the job once it responds. - public abstract static Task ExecuteAsync(TInput input, Worker worker, ConcurrentDictionary> pendingTasks) where TJob : Job; + public abstract static Task ExecuteAsync(TInput input, Worker worker, ConcurrentDictionary> pendingTasks) where TJob : IJob; } diff --git a/src/KristofferStrube.Blazor.WebWorkers/JobWorker.cs b/src/KristofferStrube.Blazor.WebWorkers/JobWorker.cs index bcba34d..1b2d163 100644 --- a/src/KristofferStrube.Blazor.WebWorkers/JobWorker.cs +++ b/src/KristofferStrube.Blazor.WebWorkers/JobWorker.cs @@ -11,7 +11,7 @@ namespace KristofferStrube.Blazor.WebWorkers; /// /// /// -public class JobWorker : Worker where TJob : Job +public class JobWorker : Worker where TJob : IJob { private readonly ConcurrentDictionary> pendingTasks = new(); diff --git a/src/KristofferStrube.Blazor.WebWorkers/JsonJob.cs b/src/KristofferStrube.Blazor.WebWorkers/JsonJob.cs index 9ae6bf1..f96fdfc 100644 --- a/src/KristofferStrube.Blazor.WebWorkers/JsonJob.cs +++ b/src/KristofferStrube.Blazor.WebWorkers/JsonJob.cs @@ -12,7 +12,7 @@ namespace KristofferStrube.Blazor.WebWorkers; /// /// /// -public abstract class JsonJob : Job +public abstract class JsonJob : IJob { /// /// The actual work being done by the job. This will be run when the job is executed. @@ -39,7 +39,7 @@ public TOutput ExecuteWithoutUsingWorker(TInput input) /// /// How an input is transfered to the for the . /// - public static async Task ExecuteAsync(TInput input, Worker worker, ConcurrentDictionary> pendingTasks) where TJob : Job + public static async Task ExecuteAsync(TInput input, Worker worker, ConcurrentDictionary> pendingTasks) where TJob : IJob { string requestIdentifier = Guid.NewGuid().ToString(); var tcs = new TaskCompletionSource(); diff --git a/src/KristofferStrube.Blazor.WebWorkers/KristofferStrube.Blazor.WebWorkers.csproj b/src/KristofferStrube.Blazor.WebWorkers/KristofferStrube.Blazor.WebWorkers.csproj index 234d5e4..4a74948 100644 --- a/src/KristofferStrube.Blazor.WebWorkers/KristofferStrube.Blazor.WebWorkers.csproj +++ b/src/KristofferStrube.Blazor.WebWorkers/KristofferStrube.Blazor.WebWorkers.csproj @@ -5,8 +5,31 @@ enable enable true + Blazor Web Workers wrapper + Web Workers wrapper implementation for Blazor. + KristofferStrube.Blazor.WebWorkers + Blazor;Web;Workers;Worker;Job;Threading;Wasm;Wrapper;JSInterop + https://github.com/KristofferStrube/Blazor.WebAudio + git + MIT + 0.1.0-alpha.1 + Kristoffer Strube + README.md + icon.png + true + + + True + \ + + + True + \ + + + diff --git a/src/KristofferStrube.Blazor.WebWorkers/SlimWorker.cs b/src/KristofferStrube.Blazor.WebWorkers/SlimWorker.cs index 94e0e0d..ee8061b 100644 --- a/src/KristofferStrube.Blazor.WebWorkers/SlimWorker.cs +++ b/src/KristofferStrube.Blazor.WebWorkers/SlimWorker.cs @@ -18,7 +18,7 @@ public class SlimWorker : Worker /// The args to parse to the program in the specified assembly when running it. public static async Task CreateAsync(IJSRuntime jSRuntime, string assembly, string[]? args = null) { - args ??= Array.Empty(); + args ??= []; string scriptUrl = "_content/KristofferStrube.Blazor.WebWorkers/KristofferStrube.Blazor.WebWorkers.SlimWorker.js" + $"?assembly={assembly}"