Example #1
0
            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();
            }
Example #2
0
            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
                }
            }