示例#1
0
        void LoadSettings()
        {
            var s = settings.Get <PeerCastStationSettings>();

            try {
                if (s.Logger != null)
                {
                    Logger.Level        = s.Logger.Level;
                    Logger.LogFileName  = s.Logger.LogFileName;
                    Logger.OutputTarget = s.Logger.OutputTarget;
                }
                if (s.AccessController != null)
                {
                    peerCast.AccessController.MaxPlays  = s.AccessController.MaxDirects;
                    peerCast.AccessController.MaxRelays = s.AccessController.MaxRelays;
                    peerCast.AccessController.MaxPlaysPerBroadcastChannel  = s.AccessController.MaxDirectsPerBroadcastChannel;
                    peerCast.AccessController.MaxPlaysPerRelayChannel      = s.AccessController.MaxDirectsPerChannel;
                    peerCast.AccessController.MaxRelaysPerBroadcastChannel = s.AccessController.MaxRelaysPerBroadcastChannel;
                    peerCast.AccessController.MaxRelaysPerRelayChannel     = s.AccessController.MaxRelaysPerChannel;
                    peerCast.AccessController.MaxUpstreamRate     = s.AccessController.MaxUpstreamRate;
                    peerCast.AccessController.MaxUpstreamRateIPv6 = s.AccessController.MaxUpstreamRateIPv6;
                    peerCast.AccessController.MaxUpstreamRatePerBroadcastChannel = s.AccessController.MaxUpstreamRatePerBroadcastChannel;
                    peerCast.AccessController.MaxUpstreamRatePerRelayChannel     = s.AccessController.MaxUpstreamRatePerChannel;
                }
                if (s.BroadcastID != Guid.Empty &&
                    (AtomCollectionExtensions.IDToByteArray(s.BroadcastID)[0] & 0x01) == 0)
                {
                    peerCast.BroadcastID = s.BroadcastID;
                }
                if (s.Listeners != null)
                {
                    foreach (var listener in s.Listeners)
                    {
                        try {
                            var ol = peerCast.StartListen(listener.EndPoint, listener.LocalAccepts, listener.GlobalAccepts);
                            ol.GlobalAuthorizationRequired = listener.GlobalAuthRequired;
                            ol.LocalAuthorizationRequired  = listener.LocalAuthRequired;
                            ol.AuthenticationKey           = new AuthenticationKey(listener.AuthId, listener.AuthPassword);
                        }
                        catch (System.Net.Sockets.SocketException e) {
                            logger.Error(e);
                        }
                    }
                }
                if (peerCast.OutputListeners.Count == 0)
                {
                    var endpoint =
                        new System.Net.IPEndPoint(
                            AppSettingsReader.GetIPAddress("DefaultListenAddress", System.Net.IPAddress.Any),
                            AppSettingsReader.GetInt("DefaultListenPort", 7144)
                            );
                    try {
                        peerCast.StartListen(
                            endpoint,
                            OutputStreamType.All,
                            OutputStreamType.Metadata | OutputStreamType.Relay);
                    }
                    catch (System.Net.Sockets.SocketException e) {
                        logger.Error(e);
                        try {
                            peerCast.StartListen(
                                new System.Net.IPEndPoint(endpoint.Address, 0),
                                OutputStreamType.All,
                                OutputStreamType.None);
                        }
                        catch (System.Net.Sockets.SocketException e2) {
                            logger.Error(e2);
                        }
                    }
                }
                if (s.YellowPages != null)
                {
                    foreach (var yellowpage in s.YellowPages)
                    {
                        try {
                            peerCast.AddYellowPage(yellowpage.Protocol, yellowpage.Name, yellowpage.Uri, yellowpage.ChannelsUri);
                        }
                        catch (ArgumentException e) {
                            logger.Error(e);
                        }
                    }
                }
            }
            catch (FormatException)
            {
            }
            ChannelCleaner.Mode          = settings.Get <ChannelCleanerSettings>().Mode;
            ChannelCleaner.InactiveLimit = settings.Get <ChannelCleanerSettings>().InactiveLimit;
        }