Implementation umgebaut, sodass sie besser der Aufgabenstellung entspricht

This commit is contained in:
2014-03-26 14:01:36 +01:00
parent 978f074617
commit ab2da9336f
4 changed files with 79 additions and 49 deletions

View File

@@ -3,15 +3,49 @@ using System.Threading;
public class Program
{
private Terminal Term;
private Receiver Rec;
private Sender Send;
private Thread SenderThread;
private Thread ReceiverThread;
public static void Main ()
{
Terminal terminal = new Terminal ();
Program program = new Program();
program.startThreads();
}
public Program ()
{
Term = new Terminal ();
TcpClient client = new TcpClient ("localhost", 9999);
Receiver receiver = new Receiver (client.GetStream (), terminal);
Sender sender = new Sender (client.GetStream (), terminal);
Thread receiverThread = new Thread (new ThreadStart (receiver.Receive));
receiverThread.Start ();
sender.Send ();
client.Close ();
Rec = new Receiver (client);
Send = new Sender (client);
}
public void startThreads ()
{
ReceiverThread = new Thread(new ThreadStart(this.doReceive));
ReceiverThread.Start ();
SenderThread = new Thread(new ThreadStart(this.doSend));
SenderThread.Start();
}
public void doReceive ()
{
string line;
while ((line = Rec.Receive()) != null)
{
Term.PrintLine(line);
}
SenderThread.Abort();
}
public void doSend ()
{
while (true) {
Send.Send(Term.ReadLine());
}
}
}

View File

@@ -4,21 +4,18 @@ using System.Net.Sockets;
class Receiver
{
private TcpClient Client;
private StreamReader Reader;
private Terminal Term;
public Receiver (NetworkStream stream, Terminal terminal)
public Receiver (TcpClient client)
{
this.Reader = new StreamReader(stream);
this.Term = terminal;
this.Client = client;
this.Reader = new StreamReader(Client.GetStream());
}
public void Receive ()
public string Receive ()
{
while (true) {
String line = Reader.ReadLine();
Term.PrintLine(line);
}
return Reader.ReadLine();
}
}

View File

@@ -5,21 +5,17 @@ using System.Text;
public class Sender
{
private StreamWriter Writer;
private Terminal Term;
private TcpClient Client;
public Sender (NetworkStream stream, Terminal terminal)
public Sender (TcpClient client)
{
this.Term = terminal;
this.Writer = new StreamWriter(stream);
this.Client = client;
}
public void Send ()
public void Send (String message)
{
while (true) {
String line = Term.ReadLine ();
Writer.WriteLine(line);
Writer.Flush();
}
StreamWriter writer = new StreamWriter(Client.GetStream());
writer.WriteLine(message);
writer.Flush();
}
}

View File

@@ -23,29 +23,23 @@ public class Terminal
while (true) {
ConsoleKeyInfo key = Console.ReadKey (false);
lock (TerminalLock) {
if (!AcceptInput)
{
if (!AcceptInput) {
Console.CursorLeft--;
Console.Write (" ");
Console.CursorLeft--;
continue;
}
if (key.Key == ConsoleKey.Backspace)
{
if (key.Key == ConsoleKey.Backspace) {
if (InputBuffer.Length == 0)
continue;
InputBuffer = InputBuffer.Substring (0, InputBuffer.Length - 1);
ClearInputLine ();
Console.Write (InputBuffer);
}
else if (key.Key == ConsoleKey.Enter)
{
} else if (key.Key == ConsoleKey.Enter) {
AcceptInput = false;
ResetEvent.Set ();
OutLinePos = Console.CursorTop;
}
else
{
} else {
InputBuffer += key.KeyChar;
ClearInputLine ();
Console.Write (InputBuffer);
@@ -67,12 +61,21 @@ public class Terminal
public String ReadLine ()
{
lock (ReadLineLock) {
try {
String result;
AcceptInput = true;
ResetEvent.WaitOne ();
result = InputBuffer;
InputBuffer = "";
return result;
} catch (ThreadAbortException e) {
lock (TerminalLock) {
AcceptInput = false;
InputBuffer = "";
ClearInputLine ();
}
throw e;
}
}
}