コード例 #1
0
ファイル: DataPack.cs プロジェクト: walzero/TrabalhoFilosofos
        private static void put_in_table(CliObj values)
        {
            DataRow newrow = table.NewRow();
            newrow[0] = values.id;
            newrow[1] = values.ip;
            newrow[2] = values.nome;
            newrow[3] = values.master;

            table.Rows.Add(newrow);
            _cli_update = true;
        }
コード例 #2
0
ファイル: DataPack.cs プロジェクト: walzero/TrabalhoFilosofos
 public static void addCliente(CliObj newcliente)
 {
     clientes.Add(newcliente); num_cli++; set_hasFork(hasfork.Count, true); put_in_table(newcliente);
 }
コード例 #3
0
        public void clientHandler(Object obj)
        {
            TcpClient client = (TcpClient)obj;
            StreamWriter sWriter = new StreamWriter(client.GetStream(), Encoding.ASCII);
            StreamReader sReader = new StreamReader(client.GetStream(), Encoding.ASCII);
            Boolean isMaster = false;
            Boolean bClientConnected = true;
            String sData = null;

            while (bClientConnected)
            {
                try
                {
                    sData = sReader.ReadLine();
                    CliObj cliobj;
                    lock (this._lockThis)
                    {
                        if (DataPack._num_clientes > 0)
                        {
                            cliobj = new CliObj(DataPack._num_clientes, ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(), sData, 'C');
                        }
                        else
                        {
                            cliobj = new CliObj(DataPack._num_clientes, ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(), sData, 'M');
                            isMaster = true;
                        }
                        DataPack.addCliente(cliobj);
                    }

                    if(isMaster)
                    {
                        String str = cliobj.id.ToString() + ",M";
                        sWriter.WriteLine(str);
                        sWriter.Flush();
                    }
                    else
                    {
                        CliObj master = DataPack.getMasterClient();
                        String str = cliobj.id.ToString() + ',' + cliobj.master.ToString() + ',' + master.ip.ToString();
                        sWriter.WriteLine(str);

                        while (this._ready.Equals(false)) ;

                        sWriter.WriteLine("GO");
                        sWriter.Flush();

                        sWriter.Close();
                        sReader.Close();
                        client.Close();
                        return;
                    }

                    while (true)
                    {
                        String PedidoMaster = sReader.ReadLine();
                        if(PedidoMaster.Equals("GO"))
                        {

                            List<CliObj> mylist = DataPack._cli_list;

                            // To write to a file, create a StreamWriter object.
                            IFormatter formatter = new BinaryFormatter();
                            formatter.Serialize(client.GetStream(), mylist);

                            this._go = true;
                            this._server.Stop();
                            break;
                        }
                        else
                            if (PedidoMaster.Equals("NUM"))
                            {
                                sWriter.WriteLine(DataPack._num_clientes.ToString());
                                sWriter.Flush();
                            }
                    }

                    TcpChannel tcpChannel = new TcpChannel();
                    ChannelServices.RegisterChannel(tcpChannel, false);

                    Type commonInterfaceType = Type.GetType("ForkManager");

                    RemotingConfiguration.RegisterWellKnownServiceType(typeof(ForkManager),
                        "ForkMaster", WellKnownObjectMode.SingleCall);

                    while (true)
                    {
                        TcpListener atualizador = new TcpListener(IPAddress.Any, this._update_port);
                    }

                }
                catch (System.IO.IOException e)
                {
                    Console.Write(e);
                }
            }
        }