Merge branch 'master' of manuel-voegele.de:inf3
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="DummyBackend.cs" />
|
||||
<Compile Include="ParserTest.cs" />
|
||||
<Compile Include="src\Buffer.cs" />
|
||||
<Compile Include="src\Receiver.cs" />
|
||||
<Compile Include="src\Sender.cs" />
|
||||
<Compile Include="src\DefaultGui\DefaultGui.Designer.cs" />
|
||||
|
||||
35
src/Buffer.cs
Normal file
35
src/Buffer.cs
Normal 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 ();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,15 +49,15 @@ namespace WorldOfPeacecraft
|
||||
public const string MessPlayers = "players";
|
||||
public const string MessDragon = "dragon";
|
||||
public const string MessMapcell = "cell";
|
||||
private Queue<string> Buffer = new Queue<string> ();
|
||||
private AutoResetEvent BufferFilledEvent = new AutoResetEvent (false);
|
||||
private Buffer MonsterBuffer;
|
||||
private Thread ParserThread;
|
||||
private LinkedList<string> 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<string> ();
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user