示例#1
0
        static void Main(string[] args)
        {
            Console.WriteLine();
            var opcoes = new Opcoes();
            try
            {
                Console.TreatControlCAsInput = false;
                Console.CancelKeyPress += CancelKeyPressed;

                opcoes.Parse(args);

                if (opcoes.ListaVisualizacoes)
                {
                    ListaVisualizacoes();
                    return;
                }
                if (opcoes.ListaOrdens)
                {
                    ListaOrdens();
                    return;
                }
                if (opcoes.Diretorios.Length == 0)
                {
                    throw new GetOptException("Nenhum diretório especificado");
                }

                var servidor = new HttpServer(opcoes.Porta);
                try
                {

                    using (var autorizador = new HttpAuthorizer(servidor))
                    {
                        if (opcoes.Ips.Length != 0)
                        {
                            autorizador.AddMethod(new IPAddressAuthorizer(opcoes.Ips));
                        }
                        if (opcoes.Macs.Length != 0)
                        {
                            autorizador.AddMethod(new MacAuthorizer(opcoes.Macs));
                        }
                        if (opcoes.UserAgents.Length != 0)
                        {
                            autorizador.AddMethod(
                              new UserAgentAuthorizer(opcoes.UserAgents));
                        }

                        Console.Title = "dlna";

                        var tipos = opcoes.Tipos[0];
                        foreach (var t in opcoes.Tipos)
                        {
                            tipos = tipos | t;
                            servidor.InfoFormat("Tipos ativado {0}", t);
                        }

                        var friendlyName = "dlna";

                        if (opcoes.Separacao)
                        {
                            foreach (var d in opcoes.Diretorios)
                            {
                                servidor.InfoFormat("Montando Servidor de Midia da pasta {0}", d.FullName);
                                var fs = ConfiguraServidorDeArquivos(
                                  opcoes, tipos, new DirectoryInfo[] { d });
                                friendlyName = fs.FriendlyName;
                                servidor.RegisterMediaServer(fs);
                                servidor.NoticeFormat("{0} montado", d.FullName);
                            }
                        }
                        else
                        {
                            servidor.InfoFormat(
                              "Montando Servidor de Midia da pasta {0} ({1})",
                              opcoes.Diretorios[0], opcoes.Diretorios.Length);
                            var fs = ConfiguraServidorDeArquivos(opcoes, tipos, opcoes.Diretorios);
                            friendlyName = fs.FriendlyName;
                            servidor.RegisterMediaServer(fs);
                            servidor.NoticeFormat(
                              "{0} ({1}) montado",
                              opcoes.Diretorios[0], opcoes.Diretorios.Length);
                        }

                        Console.Title = String.Format("{0} - rodando ...", friendlyName);

                        Rodar(servidor);
                    }
                }
                finally
                {
                    servidor.Dispose();
                }

            }
            catch (GetOptException ex)
            {
                Console.Error.WriteLine("Error: {0}\n\n", ex.Message);
                opcoes.PrintUsage();
            }
        }
示例#2
0
        private static FileServer ConfiguraServidorDeArquivos(Opcoes opcoes, DlnaMediaTypes tipos, DirectoryInfo[] d)
        {
            var ids = new Identifiers(ComparerRepository.Lookup(opcoes.Ordem), opcoes.Ascendente);

            var fs = new FileServer(tipos, ids, d);
            try
            {
                if (opcoes.ArquivoCache != null)
                {
                    fs.SetCacheFile(opcoes.ArquivoCache);
                }
                fs.Load();
            }
            catch (Exception)
            {
                fs.Dispose();
                throw;
            }
            return fs;
        }