85 lines
2.2 KiB
C#
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)
|
|
{
|
|
}
|
|
}
|