#!/usr/bin/env python #******************************************************************************* # ALMA - Atacama Large Millimiter Array # (c) Associated Universities Inc., 2002 # (c) European Southern Observatory, 2002 # Copyright by ESO (in the framework of the ALMA collaboration) # and Cosylab 2002, All rights reserved # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # # @(#) $Id: acspyexmplTimeoutHandler.py,v 1.7 2005/05/06 22:43:44 dfugate Exp $ #------------------------------------------------------------------------------ ''' DESCRIPTION Timeout Handler provides the complete implementation of the TimeoutHandler IDL interface. It then uses PySimpleClient to find the Default Clock and Timer components to schedule a single timeout event to occur in three seconds. It should be noted this example does not take advantage of the DurationHelper or EpochHelper classes which are also available. WHAT CAN I GAIN FROM THIS EXAMPLE? - PySimpleClient usage. - Accessing (remote) components. - Manipulating BACI properties - Implementation of the TimeoutHandler IDL interface - Obtaining the current time from the Clock component - Scheduling timeout events to occur using the Timer component LINKS - TimeoutHandler IDL Documentation - Clock IDL Documentation - Timer IDL Documentation ''' # Import the PySimpleClient class from Acspy.Clients.SimpleClient import PySimpleClient # To give the timeouts a chance to occur from time import sleep from Acspy.Common.TimeHelper import getTimeStamp # CORBA stubs import acstime, acstime__POA #--------------------------------------------------- class TimeoutHandlerImpl(acstime__POA.TimeoutHandler): ''' Implementation of the TimeoutHandler IDL interface ''' def handleTimeout(self, e): ''' This method is overriden to do something useful once a timeout occurs ''' print "The current time is: ", e.value #--------------------------------------------------- # Make an instance of the PySimpleClient simpleClient = PySimpleClient() # Get the current time from the standard CLOCK1 Clock device and add 3 seconds to it # This is when the timeout will occur. start = long(getTimeStamp().value) + long(30000000) # Get the standard Timer component which will # schedule the timeout timer = simpleClient.getDefaultComponent("IDL:alma/acstime/Timer:1.0") # Create timeout handler and schedule its timeout myHandler = TimeoutHandlerImpl() myHandler2 = TimeoutHandlerImpl() # A Duration of 0 implies the timeout will only occur once id1 = timer.schedule(simpleClient.activateOffShoot(myHandler), acstime.Epoch(start), acstime.Duration(long(20000000))) # A Duration of 0 implies the timeout will only occur once id2 = timer.schedule(simpleClient.activateOffShoot(myHandler2), acstime.Epoch(start), acstime.Duration(long(0))) # Give it ten seconds to run sleep(10) timer.cancel(long(id1)) # Give it ten more seconds to run sleep(10) # Release it simpleClient.disconnect() print "The end __oOo__"