Esempio n. 1
0
        //attende il collegamento di nuovi peer
        private void StartAcceptUsersConnection()
        {
            //crea un eventargs per una richiesta di connessione asincrona, se la lista dei peers non è ancora piena inizia ad attendere fino a quando non riceve
            //una richiesta di connessione o il segnale d'arresto. Se viene ricevuta una richiesta di connessione viene chiamata la funzione InsertNewPeer che
            //inserisce il nuovo peer nella lista dei peer mPeers

            //è asincrono perchè altrimenti al segnale di spegnimento non si fermerebbe
            SocketAsyncEventArgs asyncConnection;
            bool IncomingConnection = false;

            if (Program.DEBUG)
            {
                Console.WriteLine("Attending connection...");
            }
            while (!IsStopped)
            {
                if (ConnectedPeers < MAX_PEERS)
                {
                    IncomingConnection         = false;
                    asyncConnection            = new SocketAsyncEventArgs();
                    asyncConnection.Completed += (object sender, SocketAsyncEventArgs e) => { IncomingConnection = true; };
                    mListener.AcceptAsync(asyncConnection);
                    while (!IncomingConnection && !IsStopped)
                    {
                        Thread.Sleep(1000);
                    }
                    if (IncomingConnection)
                    {
                        if (Program.DEBUG)
                        {
                            CIO.DebugOut("Established connection!");
                        }
                        InsertNewPeer(asyncConnection.AcceptSocket);
                    }
                    asyncConnection.Dispose();
                }
                else
                {
                    Thread.Sleep(10000);
                }
            }
            //TODO
            //CloseAllConnection();
            if (Program.DEBUG)
            {
                CIO.WriteLine("Chiuse tutte le connessioni con gli users");
            }
        }