diff --git a/dummyclient_manuel/Program.cs b/dummyclient_manuel/Program.cs index d33c2f8..0e61037 100644 --- a/dummyclient_manuel/Program.cs +++ b/dummyclient_manuel/Program.cs @@ -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 (); - 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 (); + Program program = new Program(); + program.startThreads(); } + + public Program () + { + Term = new Terminal (); + TcpClient client = new TcpClient ("localhost", 9999); + 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()); + } + } + } \ No newline at end of file diff --git a/dummyclient_manuel/Receiver.cs b/dummyclient_manuel/Receiver.cs index 89db337..52e3678 100644 --- a/dummyclient_manuel/Receiver.cs +++ b/dummyclient_manuel/Receiver.cs @@ -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(); } } diff --git a/dummyclient_manuel/Sender.cs b/dummyclient_manuel/Sender.cs index d814af6..a731aed 100644 --- a/dummyclient_manuel/Sender.cs +++ b/dummyclient_manuel/Sender.cs @@ -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(); } } \ No newline at end of file diff --git a/dummyclient_manuel/Terminal.cs b/dummyclient_manuel/Terminal.cs index 71f1d66..ed82013 100644 --- a/dummyclient_manuel/Terminal.cs +++ b/dummyclient_manuel/Terminal.cs @@ -6,7 +6,7 @@ public class Terminal { private Object TerminalLock = new Object (); private Object ReadLineLock = new Object (); - private AutoResetEvent ResetEvent = new AutoResetEvent(false); + private AutoResetEvent ResetEvent = new AutoResetEvent (false); private String InputBuffer = ""; private bool AcceptInput = false; private int OutLinePos; @@ -14,7 +14,7 @@ public class Terminal public Terminal () { OutLinePos = Console.CursorTop; - Thread catchInputThread = new Thread(new ThreadStart(this.CatchInput)); + Thread catchInputThread = new Thread (new ThreadStart (this.CatchInput)); catchInputThread.Start (); } @@ -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.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); + 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); @@ -57,7 +51,7 @@ public class Terminal public void PrintLine (String s) { lock (TerminalLock) { - ClearInputLine(); + ClearInputLine (); Console.WriteLine (s); OutLinePos = Console.CursorTop; Console.Write (InputBuffer); @@ -67,12 +61,21 @@ public class Terminal public String ReadLine () { lock (ReadLineLock) { - String result; - AcceptInput = true; - ResetEvent.WaitOne(); - result = InputBuffer; - InputBuffer = ""; - return result; + try { + String result; + AcceptInput = true; + ResetEvent.WaitOne (); + result = InputBuffer; + InputBuffer = ""; + return result; + } catch (ThreadAbortException e) { + lock (TerminalLock) { + AcceptInput = false; + InputBuffer = ""; + ClearInputLine (); + } + throw e; + } } }