Merge branch 'master' of manuel-voegele.de:inf3

This commit is contained in:
2014-04-16 14:46:43 +02:00
4 changed files with 49 additions and 19 deletions

View File

@@ -41,6 +41,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="DummyBackend.cs" /> <Compile Include="DummyBackend.cs" />
<Compile Include="ParserTest.cs" /> <Compile Include="ParserTest.cs" />
<Compile Include="src\Buffer.cs" />
<Compile Include="src\Receiver.cs" /> <Compile Include="src\Receiver.cs" />
<Compile Include="src\Sender.cs" /> <Compile Include="src\Sender.cs" />
<Compile Include="src\DefaultGui\DefaultGui.Designer.cs" /> <Compile Include="src\DefaultGui\DefaultGui.Designer.cs" />

35
src/Buffer.cs Normal file
View File

@@ -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<string> RawBuffer = new Queue<string>();
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 ();
}
}
}
}
}

View File

@@ -49,15 +49,15 @@ namespace WorldOfPeacecraft
public const string MessPlayers = "players"; public const string MessPlayers = "players";
public const string MessDragon = "dragon"; public const string MessDragon = "dragon";
public const string MessMapcell = "cell"; public const string MessMapcell = "cell";
private Queue<string> Buffer = new Queue<string> (); private Buffer MonsterBuffer;
private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false);
private Thread ParserThread; private Thread ParserThread;
private LinkedList<string> Message; private LinkedList<string> Message;
private Regex LastLineRegex; private Regex LastLineRegex;
private Backend backend; private Backend backend;
public Parser () public Parser (Buffer b)
{ {
MonsterBuffer = b;
ParserThread = new Thread (new ThreadStart (this.RunParser)); ParserThread = new Thread (new ThreadStart (this.RunParser));
ParserThread.Start(); ParserThread.Start();
Message = new LinkedList<string> (); Message = new LinkedList<string> ();
@@ -65,11 +65,11 @@ namespace WorldOfPeacecraft
} }
private void RunParser () private void RunParser ()
{ {/*
while (true) { while (true) {
bool waitRequired = false; bool waitRequired = false;
lock (Buffer) { lock (MonsterBuffer) {
if (Buffer.Count == 0) { if (MonsterBuffer.Count == 0) {
waitRequired = true; waitRequired = true;
BufferFilledEvent.Reset (); BufferFilledEvent.Reset ();
} }
@@ -83,9 +83,9 @@ namespace WorldOfPeacecraft
if (IsCompletePackage ()) { if (IsCompletePackage ()) {
Parse (); Parse ();
} }
} }*/
} }
public Player getDummyPlayer() public Player getDummyPlayer()
{ {
return DummyPlayer; return DummyPlayer;
@@ -445,13 +445,7 @@ namespace WorldOfPeacecraft
ParserThread.Abort (); ParserThread.Abort ();
} }
public void AddToBuffer (string s)
{
lock (Buffer) {
Buffer.Enqueue (s);
BufferFilledEvent.Set ();
}
}
private class Block private class Block
{ {

View File

@@ -9,13 +9,13 @@ namespace WorldOfPeacecraft
{ {
private TcpClient Client; private TcpClient Client;
private StreamReader Reader; private StreamReader Reader;
private Parser Parser; private Buffer KillerBuffer;
private Thread ReceiverThread; private Thread ReceiverThread;
public Receiver (TcpClient client, Parser parser) public Receiver (TcpClient client, Buffer buffer)
{ {
this.Client = client; this.Client = client;
this.Parser = parser; this.KillerBuffer = buffer;
ReceiverThread = new Thread(new ThreadStart(this.doReceive)); ReceiverThread = new Thread(new ThreadStart(this.doReceive));
ReceiverThread.Start(); ReceiverThread.Start();
} }
@@ -29,7 +29,7 @@ namespace WorldOfPeacecraft
{ {
this.Reader = new StreamReader (Client.GetStream ()); this.Reader = new StreamReader (Client.GetStream ());
while (true) { while (true) {
Parser.AddToBuffer(Receive()); KillerBuffer.AddToBuffer(Receive());
} }
} }