diff --git a/src/Parser.cs b/src/Parser.cs index 0cac17c..315f4b3 100644 --- a/src/Parser.cs +++ b/src/Parser.cs @@ -6,29 +6,51 @@ namespace WorldOfPeacecraft { public class Parser { - private Queue Buffer; + private Queue Buffer = new Queue (); + private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false); private Thread ParserThread; + private List message; - public Parser() + public Parser () { - Buffer = new Queue(); + ParserThread = new Thread (new ThreadStart (this.RunParser)); + message = new LinkedList (); } - public void DoParse () + public void RunParser () { while (true) { - // Do awesome stuff + 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 message) + { + // TODO Implement + } + public void Stop () { - ParserThread.Abort(); + ParserThread.Abort (); } - public void AddToBuffer(string s) + public void AddToBuffer (string s) { - Buffer.Enqueue(s); + lock (Buffer) { + Buffer.Enqueue (s); + BufferFilledEvent.Set (); + } } } }