Eigener Buffer für Producer-Consumer Lösung.
Noch unvollständig
This commit is contained in:
@@ -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
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 ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,16 +23,16 @@ 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;
|
||||||
private Player DummyPlayer;
|
private Player DummyPlayer;
|
||||||
|
|
||||||
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> ();
|
||||||
@@ -40,11 +40,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 ();
|
||||||
}
|
}
|
||||||
@@ -58,9 +58,9 @@ namespace WorldOfPeacecraft
|
|||||||
if (IsCompletePackage ()) {
|
if (IsCompletePackage ()) {
|
||||||
Parse ();
|
Parse ();
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player getDummyPlayer()
|
public Player getDummyPlayer()
|
||||||
{
|
{
|
||||||
return DummyPlayer;
|
return DummyPlayer;
|
||||||
@@ -421,13 +421,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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user