예제 #1
0
 public static void tratarBroadcast()
 {
     //conexao.tratarBroadcast();
     //cuidado, lança exceção
     peerAchado = ConexaoP2P.ultimoPeer();
     frmPrincipal.listarDispositivos();
 }
예제 #2
0
        //esse método é chamado pelo delegado do timer
        public void CheckStatus(Object infoStatus)
        {
            AutoResetEvent autoEvento = (AutoResetEvent)infoStatus;

            if (ehParaParar(tarefaAnalisar.Status))
            {
                //MessageBox.Show("Task "+ tarefaAnalisar.Status.ToString()+" parou!");
                if (indTarefa < 2)
                {
                    Peer.finalizarTimer();
                }
                if (indTarefa >= 2 && indTarefa < 4)
                {
                    ConexaoP2P.finalizarTimer();
                }
                if (indTarefa == 4)
                {
                    Form2.flagFimRecebimento = true;
                }

                if (indTarefa == 5)
                {
                    Form2.flagFimInterpretacao = true;
                }
                if (indTarefa == 6)
                {
                    Form2.flagFimSimulacao = true;
                }
            }
        }
예제 #3
0
        public static void finalizarTimer()
        {
            try
            {
                timer.Dispose();
                timer = null;
            }
            catch { }
            if (Multicasting != null && respostaMulticasting == null)
            {
                if (estadoMulticasting() == TaskStatus.RanToCompletion)
                {
                    tratarMulticast();
                }
                else
                {
                    finalizarMulticasting();
                }
            }
            if (respostaMulticasting != null)
            {
                if (estadoRespostaMulticasting() == TaskStatus.RanToCompletion)
                {
                    finalizarRespostaMulticasting();

                    ConexaoP2P.inicializarPeer(3);
                }
                else
                {
                    finalizarRespostaMulticasting();
                }
            }
        }
예제 #4
0
        private static void tratarMulticast()
        {
            //timer.Dispose();
            //não sei se isso deve ser realmente assíncrono
            IPEndPoint       IPQuemMandou;
            UdpReceiveResult req;

            //CancellationToken token = new CancellationToken(true);

            //receber();
            //byte[] datagrama = servidorMulticast.ReceiveAsync(/*ref IPQuemMandou*/);
            req = Multicasting.Result;
            string requisição = Encoding.ASCII.GetString(req.Buffer);
            string nome       = requisição.Substring(msgReq.Length);

            requisição   = requisição.Substring(0, msgReq.Length);
            IPQuemMandou = req.RemoteEndPoint;

            finalizarMulticasting();
            if (!requisição.Equals(msgReq))
            {
                //throw new SocketException("Ataque vírus!!!");
                throw new Exception("Esperava por requisição \" Requisitando\", porém achou \" " + requisição + " \" !");
            }
            iPConectando   = IPQuemMandou;
            nomeConectando = nome;
            ConexaoP2P.tratarMulticast();
            //throw new Exception("B");
        }
예제 #5
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();
                }
            }
        }
예제 #6
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);
        }
예제 #7
0
 public static void tratarMulticast()
 {
     //conexao.tratarMulticast();
     peerAchado            = ConexaoP2P.ultimoPeer();
     frmPrincipal.novoPeer = true;
 }
예제 #8
0
        //tempo máximo = 2min 30 seg

        /*public enum Status
         * {
         *  Desconectado,
         *  EsperandoRequisicao,
         *  Escolhendo,
         *  EsperandoResposta,
         *  Conectado
         * }*/
        public ControladorConexao()
        {
            conexao = new ConexaoP2P(getIpLocal());
        }