Source code of Windows XP (NT5)
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.
|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1998 **/ /**********************************************************************/
/*
status.h WINS result pane state nodes FILE HISTORY: */
#ifndef _STATUS_H
#define _STATUS_H
#ifndef _WINSHAND_H
#include "winshand.h"
#endif
#ifndef _WINSMON_H
#include "winsmon.h"
#endif
#ifndef _STATNODE_H
#include "statnode.h"
#endif
#ifndef _SERVER_H
#include "server.h"
#endif
#include "afxmt.h"
class CServerStatus;
/*---------------------------------------------------------------------------
Class: CWinsStatusHandler ---------------------------------------------------------------------------*/ class CWinsStatusHandler : public CMTWinsHandler { // Interface
public: CWinsStatusHandler(ITFSComponentData *pCompData, DWORD dwUpdateInterval);
~CWinsStatusHandler();
// base handler functionality we override
OVERRIDE_NodeHandler_HasPropertyPages(); OVERRIDE_NodeHandler_CreatePropertyPages(); OVERRIDE_NodeHandler_OnAddMenuItems(); OVERRIDE_NodeHandler_DestroyHandler();
STDMETHODIMP_(LPCTSTR) GetString(ITFSNode * pNode, int nCol);
OVERRIDE_BaseHandlerNotify_OnCreateNodeId2();
public: // CWinsHandler overrides
virtual HRESULT InitializeNode(ITFSNode * pNode);
OVERRIDE_BaseHandlerNotify_OnPropertyChange(); OVERRIDE_BaseHandlerNotify_OnExpand(); OVERRIDE_BaseResultHandlerNotify_OnResultRefresh();
OVERRIDE_ResultHandler_CompareItems();
public: DWORD GetUpdateInterval() { return m_dwUpdateInterval; }
void SetUpdateInterval(DWORD dwValue) { // set the new interval and wakeup the main probe thread
// since we are resetting the interval, do a check now and
// then wait the new interval
m_dwUpdateInterval = dwValue; SetEvent(m_hWaitIntervalMain); }
DWORD WINAPI ExecuteMonitoring(); DWORD WINAPI ListeningThreadFunc() ;
HRESULT AddNode(ITFSNode *pNode, CWinsServerHandler *pServer); HRESULT DeleteNode(ITFSNode *pNode, CWinsServerHandler *pServer);
// we don't use query object, but being a MTHandler requires this
virtual ITFSQueryObject* OnCreateQuery(ITFSNode *pNode) { return NULL; } STDMETHOD(OnNotifyHaveData)(LPARAM);
typedef CArray <CServerStatus *, CServerStatus *> listServers;
listServers m_listServers;
// Implementation
private: HRESULT CreateListeningSockets( ); void StartMonitoring(ITFSNode *pNode); int Probe(CServerStatus *pServer, SOCKET listenNameSvcSock); void CloseSockets();
void RemoveServer(int i); void AddServer(CServerStatus* pServer); void BuildServerList(ITFSNode *pNode); void SetIPAddress(int i, LPSTR szIP); CServerStatus* GetServer(int i);
HRESULT CreateNodes(ITFSNode *pNode); void UpdateStatusColumn(ITFSNode *pNode); int GetListSize(); void UpdateStatus(int nIndex, UINT uStatusId, UINT uImage); BOOL IsServerDeleted(CServerStatus *pStat); void MarkAsDeleted(LPSTR szBuffer, BOOL bDelete = TRUE); CServerStatus* GetExistingServer(LPSTR szBuffer);
void NotifyMainThread();
BOOL FCheckForAbort();
private: // variables for monitoring
fd_set m_listenSockSet; SOCKET listenNameSvcSock; // 2DO: for the listening thread...
SOCKET listenSockCl; // socket listening for frames from DHCP srvs
SOCKET listenSockSrv; // socket listening for frames from DHCP srvs
// thread handles
HANDLE m_hMainMonThread; HANDLE m_hListenThread;
// event handles
HANDLE m_hAbortListen; HANDLE m_hAbortMain; HANDLE m_hAnswer; HANDLE m_hWaitIntervalListen; HANDLE m_hWaitIntervalMain; HANDLE m_hPauseListening; int m_nServersUpdated; DWORD m_dwUpdateInterval; // Holds the value in milliSec
CCriticalSection m_cs; SPITFSNode m_spNode; };
// thread proc the background thread initially is called on
DWORD WINAPI MonThreadProc(LPVOID lParam); DWORD WINAPI MainMonThread(LPVOID lParam);
#endif _STATUS_H
|