diff --git a/inf3.csproj b/inf3.csproj index 4f81ce7..149adb1 100644 --- a/inf3.csproj +++ b/inf3.csproj @@ -41,6 +41,7 @@ + diff --git a/src/Buffer.cs b/src/Buffer.cs new file mode 100644 index 0000000..a10d9a7 --- /dev/null +++ b/src/Buffer.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; + +namespace WorldOfPeacecraft +{ + public class Buffer + { + private Queue RawBuffer = new Queue(); + private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false); + int size; + + public Buffer(int size) + { + this.size=size; + } + + + public void AddToBuffer (string s) + { + if (RawBuffer.Count >= size){ + + } + else{ + lock (RawBuffer) { + RawBuffer.Enqueue (s); + BufferFilledEvent.Set (); + } + } + + } + } +} diff --git a/src/Parser.cs b/src/Parser.cs index 16d9052..6271c69 100644 --- a/src/Parser.cs +++ b/src/Parser.cs @@ -49,15 +49,15 @@ namespace WorldOfPeacecraft public const string MessPlayers = "players"; public const string MessDragon = "dragon"; public const string MessMapcell = "cell"; - private Queue Buffer = new Queue (); - private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false); + private Buffer MonsterBuffer; private Thread ParserThread; private LinkedList Message; private Regex LastLineRegex; private Backend backend; - public Parser () + public Parser (Buffer b) { + MonsterBuffer = b; ParserThread = new Thread (new ThreadStart (this.RunParser)); ParserThread.Start(); Message = new LinkedList (); @@ -65,11 +65,11 @@ namespace WorldOfPeacecraft } private void RunParser () - { + {/* while (true) { bool waitRequired = false; - lock (Buffer) { - if (Buffer.Count == 0) { + lock (MonsterBuffer) { + if (MonsterBuffer.Count == 0) { waitRequired = true; BufferFilledEvent.Reset (); } @@ -83,9 +83,9 @@ namespace WorldOfPeacecraft if (IsCompletePackage ()) { Parse (); } - } + }*/ } - + public Player getDummyPlayer() { return DummyPlayer; @@ -445,13 +445,7 @@ namespace WorldOfPeacecraft ParserThread.Abort (); } - public void AddToBuffer (string s) - { - lock (Buffer) { - Buffer.Enqueue (s); - BufferFilledEvent.Set (); - } - } + private class Block { diff --git a/src/Receiver.cs b/src/Receiver.cs index 9e0b5e9..f2428ff 100644 --- a/src/Receiver.cs +++ b/src/Receiver.cs @@ -9,13 +9,13 @@ namespace WorldOfPeacecraft { private TcpClient Client; private StreamReader Reader; - private Parser Parser; + private Buffer KillerBuffer; private Thread ReceiverThread; - public Receiver (TcpClient client, Parser parser) + public Receiver (TcpClient client, Buffer buffer) { this.Client = client; - this.Parser = parser; + this.KillerBuffer = buffer; ReceiverThread = new Thread(new ThreadStart(this.doReceive)); ReceiverThread.Start(); } @@ -29,7 +29,7 @@ namespace WorldOfPeacecraft { this.Reader = new StreamReader (Client.GetStream ()); while (true) { - Parser.AddToBuffer(Receive()); + KillerBuffer.AddToBuffer(Receive()); } }