def fnTimerInt(objTimer, xContext):
    '''\
    Server life-span timer was interrupted to reschedule it, 
    probably by a shock, and presumably to a shorter life.
    But the server is still alive.
    '''
    NTRC.trace(
        3, "interrupt %s delay %s called from %s at %s." %
        (xContext, objTimer.delay, objTimer, G.env.now))
    lg.logInfo(
        "SERVER", "interrupted t|%6.0f| context|%s| delay|%s|" %
        (G.env.now, xContext, objTimer.delay))
    return (objTimer, xContext)
 def starter4e(env, event):
     NTRC.trace(3,"4e.starter4e: before callstart at %s." % env.now)
     event.start()
     NTRC.trace(3,"4e.starter4e: before yieldtimeout at %s." % env.now)
     yield env.timeout(3)
     NTRC.trace(3,"4e.starter4e: after yieldtimeout at %s." % env.now)
     event.reset()
     NTRC.trace(3,"4e.starter4e: after callreset at %s." % env.now)
def fnTimerCall(objTimer, xContext):
    '''\
    Server life-span timer has completed, and the server must die.
    Set the timer event to release any process waiting for it.
    Declare the server to be el croako.  
    '''
    NTRC.trace(
        3, "callback %s delay %s called from %s at %s." %
        (xContext, objTimer.delay, objTimer, G.env.now))
    objTimer.setevent()
    cServer = xContext[0]
    cServer.mKillServer()
    lg.logInfo(
        "SERVER", "timercalled t|%6.0f| context|%s| delay|%s|" %
        (G.env.now, xContext, objTimer.delay))
    return (objTimer, xContext)
 def starter4f(env, event):
     NTRC.trace(3,"4f.starter4f: before callstart at %s." % env.now)
     event.start()
     NTRC.trace(3,"4f.starter4f: before yieldtimeout at %s." % env.now)
     yield env.timeout(5)
     NTRC.trace(3,"4f.starter4f: after yieldtimeout at %s." % env.now)
     event.stop()
     event.start()
     NTRC.trace(3,"4f.starter4f: after stop/start at %s." % env.now)
 def starter4g(env, event):
     NTRC.trace(3,"4g.starter4g: before callstart at %s." % env.now)
     event.start()
     NTRC.trace(3,"4g.starter4g: before yieldtimeout at %s." % env.now)
     yield env.timeout(5)
     NTRC.trace(3,"4g.starter4g: after yieldtimeout at %s." % env.now)
     event.stop()
     event.stop()        # can you stop a stopped timer?  yes.
     event.setdelay(17).start()
     yield env.timeout(1)
     event.reset()
     yield env.timeout(1)
     event.reset()
     NTRC.trace(3,"4g.starter4g: after change delay and reset twice at %s." % env.now)
def main():
    g = CG()                # One instance of the global data.
    
    dCliDict = fndCliParse("")
    # Carefully insert any new CLI values into the Global object.
    fnMaybeOverride("sInstructionsFile",dCliDict,g)

    # Read the file of instructions.  
    sFilename = g.sInstructionsFile
    lCommands = fnlParseInput(sFilename)
    cCommand = CCommand()

    # Process the instructions one line at a time.
    for sFullCmd in lCommands:
        # Print something to let the user know there is progress.
        print('-----------------')
        NTRC.trace(0,sFullCmd.rstrip())
        print('-----------------')
        lResult = cCommand.doCmdLst(sFullCmd)
        for sResult in lResult:
            NTRC.trace(0,"stdout=|%s|" % (sResult))
        print '-----------------'
        stdout.flush()
 def starter4h(env, event):
     NTRC.trace(3,"4h.starter4h: before callstart at %s." % env.now)
     event.start()
     NTRC.trace(3,"4h.starter4h: before yieldtimeout at %s." % env.now)
     yield env.timeout(23)
     NTRC.trace(3,"4h.starter4h: after yieldtimeout at %s." % env.now)
     event.reset()
     NTRC.trace(3,"4h.starter4h: after reset at %s." % env.now)
     yield event.event
     NTRC.trace(3,"4h.starter4h: after yieldevent at %s." % env.now)
     NTRC.trace(0,"yieldevent %s completed at %s." % (event.context,env.now))
 def interrupt(timerobj, context):
     NTRC.trace(0,"interrupt %s delay %s called from %s at %s." 
         % (context, timerobj.delay, timerobj, env.now))
     return (timerobj, context)
 def callback(timerobj, context):
     NTRC.trace(0,"callback %s delay %s called from %s at %s." 
         % (context, timerobj.delay, timerobj, env.now))
     timerobj.setevent()
     return (timerobj, context)
    @ntrace
    def starter4h(env, event):
        NTRC.trace(3,"4h.starter4h: before callstart at %s." % env.now)
        event.start()
        NTRC.trace(3,"4h.starter4h: before yieldtimeout at %s." % env.now)
        yield env.timeout(23)
        NTRC.trace(3,"4h.starter4h: after yieldtimeout at %s." % env.now)
        event.reset()
        NTRC.trace(3,"4h.starter4h: after reset at %s." % env.now)
        yield event.event
        NTRC.trace(3,"4h.starter4h: after yieldevent at %s." % env.now)
        NTRC.trace(0,"yieldevent %s completed at %s." % (event.context,env.now))

    # M a i n
    if __name__ == '__main__':
        NTRC.trace(3,"4.Begin.")
        env = simpy.Environment()
        event1 = CResettableTimer(env, 7, callback, interrupt, "ev1")
        event2 = CResettableTimer(env, 11.123, callback, interrupt, "ev2")
        event3 = CResettableTimer(env, 13, callback, interrupt, "ev3")
        event4 = CResettableTimer(env, 31, callback, interrupt, "ev4")
        event5 = CResettableTimer(env, 37, callback, interrupt, "ev5")
        NTRC.trace(0,"4.Starting simulation.")
        env.process(starter4e(env, event1))
        env.process(starter4f(env, event2))
        env.process(starter4g(env, event3))
        env.process(starter4h(env, event4))
        env.run(1000)
        NTRC.trace(0,"4.End of simulation.")

    ''' Should give results like this: