Beispiel #1
0
        static void Main(string[] args)
        {
            BonjourServiceResolver bsr = new BonjourServiceResolver();

            bsr.ServiceFound += new Network.ZeroConf.ObjectEvent <Network.ZeroConf.IService>(bsr_ServiceFound);
            bsr.Resolve("_airport._tcp.local", NetworkInterface.GetAllNetworkInterfaces().SelectMany(nic => nic.GetIPProperties().UnicastAddresses.Where(ip => ip.IsDnsEligible).Select(ip => ip.Address)).Select(ip => new IPEndPoint(ip, 0)).ToArray());
            Console.ReadLine();
            bsr.Dispose();
            //Service s = new Service();
            //s.AddAddress(new Network.Dns.EndPoint() { DomainName = "AIL.local.", Port = 50508, Addresses = Network.ZeroConf.ResolverHelper.GetEndPoint().Addresses });
            //s.Protocol = "_touch-remote._tcp.local.";
            //s.Name = "MyName";
            //s.HostName = "ASPERGE.local.";
            //s["DvNm"] = "PC Remote";
            //s["RemV"] = "10000";
            //s["DvTy"] = "iPod";
            //s["RemN"] = "Remote";
            //s["txtvers"] = "1";
            //s["Pair"] = "0000000000000001";
            //s.Publish();
            //Thread.Sleep(3600000);
            //s.Stop();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            try {
                var commandLineArgs = CommandLineArguments.Parse(args);
                if (commandLineArgs.OptionExists("h"))
                {
                    PrintUsage();
                    return;
                }

                Console.Clear();
                Console.WriteLine("Searching AppleTV ...");

                BonjourServiceResolver resolver = new BonjourServiceResolver();
                ManualResetEvent       signal   = new ManualResetEvent(false);

                resolver.ServiceFound += service => {
                    var address = service.Addresses[0].Addresses.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
                    if (address != null)
                    {
                        Console.WriteLine("Apple TV Found : {0}", address);
                        _appleTvIp = address.ToString();
                        signal.Set();
                    }
                };

                resolver.Resolve("_airplay._tcp.local.");
                bool signaled = signal.WaitOne(TimeSpan.FromSeconds(30));
                if (!signaled)
                {
                    PrintError("Apple TV not found");
                    return;
                }

                var localAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
                if (localAddress == null)
                {
                    PrintError("Local Ipv4 not found");
                    return;
                }

                _localIp = localAddress.ToString();

                Player player = new Player(_appleTvIp, _localIp);
                player.StateChanged += (sender, eventArgs) => {
                    _currentState = eventArgs.NewState;
                    SetRate(player);
                    PrintInfo();
                };

                player.Error += (sender, eventArgs) => {
                    _failureReason = eventArgs.FailureReason;
                    PrintInfo();
                };

                player.Progress += (sender, eventArgs) => {
                    _position = eventArgs.Position;
                    if (eventArgs.Position.TotalSeconds > 0)
                    {
                        _progress = (int)(((eventArgs.Position.TotalSeconds / eventArgs.Duration.TotalSeconds) * 100));
                    }

                    PrintInfo();
                };

                player.Start();

                if (commandLineArgs.OptionExists("i"))
                {
                    player.Play(commandLineArgs.GetOptionValue("i")).ContinueWith(t => {
                        if (t.Exception != null)
                        {
                            _failureReason = string.Format("{0} : {1}", t.Exception.InnerExceptions[0].GetType().Name, t.Exception.InnerExceptions[0].Message);
                            PrintInfo();
                        }
                    });
                }

                ConsoleKeyInfo cki;

                do
                {
                    while (!Console.KeyAvailable)
                    {
                        Thread.Sleep(10);
                    }

                    cki = Console.ReadKey(true);

                    switch (cki.Key)
                    {
                    case ConsoleKey.Spacebar:
                        if (_currentState == StateType.Paused)
                        {
                            player.Resume();
                        }
                        else
                        {
                            player.Pause();
                            if (_currentState == StateType.Unknown)
                            {
                                _currentState = StateType.Paused;
                            }
                        }

                        break;

                    case ConsoleKey.LeftArrow:
                        int lr;
                        if (TryGetPreviousRate(_rate.GetValueOrDefault(0), out lr))
                        {
                            player.SetRate(lr).ContinueWith(t => {
                                if (t.IsCompleted)
                                {
                                    SetRate(player);
                                }
                            });
                        }

                        break;

                    case ConsoleKey.RightArrow:
                        int rr;
                        if (TryGetNextRate(_rate.GetValueOrDefault(0), out rr))
                        {
                            player.SetRate(rr).ContinueWith(t => {
                                if (t.IsCompleted)
                                {
                                    SetRate(player);
                                }
                            });
                        }

                        break;
                    }
                } while (cki.Key != ConsoleKey.X);

                player.Stop();
            } catch (Exception e) {
                Console.Error.WriteLine(e.Message);
            }
        }