diff --git a/RageCoop.Core/Worker.cs b/RageCoop.Core/Worker.cs new file mode 100644 index 00000000..1aa90436 --- /dev/null +++ b/RageCoop.Core/Worker.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Collections.Concurrent; + +namespace RageCoop.Core +{ + public class Worker:IDisposable + { + private SemaphoreSlim _semaphoreSlim; + private Thread _workerThread; + private bool _stopping=false; + public string Name { get; set; } + public bool IsBusy { get;private set; } + internal Worker(int maxJobs = Int32.MaxValue,string name="Worker") + { + Name = name; + _semaphoreSlim = new SemaphoreSlim(maxJobs); + _workerThread=new Thread(() => + { + while (!_stopping) + { + IsBusy=false; + _semaphoreSlim.Wait(); + if(Jobs.TryDequeue(out var job)) + { + IsBusy=true; + job.Invoke(); + } + else + { + throw new InvalidOperationException("Hmm... that's unexpected."); + } + } + IsBusy=false; + }); + _workerThread.Start(); + } + public void QueueWork(Action work) + { + Jobs.Enqueue(work); + _semaphoreSlim.Release(); + } + public void Stop() + { + _stopping=true; + if (_workerThread.IsAlive) + { + _workerThread.Join(); + } + } + public void Dispose() + { + Stop(); + _semaphoreSlim.Dispose(); + } + private ConcurrentQueue Jobs=new ConcurrentQueue(); + } +} diff --git a/RageCoop.Server/Properties/PublishProfiles/FolderProfile.pubxml.user b/RageCoop.Server/Properties/PublishProfiles/FolderProfile.pubxml.user index 8a32117f..cae7f1be 100644 --- a/RageCoop.Server/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/RageCoop.Server/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,6 +4,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2022-06-08T04:40:43.5537635Z;False|2022-06-08T12:39:50.7770086+08:00;False|2022-06-08T12:38:57.8444772+08:00;True|2022-06-06T20:32:39.8484415+08:00;True|2022-06-03T16:41:45.9403306+08:00;True|2022-06-03T16:41:27.9643943+08:00;True|2022-06-03T16:41:03.3149741+08:00;True|2022-06-03T16:40:25.3605097+08:00;True|2022-06-03T16:40:05.4510168+08:00;True|2022-06-02T13:21:10.3456459+08:00;True|2022-06-02T13:20:52.1088278+08:00;True|2022-06-02T13:20:25.6889167+08:00;True|2022-06-02T13:19:06.3089340+08:00;True|2022-06-01T18:47:39.6707493+08:00;True|2022-06-01T18:04:32.2932367+08:00;True|2022-06-01T18:03:17.8871227+08:00;True|2022-05-27T15:20:25.7264350+08:00;True|2022-05-27T15:20:04.2362276+08:00;True|2022-05-27T15:19:21.4852644+08:00;True|2022-05-27T15:18:36.0857345+08:00;True|2022-05-25T10:30:00.0927959+08:00;True|2022-05-25T10:26:50.6739643+08:00;True|2022-05-25T10:20:36.6658425+08:00;True|2022-05-25T10:19:47.8333108+08:00;True|2022-05-24T11:00:13.3617113+08:00;True|2022-05-22T16:56:31.0481188+08:00;True|2022-05-18T13:35:57.1402751+08:00;True|2022-05-18T13:10:28.4995253+08:00;True|2022-05-01T18:35:01.9624101+08:00;True|2022-05-01T12:32:20.8671319+08:00;False|2022-05-01T12:30:25.4596227+08:00; + True|2022-06-27T05:30:18.9547908Z;False|2022-06-27T13:29:24.0778878+08:00;False|2022-06-27T13:28:37.4531587+08:00;False|2022-06-27T13:26:39.9475441+08:00;False|2022-06-27T13:25:40.8343571+08:00;True|2022-06-08T12:40:43.5537635+08:00;False|2022-06-08T12:39:50.7770086+08:00;False|2022-06-08T12:38:57.8444772+08:00;True|2022-06-06T20:32:39.8484415+08:00;True|2022-06-03T16:41:45.9403306+08:00;True|2022-06-03T16:41:27.9643943+08:00;True|2022-06-03T16:41:03.3149741+08:00;True|2022-06-03T16:40:25.3605097+08:00;True|2022-06-03T16:40:05.4510168+08:00;True|2022-06-02T13:21:10.3456459+08:00;True|2022-06-02T13:20:52.1088278+08:00;True|2022-06-02T13:20:25.6889167+08:00;True|2022-06-02T13:19:06.3089340+08:00;True|2022-06-01T18:47:39.6707493+08:00;True|2022-06-01T18:04:32.2932367+08:00;True|2022-06-01T18:03:17.8871227+08:00;True|2022-05-27T15:20:25.7264350+08:00;True|2022-05-27T15:20:04.2362276+08:00;True|2022-05-27T15:19:21.4852644+08:00;True|2022-05-27T15:18:36.0857345+08:00;True|2022-05-25T10:30:00.0927959+08:00;True|2022-05-25T10:26:50.6739643+08:00;True|2022-05-25T10:20:36.6658425+08:00;True|2022-05-25T10:19:47.8333108+08:00;True|2022-05-24T11:00:13.3617113+08:00;True|2022-05-22T16:56:31.0481188+08:00;True|2022-05-18T13:35:57.1402751+08:00;True|2022-05-18T13:10:28.4995253+08:00;True|2022-05-01T18:35:01.9624101+08:00;True|2022-05-01T12:32:20.8671319+08:00;False|2022-05-01T12:30:25.4596227+08:00; \ No newline at end of file diff --git a/RageCoop.Server/RageCoop.Server.csproj b/RageCoop.Server/RageCoop.Server.csproj index a5dc4641..418f93ed 100644 --- a/RageCoop.Server/RageCoop.Server.csproj +++ b/RageCoop.Server/RageCoop.Server.csproj @@ -50,7 +50,7 @@ ..\libs\Newtonsoft.Json.dll - ..\..\RageCoop.SHVDN\bin\Release\ScriptHookVDotNet3.dll + ..\libs\ScriptHookVDotNet3.dll