예제 #1
0
        public void AtualizarServidor()
        {
            try
            {
                mt.WaitOne();
                int diff = Convert.ToInt32(DateTime.Now.Subtract(ultimaAtualizacao).TotalSeconds);

                if (diff < maximoTempo)
                {
                    mt.ReleaseMutex();
                    return;
                }

                var file = File.ReadAllText("./Config/Info.json");
                var conf = JObject.Parse(file);

                var hostNome  = conf["nomes"]["host"].ToString();
                var portNome  = conf["nomes"]["porta"].ToString();
                var hostUser  = conf["pedidos"]["host"].ToString();
                var portaUser = Int32.Parse(conf["pedidos"]["porta"].ToString());

                Channel channel = new Channel(hostNome + ":" + portNome, ChannelCredentials.Insecure);

                var client = new Nomes.NomesClient(channel);

                RegistroServico registro = new RegistroServico();
                registro.Host    = hostUser;
                registro.Porta   = portaUser;
                registro.Servico = "Pedido";

                registro.Estado         = new Estado();
                registro.Estado.Cpu     = Diagnostico.ObterUsoCpu();
                registro.Estado.Memoria = Diagnostico.ObterUsoMemoria();

                var resp = client.AtualizarEstado(registro);

                if (resp.Error != 0)
                {
                    throw new Exception(resp.Message);
                }
            }
            catch (Exception e)
            {
                mt.ReleaseMutex();
                throw new Exception("Falha ao atualizar dados do servidor!\n" + e.Message);
            }

            ultimaAtualizacao = DateTime.Now;
            mt.ReleaseMutex();
        }
예제 #2
0
        private static void Main(string[] args)
        {
            var file = File.ReadAllText("./Config/Info.json");

            try{
                var conf = JObject.Parse(file);

                var hostProduto  = conf["produtos"]["host"].ToString();
                var portaProduto = Int32.Parse(conf["produtos"]["porta"].ToString());

                Server server = new Server
                {
                    Services = { Produtos.BindService(new Servidor()) },
                    Ports    = { new ServerPort(hostProduto, portaProduto, ServerCredentials.Insecure) }
                };

                server.Start();
                Console.Write("Servidor de produtos Ativo!");

                Console.WriteLine("Conectando com o servidor de nomes para registrar servico!");

                var hostNome = conf["nomes"]["host"].ToString();
                var portNome = conf["nomes"]["porta"].ToString();

                Channel channel = new Channel(hostNome + ":" + portNome, ChannelCredentials.Insecure);

                var client = new Nomes.NomesClient(channel);

                RegistroServico registro = new RegistroServico();
                registro.Host    = hostProduto;
                registro.Porta   = portaProduto;
                registro.Servico = "Produto";

                registro.Estado         = new Estado();
                registro.Estado.Cpu     = Diagnostico.ObterUsoCpu();
                registro.Estado.Memoria = Diagnostico.ObterUsoMemoria();

                var resp = client.Cadastrar(registro);

                if (resp.Error != 0)
                {
                    throw new Exception("Erro ao cadastrar servico!\n" + resp.Message);
                }

                Console.WriteLine("Levantando listener udp para aguardar conexoes de confirmacao de ativo");
                Socket     receiver = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                UdpClient  listener = new UdpClient(portaProduto);
                IPEndPoint groupEP  = new IPEndPoint(IPAddress.Any, Convert.ToInt32(portaProduto));

                while (true)
                {
                    Console.WriteLine("Tentando receber algo");
                    byte[] x = listener.Receive(ref groupEP);
                    Console.WriteLine("Recebi conexao!");
                    string mess = Encoding.ASCII.GetString(x);

                    IPAddress broadcast = IPAddress.Parse(hostNome);

                    byte[]     sendbuf = Encoding.ASCII.GetBytes("Servidor Ativo");
                    IPEndPoint ep      = new IPEndPoint(broadcast, Convert.ToInt32(portNome));

                    receiver.SendTo(sendbuf, ep);
                }
            }catch (Exception e) {
                Console.WriteLine("Erro ocorrido ao iniciar servidor de produtos!\n" + e.Message);
            }
        }
 public RegistrosController(RegistroServico registroServico, DepartmentService departmentService, TipoServico tipoServico)
 {
     _registroServico   = registroServico;
     _tipoServico       = tipoServico;
     _departmentService = departmentService;
 }