Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        public static void interpretarBuffer(byte[] buf)
        {
            ControladorDesenhavel.interpretando = true;

            // enfileirar dados

            /* byte[] buffer = new byte[buf.Length];
             * for (int i = 0; i < buf.Length; i++)
             *   buffer[i] = buf[i];
             *///MessageBox.Show("Tratando dados");
            //pegar conjuntos de 41 em 41 bytes
            //repDes = new DesenhavelRepositorio();
            //throw new Exception("a");
            //MessageBox.Show("Recebeu TCP");
            for (int i = 0; i == 0 || i < buf.Length - 40; i = i + 41)
            {
                if (buf[i] == flagFim)
                {
                    //flag para FIM = 255
                    Form2.flagFimSimulacao = true;
                    ControladorDesenhavel.interpretando = false;

                    return;
                }
                if (buf[i] == flagInicio)
                {
                    frmPrincipal.flagAbrirSimulacao     = true;
                    ControladorDesenhavel.interpretando = false;

                    return;
                }
                byte[] convertidoIndice = inverter(buf, i + 1, i + 5);

                byte[]     convertidoQTD        = inverter(buf, i + 5, i + 9);
                byte[]     convertidoXRel       = inverter(buf, i + 9, i + 17);
                byte[]     convertidoYRel       = inverter(buf, i + 17, i + 25);
                byte[]     convertidoLarguraRel = inverter(buf, i + 25, i + 33);
                byte[]     convertidoAlturaRel  = inverter(buf, i + 33, i + 41);
                Desenhavel itemBuffer           = null;
                //byte 0-> indica se é forma, imagem, fim, início, ...
                int indice = BitConverter.ToInt32(convertidoIndice, 0);
                //byte 1 até 4 => índice
                int qtdDesenhaveis = BitConverter.ToInt32(convertidoQTD, 0);
                //byte 5 até 8 => qtd Desenhaveis desse tipo
                double xRel = BitConverter.ToDouble(convertidoXRel, 0);
                //byte 9 até 16 => xRel
                double yRel = BitConverter.ToDouble(convertidoYRel, 0);
                //byte 17 até 24 => yRel
                double larguraRel = BitConverter.ToDouble(convertidoLarguraRel, 0);
                //byte 25 até 32 => larguraRel
                double alturaRel = (double)BitConverter.ToDouble(convertidoAlturaRel, 0);
                //byte 33 até 40 => alturaRel
                if (buf[i] != flagFim && buf[i] != flagForma)
                {
                    //flag para imagem

                    itemBuffer = new Imagem(indice, xRel, yRel, larguraRel, alturaRel);
                }

                if (buf[i] == flagForma)
                {
                    //flag para forma = 254
                    itemBuffer = new Forma(indice, xRel, yRel, larguraRel, alturaRel);
                }
                DesenhavelRepositorio.armazenar(itemBuffer, qtdDesenhaveis);
                DesenhavelRepositorio.armazenar(itemBuffer);
            }
            Form2.flagFimInterpretacao          = false;
            Form2.flagFimRecebimento            = true;
            ControladorDesenhavel.interpretando = false;
        }