private PublicPortMapping() { this.hasDriver = (Model.DriverCollection.Instance.FindOne() != null); TCMPortMapper.PortMapper.SharedInstance.DidChangeMappingStatus += new PortMapper.PMDidChangeMappingStatus(PortMappingChanged); TCMPortMapper.PortMapper.SharedInstance.ExternalIPAddressDidChange += new PortMapper.PMExternalIPAddressDidChange(ExternalIPChanged); TCMPortMapper.PortMapper.SharedInstance.WillStartSearchForRouter += new PortMapper.PMWillStartSearchForRouter(WillStartSearchForRouter); TCMPortMapper.PortMapper.SharedInstance.DidStartWork += new PortMapper.PMDidStartWork(DidStartWork); TCMPortMapper.PortMapper.SharedInstance.AllowMultithreadedCallbacks = true; TCMPortMapper.PortMapper.SharedInstance.Start(); this.state = new NoUPnPDeviceFoundState(); int checkIntervalSec = (int)StationRegistry.GetValue("UPnPCheckInterval", 120); this.checkTimer = new Timer(this.CheckState, null, 30 * 1000, checkIntervalSec * 1000); }
private void CheckState(object notUsed) { lock (lockObj) { UPnPState newState = this.state.CheckAndTransit(); while (newState != null && this.state != newState) { this.state = newState; newState = this.state.CheckAndTransit(); } if (newState == null) { logger.Debug("UPnP state checker reaches end state."); this.checkTimer.Change(Timeout.Infinite, Timeout.Infinite); return; } else { logger.Debug("Current state is " + newState.ToString() + ". Try again later.."); } } }