public void Run() { // FIXME: move this all to a connect function List <Thread> clients = new List <Thread>(); List <RecvThread> recvThreads = new List <RecvThread>(); IPAddress ip = IPAddress.Any; l = new TcpListener(ip, 8001); // start server thread var server = new SendThread(_sockets, _queue, _hash); _server = new Thread(server.Run); _server.Start(); while (!_server.IsAlive) { } l.Start(); while (!_stop) { try { Socket s = l.AcceptSocket(); s.SendTimeout = 500; s.ReceiveTimeout = 500; _sockets.Add(s); // start a thread for that connection var t = new RecvThread(s, _queue, _hash); recvThreads.Add(t); _threads.Add(new Thread(t.Run)); _threads.Last().Start(); } catch (SocketException e) { // interrupted } } server.Stop(); foreach (var r in recvThreads) { r.Stop(); } l.Stop(); }
public void Run() { // FIXME: move this all to a connect function TcpClient c = new TcpClient(); try { c.Connect("localhost", 8001); c.SendTimeout = 500; c.ReceiveTimeout = 500; var send = new SendThread(_q, c); _sendThread = new Thread(send.Run); _sendThread.Start(); while (!_sendThread.IsAlive) { } var recv = new RecvThread(_r, c); _recvThread = new Thread(recv.Run); _recvThread.Start(); while (!_recvThread.IsAlive) { } // TODO: is there anything to add here? _event.WaitOne(); _event.Reset(); send.Stop(); recv.Stop(); _r.Stop(); _q.Stop(); } catch (SocketException e) { // connection refused } }