skyscraper8/skyscraper8.Tests/VoileOnlineUploader.cs
feyris-tan b78520e2fe
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 1m26s
Renamed te skyscraper8.Tests.NUnit project to skyscraper8.Tests
2026-06-20 16:06:14 +02:00

85 lines
2.2 KiB
C#

using Newtonsoft.Json;
namespace skyscraper8.Tests.NUnit;
public sealed class VoileOnlineUploader
{
public static void Upload(VoileOnlineTestPost voileOnlinePost)
{
if (_instance == null)
{
_instance = new VoileOnlineUploader();
}
_instance.PushResult(voileOnlinePost);
}
private static VoileOnlineUploader _instance;
private Thread _uploaderThread;
private Queue<VoileOnlineTestPost> _queue;
private void PushResult(VoileOnlineTestPost voileOnlinePost)
{
if (_queue == null)
_queue = new Queue<VoileOnlineTestPost>();
lock (_queue)
{
_queue.Enqueue(voileOnlinePost);
}
if (_uploaderThread == null)
{
_uploaderThread = new Thread(PusherThread);
_uploaderThread.Priority = ThreadPriority.Lowest;
_uploaderThread.Name = "VoileOnlineUploader";
}
switch (_uploaderThread.ThreadState)
{
case ThreadState.Unstarted:
_uploaderThread.Start();
break;
case ThreadState.Running:
break;
case ThreadState.Stopped:
_uploaderThread = new Thread(PusherThread);
_uploaderThread.Priority = ThreadPriority.Lowest;
_uploaderThread.Name = "VoileOnlineUploader";
_uploaderThread.Start();
break;
default:
throw new NotImplementedException(String.Format("ThreadState: {0}", _uploaderThread.ThreadState));
}
}
private void PusherThread()
{
int numElements = 0;
lock (_queue)
{
numElements = _queue.Count;
}
while (numElements > 0)
{
VoileOnlineTestPost voileOnlinePost;
lock (_queue)
{
voileOnlinePost = _queue.Dequeue();
}
string json = JsonConvert.SerializeObject(voileOnlinePost);
DoPost(json);
lock (_queue)
{
numElements = _queue.Count;
}
}
}
private void DoPost(string json)
{
}
}