59 lines
1.0 KiB
C#
59 lines
1.0 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Collections.Generic;
|
|
|
|
namespace WorldOfPeacecraft
|
|
{
|
|
public class Parser
|
|
{
|
|
private Queue<string> Buffer = new Queue<string> ();
|
|
private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false);
|
|
private Thread ParserThread;
|
|
private List<string> message;
|
|
|
|
public Parser ()
|
|
{
|
|
ParserThread = new Thread (new ThreadStart (this.RunParser));
|
|
message = new LinkedList<string> ();
|
|
}
|
|
|
|
public void RunParser ()
|
|
{
|
|
while (true) {
|
|
bool waitRequired = false;
|
|
lock (Buffer) {
|
|
if (Buffer.Count == 0) {
|
|
waitRequired = true;
|
|
BufferFilledEvent.Reset ();
|
|
}
|
|
}
|
|
if (waitRequired)
|
|
BufferFilledEvent.WaitOne ();
|
|
lock (Buffer) {
|
|
message.Add (Buffer.Dequeue ());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void Parse (List<string> message)
|
|
{
|
|
// TODO Implement
|
|
}
|
|
|
|
public void Stop ()
|
|
{
|
|
ParserThread.Abort ();
|
|
}
|
|
|
|
public void AddToBuffer (string s)
|
|
{
|
|
lock (Buffer) {
|
|
Buffer.Enqueue (s);
|
|
BufferFilledEvent.Set ();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|