public ModelSourceMediaRendererUpnpAv(Source aSource) { DidlLite didl = new DidlLite(); audioItem itemAudio = new audioItem(); itemAudio.Title = "Unknown"; didl.Add(itemAudio); kUnknownPlaylistItem = new MrItem(0, null, didl); iSource = aSource; iInstanceId = 0; iTrackId = 0; try { iServiceConnectionManager = new ServiceConnectionManager(iSource.Device, iSource.House.EventServer); } catch (ServiceException) { throw new ModelSourceException(301, "Service failure"); } iActionGetProtocolInfo = iServiceConnectionManager.CreateAsyncActionGetProtocolInfo(); iActionGetProtocolInfo.EventResponse += EventResponseGetProtocolInfo; try { iServiceAVTransport = new ServiceAVTransport(iSource.Device, iSource.House.EventServer); } catch (ServiceException) { throw new ModelSourceException(301, "Service failure"); } iActionPlay = iServiceAVTransport.CreateAsyncActionPlay(); iActionPause = iServiceAVTransport.CreateAsyncActionPause(); iActionStop = iServiceAVTransport.CreateAsyncActionStop(); iActionSeek = iServiceAVTransport.CreateAsyncActionSeek(); iActionNext = iServiceAVTransport.CreateAsyncActionNext(); iActionPrevious = iServiceAVTransport.CreateAsyncActionPrevious(); iActionSetAVTransportURI = iServiceAVTransport.CreateAsyncActionSetAVTransportURI(); iActionGetPositionInfo = iServiceAVTransport.CreateAsyncActionGetPositionInfo(); iActionGetTransportSettings = iServiceAVTransport.CreateAsyncActionGetTransportSettings(); iActionSetPlayMode = iServiceAVTransport.CreateAsyncActionSetPlayMode(); iActionGetPositionInfo.EventResponse += EventResponseGetPositionInfo; iActionGetTransportSettings.EventResponse += EventResponseGetTransportSettings; iActionSetAVTransportURI.EventResponse += EventResponseSetAVTransportURI; iTimer = new Linn.Timer(); // Sets the timer interval to 1 second. iTimer.Interval = 1000; iTimer.Elapsed += TimerElapsed; iTimer.AutoReset = false; iMutex = new Mutex(false); iPlaylist = new List <MrItem>(); }