/// <summary>
        /// Method executes when smart control point notices that
        /// a upnp  media server has left the network.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="device"></param>
        private void RemoveServer(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            string udn = device.UniqueDeviceName;

            CpMediaServer removeThis = null;

            lock (LockHashes)
            {
                if (UdnToInitStatus.Contains(udn))
                {
                    InitStatus status = (InitStatus)UdnToInitStatus[udn];
                }

                if (UdnToServer.Contains(udn))
                {
                    removeThis = (CpMediaServer)UdnToServer[udn];
                    UdnToServer.Remove(udn);
                }
            }

            if (this.OnServerGone != null)
            {
                this.OnServerGone(this, device);
            }

            if (removeThis != null)
            {
                if (this.OnCpServerRemoved != null)
                {
                    this.OnCpServerRemoved(this, removeThis);
                }
            }

            System.GC.Collect();
        }
예제 #2
0
        private void SCPAddSink(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            if (automaticMenuItem.Checked == false)
            {
                return;
            }
            if (devicelist.Contains(device) == true)
            {
                return;
            }
            if (device.FriendlyName.StartsWith("*") == true)
            {
                return;
            }
            ListViewItem lv = new ListViewItem(new string[] { device.FriendlyName, "0", "0" }, 1);

            lv.Tag = device;
            OutboundListViewTable[device] = lv;
            //device.OnRemoved += new UPnPDevice.OnRemovedHandler(RemovedSink);
            lock (outboundListView)
            {
                outboundListView.Items.Add(lv);
            }
            devicelist.Add(device);
            gk.AddDevice(device);
        }
예제 #3
0
        /// <summary>
        /// Wenn ein Gerät gefunden wird, wird dieses den
        /// </summary>
        /// <param name="cp"></param>
        /// <param name="device"></param>
        private void OnDeviceAdded(UPnPSmartControlPoint cp, UPnPDevice device)
        {
            //Console.WriteLine("found player " + device);
            //players.Add(new SonosPlayer(device));
            // we need to save these for future reference
            lock (playerDevices)
            {
                playerDevices[device.UniqueDeviceName] = device;
            }

            // okay, we will try and notify the players that they have been found now.
            var player = players.FirstOrDefault(p => p.UUID == device.UniqueDeviceName);

            if (player != null)
            {
                player.SetDevice(device);
            }

            // Subscribe to events
            var topologyService = device.GetService("urn:upnp-org:serviceId:ZoneGroupTopology");

            topologyService.Subscribe(600, (service, subscribeok) =>
            {
                if (!subscribeok)
                {
                    return;
                }

                var stateVariable         = service.GetStateVariableObject("ZoneGroupState");
                stateVariable.OnModified += OnZoneGroupStateChanged;
            });
        }
        protected void RemoveSink(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            AVRenderer RemoveThis = null;

            lock (ManagerList)
            {
                for (int i = 0; i < ManagerList.Count; ++i)
                {
                    AVRenderer avm = (AVRenderer)ManagerList[i];
                    if (avm.MainDevice.UniqueDeviceName == device.UniqueDeviceName)
                    {
                        RemoveThis = avm;
                        ManagerList.RemoveAt(i);
                        break;
                    }
                }
            }

            if (RemoveThis != null)
            {
                RemoveThis.Removed();
                if (RemovedRenderer != null)
                {
                    RemovedRenderer(RemoveThis);
                }
            }
        }
예제 #5
0
 public void OnDeviceAdded(UPnPSmartControlPoint cp, UPnPDevice device)
 {
     if (OnDeviceAddedEvent != null)
     {
         OnDeviceAddedEvent(cp, device);
     }
 }
예제 #6
0
 public void DeviceAdded_EventHandler(UPnPSmartControlPoint cp, UPnPDevice pDevice)
 {
     //Add to full device list
     _upnpDevices.Add(pDevice);
     UPnpDeviceNames.Add(pDevice.FriendlyName);
     //Add to MediaServer or MediaRenderer list
     AddRenderers(pDevice);
     AddMediaServers(pDevice);
 }
예제 #7
0
 public UPnPDeviceLocator()
 {
     //
     // Required for Windows Form Designer support
     //
     InitializeComponent();
     DeviceTree.Nodes.Add(UPnpRoot);
     scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(AddSink));
     scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(RemoveSink);
 }
예제 #8
0
        public MainForm()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(SCPAddSink));
            scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(SCPRemoveSink);
        }
        protected void AddSink(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            AVRenderer avm = new AVRenderer(device);

            lock (ManagerList)
            {
                ManagerList.Add(avm);
            }

            if (OnRenderer != null)
            {
                OnRenderer(avm);
            }
        }
        public DeviceSelector()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            DeviceTree.Nodes.Add(UPnpRoot);
            scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(AddSink));
            scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(RemoveSink);

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
        public DeviceSelector()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            DeviceTree.Nodes.Add(UPnpRoot);
            scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(AddSink));
            scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(RemoveSink);

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }
예제 #12
0
        private void ControlPoint_OnRemovedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            Console.WriteLine("OnRemovedDevice(" + device.FriendlyName + ", " + device.RemoteEndPoint + ", " + device.UniqueDeviceName + ")");

            if (this.device != null && this.device.UniqueDeviceName == device.UniqueDeviceName)
            {
                this.device = null;
            }

            if (OnRemovedDevice != null)
            {
                OnRemovedDevice(sender, device);
            }
        }
        /// <summary>
        /// This is the internal constructor, that basically makes it so
        /// only one object is responsible for keeping track of
        /// media server objects.
        /// </summary>
        /// <param name="readOnlyDesiredContainerState">
        /// If true, then the public programmer cannot set the desired
        /// state of containers, automatically causing each container
        /// to virtualize only their immediate child containers.
        /// </param>
        internal _MediaServerDiscovery
        (
            bool readOnlyDesiredContainerState
        )
        {
            m_Scp = new UPnPSmartControlPoint(
                new UPnPSmartControlPoint.DeviceHandler(this.Temporary_AddServer),
                null,
                new string[2] {
                CpContentDirectory.SERVICE_NAME, CpConnectionManager.SERVICE_NAME
            });

            m_Scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(this.RemoveServer);
            m_readOnlyDesiredState = readOnlyDesiredContainerState;
        }
        public AVTargetDiscovery(ManagerHandler NewCallback)
        {
            OnRenderer      += new ManagerHandler(Weak_OnRendererSink);
            RemovedRenderer += new ManagerHandler(Weak_RemovedRendererSink);

            if (NewCallback != null)
            {
                OnRenderer += NewCallback;
            }
            scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(AddSink),
                                            null,
                                            new string[3] {
                CpAVTransport.SERVICE_NAME, CpRenderingControl.SERVICE_NAME, CpConnectionManager.SERVICE_NAME
            });
            scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(RemoveSink);
        }
        /// <summary>
        /// When a MediaServer device is found, we add it to a temp list.
        /// Then we attempt to subscribe to its services.
        /// </summary>
        /// <param name="sender">the smart cp that found the device</param>
        /// <param name="device">the mediaserver device</param>
        private void Temporary_AddServer(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            if (this.OnServerSeen != null)
            {
                this.OnServerSeen(this, device);
            }

            UPnPService sCD = device.GetServices(CpContentDirectory.SERVICE_NAME)[0];
            UPnPService sCM = device.GetServices(CpConnectionManager.SERVICE_NAME)[0];

            CpMediaServer newServer;

            try
            {
                newServer = new CpMediaServer(device);
            }
            catch (UPnPCustomException)
            {
                newServer = null;
            }

            if (newServer != null)
            {
                InitStatus status = new InitStatus();
                status.SubcribeCD = false;
                status.SubcribeCM = false;
                status.EventedCD  = false;
                status.EventedCM  = false;
                status.Server     = newServer;

                lock (LockHashes)
                {
                    UdnToInitStatus[device.UniqueDeviceName] = status;
                }

                newServer.ConnectionManager.OnSubscribe += new CpConnectionManager.SubscribeHandler(this.Sink_OnCmServiceSubscribe);
                newServer.ContentDirectory.OnSubscribe  += new CpContentDirectory.SubscribeHandler(this.Sink_OnCdServiceSubscribe);

                newServer.ConnectionManager.OnStateVariable_SourceProtocolInfo += new CpConnectionManager.StateVariableModifiedHandler_SourceProtocolInfo(this.Sink_OnCmEvented);
                newServer.ContentDirectory.OnStateVariable_SystemUpdateID      += new CpContentDirectory.StateVariableModifiedHandler_SystemUpdateID(this.Sink_OnCdEvented);

                newServer.ConnectionManager._subscribe(600);
                newServer.ContentDirectory._subscribe(600);
            }
        }
예제 #16
0
        private void ControlPoint_OnAddedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            Console.WriteLine("OnAddedDevice(" + device.FriendlyName + ", " + device.RemoteEndPoint + ", " + device.UniqueDeviceName + ")");

            foreach (UPnPService service in device.Services)
            {
                Console.WriteLine(device.FriendlyName + " service: " + service.ServiceURN);
            }

            // only add device if necessary services are available
            if (device.GetServices(UPNP_SERVICE_CONTROL).Length > 0 && device.GetServices(UPNP_SERVICE_AVTRANSPORT).Length > 0)
            {
                if (OnAddedDevice != null)
                {
                    OnAddedDevice(sender, device);
                }
            }
        }
        private void HandleRemovedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            ArrayList   TempList = new ArrayList();
            TreeNode    tn;
            IEnumerator en = UPnpRoot.Nodes.GetEnumerator();

            while (en.MoveNext())
            {
                tn = (TreeNode)en.Current;
                if (((UPnPDevice)tn.Tag).UniqueDeviceName == device.UniqueDeviceName)
                {
                    TempList.Add(tn);
                }
            }
            for (int x = 0; x < TempList.Count; ++x)
            {
                UPnpRoot.Nodes.Remove((TreeNode)TempList[x]);
            }
        }
        private void HandleRemovedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            ArrayList   TempList = new ArrayList();
            TreeNode    tn;
            IEnumerator en = UPnpRoot.Nodes.GetEnumerator();

            while (en.MoveNext())
            {
                tn = (TreeNode)en.Current;
                if (((UPnPDevice)tn.Tag).UniqueDeviceName == device.UniqueDeviceName)
                {
                    TempList.Add(tn);
                }
            }

            Object[] args = new Object[1];
            args[0] = TempList;

            this.Invoke(new UpdateTreeRemoveDelegate(HandleTreeUpdate_Remove), args);
        }
예제 #19
0
        private void SCPRemoveSink(UPnPSmartControlPoint sender, UPnPDevice device)
        {
            if (devicelist.Contains(device) == false)
            {
                return;
            }
            //if (automaticMenuItem.Checked == false) return;


            lock (outboundListView)
            {
                foreach (ListViewItem lv in outboundListView.Items)
                {
                    UPnPDevice d = (UPnPDevice)lv.Tag;
                    if (d == device)
                    {
                        outboundListView.Items.Remove(lv);
                    }
                }
            }
            //device.OnRemoved -= new UPnPDevice.OnRemovedHandler(RemovedSink);
            devicelist.Remove(device);
            gk.RemoveDevice(device);
        }
 private void UPnPServiceLocator_Load(object sender, System.EventArgs e)
 {
     this.deviceTree.Nodes[0].Nodes.Clear();
     scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(HandleAddedDevice));
     scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(HandleRemovedDevice);
 }
예제 #21
0
 public virtual void StartScan()
 {
     //ControlPoint = new UPnPSmartControlPoint(OnDeviceAdded, OnServiceAdded, "urn:schemas-upnp-org:device:ZonePlayer:1");
     ControlPoint = new UPnPSmartControlPoint(OnDeviceAdded);
 }
예제 #22
0
 private void OnServiceAdded(UPnPSmartControlPoint sender, UPnPService service)
 {
 }
예제 #23
0
 public UPnPGatewayDiscovery()
 {
     upnp = new UPnPSmartControlPoint();
     upnp.OnAddedDevice += new UPnPSmartControlPoint.DeviceHandler(upnp_OnAddedDevice);
 }
예제 #24
0
 private void upnp_OnAddedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
 {
     // create Gateway from UPnPDevice
 }
예제 #25
0
 /// <summary>
 /// Initialisierung und Suchen der Sonosgeräte
 /// </summary>
 public virtual void StartScan()
 {
     IsReseted    = false;
     ControlPoint = new UPnPSmartControlPoint(OnDeviceAdded, OnServiceAdded, "urn:schemas-upnp-org:device:ZonePlayer:0");
 }
 private void DvSink(UPnPSmartControlPoint sender, UPnPDevice Dv)
 {
 }
예제 #27
0
 public void Dispose()
 {
     upnp.OnAddedDevice -= new UPnPSmartControlPoint.DeviceHandler(upnp_OnAddedDevice);
     upnp = null;
 }
예제 #28
0
 public void Start()
 {
     scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(OnAddSink),null,"urn:schemas-upnp-org:device:OysterDevice:1");
     scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(OnRemoveSink);
 }
 private void RemoveSink(UPnPSmartControlPoint sender, UPnPDevice device)
 {
     ArrayList TempList = new ArrayList();
     TreeNode tn;
     IEnumerator en = UPnpRoot.Nodes.GetEnumerator();
     while(en.MoveNext())
     {
         tn = (TreeNode)en.Current;
         if(((UPnPDevice)tn.Tag).UniqueDeviceName==device.UniqueDeviceName)
         {
             TempList.Add(tn);
         }
     }
     for(int x=0;x<TempList.Count;++x)
     {
         UPnpRoot.Nodes.Remove((TreeNode)TempList[x]);
     }
 }
예제 #30
0
 public ControlPoint()
 {
     scp = new UPnPSmartControlPoint(null, null, UPNP_DEVICE_RENDERER);
     scp.OnAddedDevice   += new UPnPSmartControlPoint.DeviceHandler(ControlPoint_OnAddedDevice);
     scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(ControlPoint_OnRemovedDevice);
 }
예제 #31
0
 private void OnRemoveSink(UPnPSmartControlPoint sender, UPnPDevice d)
 {
     RemoveEvent.Fire(this,d);
 }
예제 #32
0
 private void UPnPServiceLocator_Load(object sender, System.EventArgs e)
 {
     scp = new UPnPSmartControlPoint(new UPnPSmartControlPoint.DeviceHandler(HandleAddedDevice));
     scp.OnRemovedDevice += new UPnPSmartControlPoint.DeviceHandler(HandleRemovedDevice);
 }
예제 #33
0
 private void OnAddSink(UPnPSmartControlPoint sender, UPnPDevice d)
 {
     AddEvent.Fire(this,d);
 }
 private void AddSink(UPnPSmartControlPoint sender, UPnPDevice d)
 {
     HandleCreate(d, d.BaseURL);
 }
 private void HandleAddedDevice(UPnPSmartControlPoint sender, UPnPDevice device)
 {
     HandleCreate(device, device.BaseURL);
 }
 private void AddSink(UPnPSmartControlPoint sender, UPnPDevice d)
 {
     HandleCreate(d,d.BaseURL);
 }