示例#1
0
        public static void finalizarTimer()
        {
            try
            {
                timerP2P.Dispose();
                timerP2P = null;
            }
            catch {
                timerP2P = null;
            }

            if (escutarConexao != null && escutarPeer == null)
            {
                if (ConexaoP2P.estadoEscutaConexao() == TaskStatus.RanToCompletion)
                {
                    try
                    {
                        escutarConexao.Dispose();
                        escutarConexao = null;
                    }
                    catch
                    {
                        escutarConexao = null;
                    }
                    // MessageBox.Show("Aceitando Peer!");
                    ConexaoP2P.aceitarPeer();
                }
                else
                {
                    ConexaoP2P.finalizarConexao();
                }
            }
            else
            {
                if (ConexaoP2P.estadoEscutaPeer() == TaskStatus.RanToCompletion)
                {
                    //MessageBox.Show("Tratando dados!");
                    ConexaoP2P.tratarDados();
                    try
                    {
                        escutarPeer.Dispose();
                        escutarPeer = null;
                    }
                    catch
                    {
                        escutarPeer = null;
                    }
                }
                else
                {
                    ConexaoP2P.finalizarConexao();
                }
            }
        }
示例#2
0
        private void Form2_Load(object sender, EventArgs e)
        {
            interpretacao = (object obj) =>
            {
                //bool flagFim = false;
                semaforoDesenhaveis.WaitOne();
                //inicializarTimer(5);

                //MessageBox.Show("Interpretando");
                if (!DesenhavelRepositorio.estaVazio())
                {
                    try
                    {
                        Invalidate();
                        g = CreateGraphics();    //resetar os gráficos
                    }
                    catch
                    {
                    }

                    Desenhavel desenhavel = DesenhavelRepositorio.obter();
                    if (desenhavel != null)
                    {
                        interpretarDesenhavel(desenhavel);
                    }
                    caneta = new Pen(Color.Gray, 5);
                    float[] padrao = { 3, 6 };
                    caneta.DashPattern = padrao;
                    g.DrawLine(caneta, 0, this.Height / 2, this.Width, this.Height / 2);
                    while (!DesenhavelRepositorio.Primeiro)    //significa que esse é o primeiro desenhável
                    {
                        desenhavel = DesenhavelRepositorio.obter();
                        if (desenhavel != null)
                        {
                            interpretarDesenhavel(desenhavel);
                        }
                    }
                    //DesenhavelRepositorio.limpar();
                }
                semaforoDesenhaveis.Release();
                //semaforoDesenhaveis.Release();
                receberDesenhaveis = new Task(recebimento, "receberDesenhaveis");

                //inicializarTimer(4);
                receberDesenhaveis.Start();
            };
            recebimento = (object obj) =>
            {
                bool estaEscutando = false;
                //bool flagFim = false;
                semaforoDesenhaveis.WaitOne();
                //inicializarTimer(4);*/
                //MessageBox.Show("Escutando");
                DesenhavelRepositorio.limpar();
                if (!ControladorDesenhavel.Interpretando)
                {
                    ConexaoP2P.tratarDados();
                    estaEscutando = true;
                }


                //esse método já recebe e adiciona na
                //classe DesenhavelRepositorio


                semaforoDesenhaveis.Release();
                interpretarDesenhaveis = new Task(interpretacao, "interpretarDesenhaveis");

                //inicializarTimer(5);
                interpretarDesenhaveis.Start();

                //semaforoDesenhaveis.Release();
            };
            Action <object> controleSemaforo = (object obj) =>
            {
                administrarSemaforo();
            };

            semaforoDesenhaveis = new Semaphore(0, 1);
            controlarSemaforo   = new Task(controleSemaforo, "controlarSemaforo");
            //   receberDesenhaveis.Start();
            flagFimInterpretacao = true;
            //receberDesenhaveis.Start();
            semaforoDesenhaveis.Release();
            controlarSemaforo.Start();
            //finalizarTimer(true);
        }