class _EventTimer(ActionListener): timers = {} def __init__(self, eventid): self.event = pyj2d.event.Event(eventid) self.timer = Timer(0, self) def set_timer(self, time): if self.timer.isRunning(): self.timer.stop() if time: self.timer.setInitialDelay(time) self.timer.setDelay(time) self.timer.start() def actionPerformed(self, evt): pyj2d.event.post(self.event)
class CommandClient(): def __init__(self, extender): self._syncTimer = Timer(1000, None) self._syncTimer.setRepeats(True) self._syncTimer.actionPerformed = self._sendCommandSync self._syncTimer.stop() self.commandListenPort = 8089; self._startTimer = Timer(1000, None) self._startTimer.setInitialDelay(1500) self._startTimer.setRepeats(False) self._startTimer.actionPerformed = self._sendCommandStart self._startTimer.stop() self._extender = extender def startCrawling(self): self._startTimer.start() def startSync(self): self._syncTimer.start() def stopCrawling(self): self._sendCommandStop(None) self._syncTimer.stop() def _sendCommandStart(self, ev): self._sendCommand("start") self.startSync() def _sendCommandStop(self, ev): self._sendCommand("stop") def _sendCommandSync(self, ev): result = self._sendCommand("sync") self._extender.syncCrawlingState(result) def _sendCommand(self, command): url = 'http://127.0.0.1:' + str(self.commandListenPort) + '/?command={0}'.format(command) # TODO: iterate through parameters response = urllib2.urlopen(url) data = json.load(response) return data
class _EventTimer(ActionListener): def __init__(self, event): self.event = event self.timer = Timer(0, self) self.repeat = True def set_timer(self, time, repeat): if self.timer.isRunning(): self.timer.stop() if time: self.repeat = repeat self.timer.setInitialDelay(time) self.timer.setDelay(time) self.timer.start() def actionPerformed(self, evt): env.event.post(self.event) if not self.repeat: self.timer.stop()
class TrackDevice(java.beans.PropertyChangeListener): import java import javax.swing import javax.swing.Timer delayTimer = None relayClicks = None # TrackDevice.init - Initialize a TrackDevice instance for a particular device # # aName : Device name # aDevice : JMRI device instance # aAllowedStates : Array of states we want to track, other states are ignored # def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent): from javax.swing import Timer #print ('TrackDevice.init ' + aName ) self.DeviceName = aName self.Device = aDevice self.DeviceValue = self.Device.getValue() self.AllowedStates = aAllowedStates self.parent = aParent self.LogFile = aLogFile self.timeoutListener = self.TimeoutReceiver() self.timeoutListener.setCallBack(self.receiveTimeoutHandler) self.receiveTimer = Timer(1, self.timeoutListener) self.receiveTimer.stop() self.receiveTimer.setRepeats(False) self.sendTimeoutListener = self.TimeoutReceiver() self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler) self.sendTimer = Timer(1, self.sendTimeoutListener) self.sendTimer.stop() self.sendTimer.setRepeats(False) self.pauseTimeoutListener = self.TimeoutReceiver() self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler) self.pauseTimer = Timer(1, self.pauseTimeoutListener) self.pauseTimer.stop() self.pauseTimer.setRepeats(False) self.relayClicks = jmri.jmrit.Sound( "resources/sounds/Code-receive.wav") #self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelay.wav")) self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav") return # TrackDevice.updateState - Track the device state while reading the old log # file. Note the state but don't change the device # itself and don't log the changes to the new log file # (yet). # # aNewState : New device state. # def updateState(self, aNewState): #print 'updateState ' + self.DeviceName for i in range(len(self.AllowedStates)): if (aNewState == self.AllowedStates[i]): self.DeviceValue = aNewState break # TrackDevice.propertyChange - Record state changes as a result of activities # elsewhere in JMRI # # aEvent : Event triggering the change (we don't actually look at the event...) # def propertyChange(self, aEvent): #print "Property change " + self.DeviceName newValue = self.Device.getValue() codeSendSensor = sensors.getSensor("IS16:CCK") codeSendSensor.setState(ACTIVE) self.relaySend.loop() ccdl = 5 + java.util.Random().nextInt(1) # Code transmission delay self.sendTimer.setInitialDelay(ccdl * 10) self.sendTimer.start() if (newValue == self.DeviceValue): return for i in range(len(self.AllowedStates)): if (newValue == self.AllowedStates[i]): self.DeviceValue = newValue #logStateChange2(self.DeviceName, self.DeviceValue, True) #print "state change " + self.DeviceName + " " + str(self.DeviceValue) self.LogFile.write(self.DeviceName + " " + self.DeviceValue + "\n") self.LogFile.flush() break return # TrackDevice.setInitialDeviceState - After reading all of the old tracking file we # now initialize the actual devices to their last # known states and log these states into the new # log file. # def setInitialDeviceState(self, logFile): # Uncomment the following print statement to display the list of devices being tracked. #print "In setInitDeviceState, name = " + self.DeviceName + " value = " + self.DeviceValue self.LogFile = logFile self.Device.setValue(self.DeviceValue) self.Device.addPropertyChangeListener(self) #logStateChange2(self.DeviceName, self.DeviceState, False) logFile.write(self.DeviceName + " " + self.DeviceValue + "\n") signalId = "IS" + self.DeviceName[2:3] ctcId = "CTC:TO" + self.DeviceName[2:3] # Move the switch lever to the correct position if (self.DeviceValue == "P"): #print " ctcId = " + ctcId + " state = green" turnouts.provideTurnout("NT" + self.DeviceName[2:3]).setState(CLOSED) sensors.getSensor(signalId + ":WLL").setState(INACTIVE) sensors.getSensor(signalId + ":WLR").setState(INACTIVE) sensors.getSensor(signalId + ":WLC").setState(ACTIVE) sensors.getSensor(signalId + ":WKR").setState(INACTIVE) sensors.getSensor(signalId + ":WKL").setState(INACTIVE) sensors.getSensor(signalId + ":WKC").setState(ACTIVE) sensors.getSensor(ctcId + "GK").setState(ACTIVE) sensors.getSensor(ctcId + "YK").setState(INACTIVE) sensors.getSensor(ctcId + "RK").setState(INACTIVE) sensors.getSensor(ctcId + "GS").setState(ACTIVE) sensors.getSensor(ctcId + "YS").setState(INACTIVE) sensors.getSensor(ctcId + "RS").setState(INACTIVE) sensors.getSensor(signalId + ":TOC").setState(INACTIVE) sensors.getSensor(signalId + ":TOS").setState(INACTIVE) sensors.getSensor(signalId + ":TOP").setState(ACTIVE) elif (self.DeviceValue == "C"): #print " ctcId = " + ctcId + " state = yellow" sensors.getSensor(signalId + ":WLL").setState(ACTIVE) sensors.getSensor(signalId + ":WLR").setState(INACTIVE) sensors.getSensor(signalId + ":WLC").setState(INACTIVE) sensors.getSensor(signalId + ":WKR").setState(INACTIVE) sensors.getSensor(signalId + ":WKL").setState(ACTIVE) sensors.getSensor(signalId + ":WKC").setState(INACTIVE) sensors.getSensor(ctcId + "GK").setState(INACTIVE) sensors.getSensor(ctcId + "YK").setState(ACTIVE) sensors.getSensor(ctcId + "RK").setState(INACTIVE) sensors.getSensor(ctcId + "GS").setState(INACTIVE) sensors.getSensor(ctcId + "YS").setState(ACTIVE) sensors.getSensor(ctcId + "RS").setState(INACTIVE) sensors.getSensor(signalId + ":TOC").setState(ACTIVE) sensors.getSensor(signalId + ":TOS").setState(INACTIVE) sensors.getSensor(signalId + ":TOP").setState(INACTIVE) else: #print " ctcId = " + ctcId + " state = red" turnouts.provideTurnout("NT" + self.DeviceName[2:3]).setState(THROWN) sensors.getSensor(signalId + ":WLL").setState(INACTIVE) sensors.getSensor(signalId + ":WLR").setState(ACTIVE) sensors.getSensor(signalId + ":WLC").setState(INACTIVE) sensors.getSensor(signalId + ":WKR").setState(ACTIVE) sensors.getSensor(signalId + ":WKL").setState(INACTIVE) sensors.getSensor(signalId + ":WKC").setState(INACTIVE) sensors.getSensor(ctcId + "GK").setState(INACTIVE) sensors.getSensor(ctcId + "YK").setState(INACTIVE) sensors.getSensor(ctcId + "RK").setState(ACTIVE) sensors.getSensor(ctcId + "GS").setState(INACTIVE) sensors.getSensor(ctcId + "YS").setState(INACTIVE) sensors.getSensor(ctcId + "RS").setState(ACTIVE) sensors.getSensor(signalId + ":TOC").setState(INACTIVE) sensors.getSensor(signalId + ":TOS").setState(ACTIVE) sensors.getSensor(signalId + ":TOP").setState(INACTIVE) class TimeoutReceiver(java.awt.event.ActionListener): cb = None def actionPerformed(self, event): if (self.cb != None): self.cb(event) return def setCallBack(self, cbf): self.cb = cbf return class TimeoutReceiver2(java.awt.event.ActionListener): cb = None def actionPerformed(self, event): if (self.cb != None): self.cb(event) return def setCallBack(self, cbf): self.cb = cbf return class TimeoutReceiver3(java.awt.event.ActionListener): cb = None def actionPerformed(self, event): if (self.cb != None): self.cb(event) return def setCallBack(self, cbf): self.cb = cbf return def sendTimeoutHandler(self, event): #print "In send timeout handler" self.sendTimer.stop() self.relaySend.stop() sensors.getSensor("IS16:CCK").setState(INACTIVE) #sleep(2) signalNumber = self.DeviceName[2:3] if (self.Device.getValue() == "P"): turnouts.provideTurnout("NT" + signalNumber).setState(CLOSED) elif (self.Device.getValue() == "S"): turnouts.provideTurnout("NT" + signalNumber).setState(THROWN) smdl = 5 + java.util.Random().nextInt(2) # Switch motor delay - self.pauseTimer.setInitialDelay(smdl * 10) self.pauseTimer.start() return def pauseTimeoutHandler(self, event): #print "In pause timeout handler" self.pauseTimer.stop() sensors.getSensor("IS17:ICK").setState(ACTIVE) #print "Turning on IC light" self.relayClicks.loop() newName = "IS" + self.DeviceName[2:3] sensors.getSensor(newName + ":WKC").setState(INACTIVE) sensors.getSensor(newName + ":WKL").setState(INACTIVE) sensors.getSensor(newName + ":WKR").setState(INACTIVE) ctcName = "CTC:TO" + self.DeviceName[2:3] if (sensors.getSensor(ctcName + "YK").getState() == ACTIVE): sensors.getSensor(ctcName + "YK").setState(INACTIVE) if (sensors.getSensor(ctcName + "GK").getState() == ACTIVE): sensors.getSensor(ctcName + "GK").setState(INACTIVE) if (sensors.getSensor(ctcName + "RK").getState() == ACTIVE): sensors.getSensor(ctcName + "RK").setState(INACTIVE) icdl = 5 + java.util.Random().nextInt(3) # Indicator code delay self.receiveTimer.setInitialDelay(icdl * 10) self.receiveTimer.start() return def receiveTimeoutHandler(self, event): # see which phase we think we are in #print "In receive timeout Handler" self.receiveTimer.stop() signalNumber = self.DeviceName[2:3] #print " Signal number = " + str(signalNumber) + " signal state = " + self.Device.getValue() if (self.Device.getValue() == "P"): sensors.getSensor("IS" + signalNumber + ":WKC").setState(ACTIVE) sensors.getSensor("IS" + signalNumber + ":WKR").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":WKL").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOC").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOS").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOP").setState(ACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "YK").setState(INACTIVE) sensors.getSensor("CTC:TO" + signalNumber + "GK").setState(ACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "RK").setState(INACTIVE) elif (self.Device.getValue() == "C"): sensors.getSensor("IS" + signalNumber + ":WKC").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":WKR").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":WKL").setState(ACTIVE) sensors.getSensor("IS" + signalNumber + ":TOS").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOP").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOC").setState(ACTIVE) sensors.getSensor("CTC:TO" + signalNumber + "YK").setState(ACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "GK").setState(INACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "RK").setState(INACTIVE) jmri.jmrit.Sound("resources/sounds/Bell.wav").play() elif (self.Device.getValue() == "S"): sensors.getSensor("IS" + signalNumber + ":WKC").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":WKR").setState(ACTIVE) sensors.getSensor("IS" + signalNumber + ":WKL").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOC").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOP").setState(INACTIVE) sensors.getSensor("IS" + signalNumber + ":TOS").setState(ACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "YK").setState(INACTIVE) #sensors.getSensor("CTC:TO" + signalNumber + "GK").setState(INACTIVE) sensors.getSensor("CTC:TO" + signalNumber + "RK").setState(ACTIVE) self.relayClicks.stop() self.parent.waitMsec(1000) sensors.getSensor("IS17:ICK").setState(INACTIVE) return
class TrackDevice(java.beans.PropertyChangeListener): import java import javax.swing from javax.swing import Timer delayTimer = None relayClicks = None # TrackDevice.init - Initialize a TrackDevice instance for a particular device # # aName : Device name # aDevice : JMRI device instance # aAllowedStates : Array of states we want to track, other states are ignored # def init(self, aName, aDevice, aAllowedStates, aLogFile, aParent): from javax.swing import Timer self.DeviceName = aName self.Device = aDevice self.DeviceNumber = self.DeviceName[2:self.DeviceName.find(":")] self.AllowedStates = aAllowedStates self.parent = aParent self.DeviceValue = self.AllowedStates[0] self.LogFile = aLogFile self.timeoutListener = self.TimeoutReceiver() self.timeoutListener.setCallBack(self.receiveTimeoutHandler) self.receiveTimer = Timer(100, self.timeoutListener) self.receiveTimer.setInitialDelay(10) self.receiveTimer.stop() self.receiveTimer.setRepeats(False) self.sendTimeoutListener = self.TimeoutReceiver2() self.sendTimeoutListener.setCallBack(self.sendTimeoutHandler) self.sendTimer = Timer(100, self.timeoutListener) self.sendTimer.setInitialDelay(10) self.sendTimer.stop() self.sendTimer.setRepeats(False) self.pauseTimeoutListener = self.TimeoutReceiver() self.pauseTimeoutListener.setCallBack(self.pauseTimeoutHandler) self.pauseTimer = Timer(100, self.pauseTimeoutListener) self.pauseTimer.setInitialDelay(10) self.pauseTimer.stop() self.pauseTimer.setRepeats(False) self.finalTimeoutListener = self.TimeoutReceiver() self.finalTimeoutListener.setCallBack(self.finalTimeoutHandler) self.finalTimer = Timer(100, self.finalTimeoutListener) self.finalTimer.setInitialDelay(10) self.finalTimer.stop() self.finalTimer.setRepeats(False) # self.relayClicks = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/EnhancedCTCRelayTrimmed.wav")) self.relayClicks = jmri.jmrit.Sound( "resources/sounds/Code-receive.wav") self.relaySend = jmri.jmrit.Sound("resources/sounds/Code-send.wav") return # TrackDevice.updateState - Track the device state while reading the old log # file. Note the state but don't change the device # itself and don't log the changes to the new log file # (yet). # # aNewState : New device state. # def updateState(self, aNewState): print 'updateState ' + self.DeviceName + " to state = " + aNewState for i in range(len(self.AllowedStates)): if (aNewState == self.AllowedStates[i]): self.DeviceValue = aNewState self.Device.setValue(aNewState) break # TrackDevice.propertyChange - Record state changes as a result of activities # elsewhere in JMRI # # aEvent : Event triggering the change (we don't actually look at the event...) # def propertyChange(self, aEvent): newValue = self.Device.getValue() print("***** In propertyChange") memories.getMemory("IM5:TVC").setValue("1") # # Turn on Control Code indicator light codeSendSensor = sensors.getSensor("Code Send Indicator") codeSendSensor.setState(ACTIVE) # # Start relay clicking sound self.relaySend.loop() # # Start timer to keep code send light on and relays clicking for a while. ccdl = 15 #+ java.util.Random().nextInt(1) # Code transmission delay self.sendTimer.setDelay(ccdl * 1000) #self.sendTimer.start() self.parent.waitMsec(ccdl * 1000) self.relaySend.stop() codeSendSensor.setState(INACTIVE) if (newValue == self.DeviceValue): return for i in range(len(self.AllowedStates)): if (newValue == self.AllowedStates[i]): self.DeviceValue = newValue self.LogFile.write(self.DeviceName + " " + self.DeviceValue + "\n") self.LogFile.flush() break return # TrackDevice.setInitialDeviceState - After reading all of the old tracking file we # now initialize the actual devices to their last # known states and log these states into the new # log file. # def setInitialDeviceState(self, logFile, parent): # Uncomment the following print statement to display the list of devices being tracked. print "In setInitDeviceState, name = " + self.DeviceName + " value = " + self.DeviceValue self.LogFile = logFile ### self.Device.setState(self.DeviceValue) self.Device.addPropertyChangeListener(self) #logStateChange2(self.DeviceName, self.DeviceState, False) logFile.write(self.DeviceName + " " + self.DeviceValue + "\n") signalId = "IS:" + self.DeviceNumber # Move the switch lever to the correct position sensors.getSensor(signalId + ":CB").setState(INACTIVE) if (self.DeviceValue == "N"): turnouts.provideTurnout("NT" + self.DeviceNumber).setState(CLOSED) self.parent.waitMsec(100) sensors.getSensor(signalId + ":NK").setState(ACTIVE) sensors.getSensor(signalId + ":L").setState(ACTIVE) sensors.getSensor(signalId + ":RK").setState(INACTIVE) else: turnouts.provideTurnout("NT" + self.DeviceNumber).setState(THROWN) self.parent.waitMsec(100) sensors.getSensor(signalId + ":NK").setState(INACTIVE) sensors.getSensor(signalId + ":RK").setState(ACTIVE) sensors.getSensor(signalId + ":L").setState(INACTIVE) class TimeoutReceiver(java.awt.event.ActionListener): cb = None def actionPerformed(self, event): if (self.cb != None): self.cb(event) return def setCallBack(self, cbf): self.cb = cbf return class TimeoutReceiver2(java.awt.event.ActionListener): cb = None def actionPerformed(self, event): if (self.cb != None): self.cb(event) return def setCallBack(self, cbf): self.cb = cbf return def sendTimeoutHandler(self, event): print "In send timeout handler" self.sendTimer.stop() self.relaySend.stop() sensors.getSensor("IS16:CCK").setState(INACTIVE) smdl = 5 #+ java.util.Random().nextInt(2) # Switch motor delay - self.pauseTimer.setInitialDelay(smdl * 100) self.pauseTimer.start() return # # Timeout handler between send & receive. # Turn panel indicators off & start indication code relay clicks. def pauseTimeoutHandler(self, event): self.pauseTimer.stop() sensors.getSensor("Code Receive Indicator").setState(ACTIVE) self.relayClicks.loop() newName = "IS:" + self.DeviceNumber sensors.getSensor(newName + ":NK").setState(INACTIVE) sensors.getSensor(newName + ":RK").setState(INACTIVE) signals.getSignalHead("VH:T" + str(self.DeviceNumber) + "N").setAppearance(DARK) signals.getSignalHead("VH:T" + str(self.DeviceNumber) + "R").setAppearance(DARK) icdl = 5 #+ java.util.Random().nextInt(3) # Indicator code delay self.receiveTimer.setInitialDelay(icdl * 100) self.receiveTimer.start() return # # Final timeout handler....turn off Indication Code relay clicks and change indicator lights on panel. def receiveTimeoutHandler(self, event): # see which phase we think we are in self.receiveTimer.stop() sensors.getSensor("Code Receive Indicator").setState(INACTIVE) # # Throw the turnout. We should do this in an earlier timeout handler, but with the CTC panel lights hardwired to the tortoise motor, # the lights change too soon. if (memories.getMemory("IM1:FB").getValue() == 0): if (self.Device.getValue() == "N"): turnouts.provideTurnout("NT" + self.DeviceNumber).setState(CLOSED) else: turnouts.provideTurnout("NT" + self.DeviceNumber).setState(THROWN) self.finalTimer.setInitialDelay(6000) self.finalTimer.start() return # # Final timeout handler....turn off Indication Code relay clicks and change indicator lights on panel. def finalTimeoutHandler(self, event): # see which phase we think we are in self.finalTimer.stop() self.relayClicks.stop() sensors.getSensor("Code Receive Indicator").setState(INACTIVE) memories.getMemory("IM5:TVC").setValue("0") memories.getMemory("IM1:FB").setValue(0) return