You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
5.4 KiB
236 lines
5.4 KiB
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
/*--------------------------------------------------
|
|
Filename: timer.hpp
|
|
Author: B.Rajeev
|
|
Purpose: Provides declarations for the Timer class.
|
|
--------------------------------------------------*/
|
|
|
|
|
|
#ifndef __TIMER__
|
|
#define __TIMER__
|
|
|
|
#define ILLEGAL_TIMER_EVENT_ID 0
|
|
#define RETRY_TIMEOUT_FACTOR 10
|
|
typedef UINT_PTR TimerEventId;
|
|
|
|
#include <snmpevt.h>
|
|
#include <snmpthrd.h>
|
|
|
|
#include "forward.h"
|
|
#include "common.h"
|
|
#include "message.h"
|
|
|
|
typedef CMap< TimerEventId, TimerEventId, Timer *, Timer * > TimerMapping;
|
|
typedef CList< WaitingMessage * , WaitingMessage * > WaitingMessageContainer;
|
|
|
|
class SnmpClThreadObject : public SnmpThreadObject
|
|
{
|
|
private:
|
|
protected:
|
|
public:
|
|
|
|
SnmpClThreadObject () ;
|
|
|
|
void Initialise () ;
|
|
void Uninitialise () ;
|
|
|
|
} ;
|
|
|
|
class SnmpClTrapThreadObject : public SnmpThreadObject
|
|
{
|
|
private:
|
|
protected:
|
|
public:
|
|
|
|
SnmpClTrapThreadObject () ;
|
|
|
|
void Initialise () ;
|
|
void Uninitialise () ;
|
|
|
|
} ;
|
|
|
|
/*--------------------------------------------------
|
|
Overview
|
|
--------
|
|
|
|
Timer: Provides methods for setting and cancelling timer
|
|
events. When the timer is informed of a timer event, it determines
|
|
the corresponding waiting message and notifies it.
|
|
|
|
note - the timer has static data structures which enable it
|
|
to identify the timer instance corresponding to a timer event id.
|
|
therefore, each timer event must not only be registered as a
|
|
<timer_event_id, waiting_message *> pair within a timer instance, but
|
|
also as a <timer_event_id, timer *> pair in the static CMap. The CriticalSection
|
|
is needed to serialize access to the CMap
|
|
--------------------------------------------------*/
|
|
|
|
class Timer
|
|
{
|
|
// counter to generate timer_event_id
|
|
static TimerEventId next_timer_event_id;
|
|
|
|
// v1 session: for obtaining the event handler
|
|
SnmpImpSession *session;
|
|
|
|
// map for (event_id, waiting_message) association and
|
|
// unique event_id generation
|
|
static TimerMapping timer_mapping;
|
|
WaitingMessageContainer waiting_message_mapping;
|
|
|
|
static BOOL CreateCriticalSection();
|
|
|
|
static void DestroyCriticalSection();
|
|
|
|
public:
|
|
|
|
Timer(SnmpImpSession &session);
|
|
|
|
// generates and returns a new event id
|
|
// associates the pair (event_id, waiting_message)
|
|
// creates the timer event
|
|
void SetMessageTimerEvent (WaitingMessage &waiting_message);
|
|
|
|
TimerEventId SetTimerEvent(UINT timeout_value);
|
|
|
|
// Removes the association (event_id, waiting_message)
|
|
void CancelMessageTimer(WaitingMessage &waiting_message,TimerEventId event_id);
|
|
|
|
// Kills the registered timer event
|
|
void CancelTimer(TimerEventId event_id);
|
|
|
|
// used to create the static CriticalSection
|
|
static BOOL InitializeStaticComponents();
|
|
|
|
// used to destroy the static CriticalSection
|
|
static void DestroyStaticComponents();
|
|
|
|
// it determines the corresponding Timer and calls
|
|
// its TimerEventNotification with the appropriate parameters
|
|
static void CALLBACK HandleGlobalEvent(HWND hWnd ,UINT message,
|
|
UINT_PTR idEvent, DWORD dwTime);
|
|
|
|
// informs the timer instance of the event. the instance
|
|
// must pass the event to the corresponding waiting message
|
|
void TimerEventNotification(TimerEventId event_id);
|
|
|
|
virtual ~Timer(void);
|
|
|
|
static SnmpClThreadObject *g_timerThread ;
|
|
|
|
static UINT g_SnmpWmTimer ;
|
|
|
|
// the CriticalSection serializes accesses to the static timer_mapping
|
|
static CriticalSection timer_CriticalSection;
|
|
|
|
};
|
|
|
|
class SnmpTimerObject
|
|
{
|
|
private:
|
|
|
|
HWND hWnd ;
|
|
UINT_PTR timerId ;
|
|
TIMERPROC lpTimerFunc ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
SnmpTimerObject (
|
|
|
|
HWND hWnd ,
|
|
UINT_PTR timerId ,
|
|
UINT elapsedTime ,
|
|
TIMERPROC lpTimerFunc
|
|
) ;
|
|
|
|
~SnmpTimerObject () ;
|
|
|
|
UINT_PTR GetTimerId () { return timerId ; }
|
|
HWND GetHWnd () { return hWnd ; }
|
|
TIMERPROC GetTimerFunc () { return lpTimerFunc ; }
|
|
|
|
static Window *window ;
|
|
static CMap <UINT_PTR,UINT_PTR,SnmpTimerObject *,SnmpTimerObject *> timerMap ;
|
|
static void TimerNotification ( HWND hWnd , UINT timerId ) ;
|
|
|
|
} ;
|
|
|
|
class SnmpTimerEventObject : public SnmpTaskObject
|
|
{
|
|
private:
|
|
protected:
|
|
|
|
SnmpTimerEventObject () {}
|
|
|
|
public:
|
|
|
|
virtual ~SnmpTimerEventObject () {} ;
|
|
} ;
|
|
|
|
class SnmpSetTimerObject : public SnmpTimerEventObject
|
|
{
|
|
private:
|
|
|
|
UINT_PTR timerId ;
|
|
HWND hWnd ;
|
|
UINT elapsedTime ;
|
|
TIMERPROC lpTimerFunc ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
SnmpSetTimerObject (
|
|
|
|
HWND hWnd, // handle of window for timer messages
|
|
UINT_PTR nIDEvent, // timer identifier
|
|
UINT uElapse, // time-out value
|
|
TIMERPROC lpTimerFunc // address of timer procedure
|
|
) ;
|
|
|
|
~SnmpSetTimerObject () ;
|
|
|
|
UINT_PTR GetTimerId () { return timerId ; }
|
|
|
|
void Process () ;
|
|
} ;
|
|
|
|
class SnmpKillTimerObject : public SnmpTimerEventObject
|
|
{
|
|
private:
|
|
|
|
BOOL status ;
|
|
HWND hWnd ;
|
|
UINT_PTR timerId ;
|
|
|
|
protected:
|
|
public:
|
|
|
|
SnmpKillTimerObject (
|
|
|
|
HWND hWnd , // handle of window that installed timer
|
|
UINT_PTR uIDEvent // timer identifier
|
|
) ;
|
|
|
|
~SnmpKillTimerObject () {} ;
|
|
|
|
void Process () ;
|
|
|
|
BOOL GetStatus () { return status ; }
|
|
} ;
|
|
|
|
UINT_PTR SnmpSetTimer (
|
|
|
|
HWND hWnd, // handle of window for timer messages
|
|
UINT_PTR nIDEvent, // timer identifier
|
|
UINT uElapse, // time-out value,
|
|
TIMERPROC lpTimerFunc // address of timer procedure
|
|
) ;
|
|
|
|
BOOL SnmpKillTimer (
|
|
|
|
HWND hWnd, // handle of window that installed timer
|
|
UINT_PTR uIDEvent // timer identifier
|
|
) ;
|
|
|
|
#endif // __TIMER__
|