This is InactivityTimer.m in view mode; [Download] [Up]
//*****************************************************************************
//
// InactivityTimer.h.
//
// Tracks and determines whether inactivity timeout is warranted, also
// controls pppStats. Works in conjunction with StaticSpaceITimerView
// class (subclass of spaceView)
//
// by Felipe A. Rodriguez
//
// This code is supplied "as is" the author makes no warranty as to its
// suitability for any purpose. This code is free and may be distributed
// in accordance with the terms of the:
//
// GNU GENERAL PUBLIC LICENSE
// Version 2, June 1991
// copyright (C) 1989, 1991 Free Software Foundation, Inc.
// 675 Mass Ave, Cambridge, MA 02139, USA
//
//*****************************************************************************
#import "InactivityTimer.h"
#import "CommandScroll.h"
#import "Coordinator.h"
#import "pppstats.h"
// used in producing timed events
static DPSTimedEntry mailIconAniTag;
static void ITAnimate();
@implementation InactivityTimer
//************************************************************************
//
// designated initializer
//
//************************************************************************
- init
{
[super init];
posNI = NO; // set interactive session ivar
[self resetInactivityTimer]; // set or reset ivars
imageList = [[List alloc] init]; // produce an array of objects
[imageList insertObject: [NXImage findImageNamed: "nomail"] at: 0];
[imageList insertObject: [NXImage findImageNamed: "newmail1"] at: 1];
[imageList insertObject: [NXImage findImageNamed: "newmail2"] at: 2];
return self;
}
//************************************************************************
//
// test for inactivity timeout
//
//************************************************************************
- inactivityTimeout
{
struct pppIO *pppStat;
// Inactivity timeout algorithm
if(pppstats) // if pppstats is enabled
{
pppStat = intpr();
if((pppStat->inPkts <= iTimeThresh)&&(pppStat->outPkts <= iTimeThresh))
iPeriodCntr++; // cntr counts # of consecutive
else // 0 ppp i/o intervals
iPeriodCntr = 0; // reset cntr if link is active
iBaseCntr++; // bCntr counts from time link up
wasHidden = [NXApp isHidden]; // is the app hidden?
// if interface is inactive for > n min or non-interactive
// session in progress and timeout "ON" and this is a
// possibly non-interactive session.
if((iPeriodCntr > (timeout - 1) || ((iBaseCntr < 4) &&
(((pppStat->inPkts == 0) && (pppStat->outPkts == 0))) &&
(preTimeout == YES) && (posNI == YES)))
&& (timeout > 0))
{
[NXApp activateSelf:YES];
// ppp shutdown imminent, get users attention
if(strcmp(NXGetDefaultValue([NXApp appName],"sound"), "YES") == 0)
[[[Sound findSoundFor: "Gong"] play: nil] free];
if(!ITPanel)
[NXApp loadNibSection:"InactivityPanel.nib" owner:self
withNames:NO fromZone:[self zone]];
if([[NXApp delegate] mailInQueue])
[self setMailIconAnim];
[ITPanel center];
[ITPanel makeKeyAndOrderFront:self];
}
}
return self;
}
//*****************************************************************************
//
// set inactivity timeout Ivar and write its value to ddb
//
//*****************************************************************************
- setTimeout:(int)minTillTimeout
{
char buf[8];
timeout = minTillTimeout;
sprintf(buf,"%d",(int)timeout);
if(!NXWriteDefault([NXApp appName], "iTimeout", buf))
[[NXApp delegate] showAlert:"ddbWriteError"];
return self;
}
//************************************************************************
//
// reset our Ivars so that we're ready for next ppp session
//
//************************************************************************
- resetInactivityTimer
{
iPeriodCntr = 0; // reset inactivity timeout cntr
iBaseCntr = 0; // reset inactivity timeout base counter
// turn pre timeout on or off
if(strcmp(NXGetDefaultValue([NXApp appName],"preTimeout"), "YES") == 0)
preTimeout = YES;
else
preTimeout = NO;
// setup inactivity timeout threshold var from ddb value
iTimeThresh = atoi(NXGetDefaultValue([NXApp appName], "iTimeThreshold"));
// setup inactivity timeout Instance var from ddb value
timeout = atoi(NXGetDefaultValue([NXApp appName], "iTimeout"));
return self;
}
//*****************************************************************************
//
// set when upcoming session is possibly not interactive, only DNS
// triggered sessions are given this status
//
//*****************************************************************************
- setPosNonInter:(BOOL)pni
{
posNI = pni; // DNS triggered session, possibly
// non-interactive if YES
return self;
}
//*****************************************************************************
//
// return whether session is possibly a DNS triggered non-interactive
//
//*****************************************************************************
- (BOOL)posNonInter;
{
return posNI;
}
//************************************************************************
//
// enable pppstats
//
//************************************************************************
- pppstats:aView
{
commandView = aView;
if(!pppstats)
{ // display pppstats?
if(strcmp(NXGetDefaultValue([NXApp appName], "DispPPP"),"YES") == 0)
{
openSocket(aView); // open IP datagram socket, pass a view
intpr();
}
else
openSocket(nil); // open IP datagram socket, w/o view
pppstats = YES;
}
[self resetInactivityTimer];
return self;
}
//************************************************************************
//
// disable pppstats
//
//************************************************************************
- pppstatsReset
{
pppstats = NO;
return self;
}
//*****************************************************************************
//
// cancel target -- do not end ppp session
//
//*****************************************************************************
- cancel:sender
{
posNI = NO;
[sView removeTimedEntry];
[self removeTimedEntry];
[ITPanel close];
ITPanel = nil;
if(wasHidden) // if app was hidden prior to cursor in, hide
[NXApp hide:self];
iPeriodCntr = 0;
return self;
}
//*****************************************************************************
//
// continue target -- end ppp session
//
//*****************************************************************************
- continue:sender
{
[sView removeTimedEntry];
[self removeTimedEntry];
[ITPanel close];
ITPanel = nil;
// unlink if unlink menu item is enabled + pppstats
if((strcmp([[[NXApp mainMenu] findCellWithTag:2] title],
[[NXApp delegate] localString:"Disconnect"]) == 0) &&
[[[NXApp mainMenu] findCellWithTag:2] isEnabled])
{
if((iPeriodCntr > (timeout - 1)) && commandView)
[commandView appendStringUseFixedFont:[[NXApp delegate]localString:
"Dropping ppp Link due to inactivity timeout\n"]];
else
[commandView appendStringUseFixedFont:[[NXApp delegate]localString:
"Dropping ppp Link because sesion is non-interactive\n"]];
[[NXApp delegate] UnLink:self];
if(wasHidden) // if app was hidden prior to cursor in, hide
[NXApp hide:self];
}
return self;
}
//************************************************************************
//
// set mail icon animation into motion
//
//************************************************************************
- setMailIconAnim
{
if(!mailIconAniTag)
mailIconAniTag = DPSAddTimedEntry( // register function Animate
0.3, // to be called every period of
(DPSTimedEntryProc)ITAnimate, // arg0
(id)self,
NX_BASETHRESHOLD);
return self;
}
//************************************************************************
//
// icon animation
//
//************************************************************************
- _animate
{
static int Index = 0;
static BOOL reverse = NO;
[mailView setImage:[imageList objectAt:Index]];
if(Index >= 2) // reverse anim seq
reverse = YES;
if(Index <= 0) // reverse anim seq
reverse = NO;
if(reverse)
Index--;
else
Index++;
return self;
}
//************************************************************************
//
// remove the timed entry when connection is made or we exit
//
//************************************************************************
- removeTimedEntry
{
if (mailIconAniTag)
DPSRemoveTimedEntry (mailIconAniTag);
mailIconAniTag = 0;
return self;
}
@end
//************************************************************************
//
// This fucntion is registered by DPSaddtimedentry.
// It is subsequently called every period t as registered
// in arg 0 of DPSaddtimedentry.
//
//************************************************************************
static void ITAnimate(DPSTimedEntry time_tag, double now, id self)
{
[self _animate];
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.