BOOL GetPreferencesInfo (LPIDENT lpi, LPTSTR pszPath, WORD *pwVer) { if (lpi == NULL) return FALSE; // HKCU\Software\...\SVRMgr + \CellName // lstrcpy (pszPath, REGSTR_SETTINGS_PREFS); lstrcat (pszPath, TEXT("\\")); lpi->GetCellName (&pszPath[ lstrlen(pszPath) ]); // HKCU\Software\...\SVRMgr\CellName + \ServerName // lstrcat (pszPath, TEXT("\\")); lpi->GetLongServerName (&pszPath[ lstrlen(pszPath) ]); *pwVer = wVerSERVER_PREF; if (lpi->fIsService()) { // HKCU\Software\...\SVRMgr\CellName\ServerName + \Services\ServiceName // lstrcat (pszPath, TEXT("\\")); lstrcat (pszPath, SERVICES_KW); lstrcat (pszPath, TEXT("\\")); lpi->GetServiceName (&pszPath[ lstrlen(pszPath) ]); *pwVer = wVerSERVICE_PREF; } else if (lpi->fIsAggregate()) { // HKCU\Software\...\SVRMgr\CellName\ServerName + \Aggs\AggregateName // lstrcat (pszPath, TEXT("\\")); lstrcat (pszPath, AGGREGATES_KW); lstrcat (pszPath, TEXT("\\")); lpi->GetAggregateName (&pszPath[ lstrlen(pszPath) ]); *pwVer = wVerAGGREGATE_PREF; } else if (lpi->fIsFileset()) { // HKCU\Software\...\SVRMgr\CellName\ServerName + \Filesets\FilesetName // lstrcat (pszPath, TEXT("\\")); lstrcat (pszPath, FILESETS_KW); lstrcat (pszPath, TEXT("\\")); lpi->GetFilesetName (&pszPath[ lstrlen(pszPath) ]); *pwVer = wVerFILESET_PREF; } return TRUE; }
LPTSTR Alert_GetQuickDescription (LPIDENT lpi) { LPTSTR pszStatus = NULL; size_t cAlerts; if ((cAlerts = Alert_GetCount (lpi)) <= 1) pszStatus = Alert_GetDescription (lpi, 0, FALSE); else if (lpi->fIsServer()) pszStatus = FormatString (IDS_SERVER_MULTIPLE_PROBLEMS, TEXT("%lu"), cAlerts); else if (lpi->fIsService()) pszStatus = FormatString (IDS_SERVICE_MULTIPLE_PROBLEMS, TEXT("%lu"), cAlerts); else if (lpi->fIsAggregate()) pszStatus = FormatString (IDS_AGGREGATE_MULTIPLE_PROBLEMS, TEXT("%lu"), cAlerts); else if (lpi->fIsFileset()) pszStatus = FormatString (IDS_FILESET_MULTIPLE_PROBLEMS, TEXT("%lu"), cAlerts); return pszStatus; }
void Services_OnSelect (HWND hDlg) { LPIDENT lpi; if ( ((lpi = (LPIDENT)FL_GetSelectedData (GetDlgItem (hDlg, IDC_SVC_LIST))) == NULL) || (!lpi->fIsService()) ) { EnableWindow (GetDlgItem (hDlg, IDC_SVC_RESTART), FALSE); EnableWindow (GetDlgItem (hDlg, IDC_SVC_DELETE), FALSE); } else { TCHAR szName[ cchRESOURCE ]; lpi->GetServiceName (szName); if (!lstrcmpi (szName, TEXT("BOS"))) EnableWindow (GetDlgItem (hDlg, IDC_SVC_DELETE), FALSE); else EnableWindow (GetDlgItem (hDlg, IDC_SVC_DELETE), TRUE); EnableWindow (GetDlgItem (hDlg, IDC_SVC_RESTART), TRUE); } }
LPOBJECTALERTS Alert_GetObjectAlerts (LPIDENT lpi, BOOL fAlwaysServer, ULONG *pStatus) { LPOBJECTALERTS lpoa = NULL; if (fAlwaysServer || lpi->fIsServer()) { LPSERVER_PREF lpsp; if ((lpsp = (LPSERVER_PREF)lpi->GetServer()->GetUserParam()) != NULL) { lpoa = &lpsp->oa; } } else if (lpi->fIsService()) { LPSERVICE_PREF lpsp; if ((lpsp = (LPSERVICE_PREF)lpi->GetUserParam()) != NULL) { lpoa = &lpsp->oa; } } else if (lpi->fIsAggregate()) { LPAGGREGATE_PREF lpap; if ((lpap = (LPAGGREGATE_PREF)lpi->GetUserParam()) != NULL) { lpoa = &lpap->oa; } } else if (lpi->fIsFileset()) { LPFILESET_PREF lpfp; if ((lpfp = (LPFILESET_PREF)lpi->GetUserParam()) != NULL) { lpoa = &lpfp->oa; } } return lpoa; }
void Command_OnProperties (LPIDENT lpi) { if (lpi) { size_t nAlerts = Alert_GetCount (lpi); if (lpi->fIsServer()) { Server_ShowProperties (lpi, nAlerts); } else if (lpi->fIsService()) { Services_ShowProperties (lpi, nAlerts); } else if (lpi->fIsAggregate()) { Aggregates_ShowProperties (lpi, nAlerts); } else if (lpi->fIsFileset()) { Filesets_ShowProperties (lpi, nAlerts); } } }
void DispatchNotification_MainThread (NOTIFYEVENT evt, PNOTIFYPARAMS pParams) { LPIDENT lpiEvt = pParams->lpi1; // There are several notifications which are sent when beginning or ending // lengthy operations. These "actions" each get a window indicating // progress, and get added to our ongoing list of actions-in-progress. // ActionNotification_MainThread (evt, pParams); // The real reason for this routine is as a dispatcher for the AFSClass's // notifications: various windows throughout the app register themselves // with this dispatcher, and thereby get a message whenever a particular // event of interest to that window happens. Just what notifications // are "of interest" is specified by the window when it registers with // this dispatcher. // for (size_t iDispatch = 0; iDispatch < nDispatchList; ++iDispatch) { if (!aDispatchList[ iDispatch ].hWnd) continue; BOOL fDispatch = FALSE; // WHEN_CELL_OPENED + NULL -> notify if any new cell is opened // WHEN_OBJECT_CHANGES + NULL -> notify if anything at all changes // WHEN_OBJECT_CHANGES + lpi -> notify if this object changes // WHEN_SVCS(etc)_CHANGE + NULL -> notify if any service at all changes // WHEN_SVCS(etc)_CHANGE + lpi -> notify if any svc on this svr changes switch (aDispatchList[ iDispatch ].when) { case WHEN_CELL_OPENED: if (evt == evtCreate && lpiEvt->fIsCell()) fDispatch = TRUE; break; case WHEN_OBJECT_CHANGES: if ( (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (evt != evtCreate) fDispatch = TRUE; } break; case WHEN_SVRS_CHANGE: switch (evt) { case evtInvalidate: case evtRefreshServersBegin: case evtRefreshServersEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && lpiEvt->fIsCell()) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsServer()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtCell = lpiEvt->GetCell(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtCell) fDispatch = TRUE; } } break; } break; case WHEN_SETS_CHANGE: switch (evt) { case evtInvalidate: case evtRefreshFilesetsBegin: case evtRefreshFilesetsEnd: { LPIDENT lpiEvtSvr = NULL; if (lpiEvt && !lpiEvt->fIsCell()) lpiEvtSvr = lpiEvt->GetServer(); if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer() || lpiEvt->fIsAggregate())) fDispatch = TRUE; } } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsFileset()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtAgg = lpiEvt->GetAggregate(); LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtAgg) fDispatch = TRUE; if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; case WHEN_AGGS_CHANGE: switch (evt) { case evtRefreshAggregatesBegin: case evtRefreshAggregatesEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer())) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsAggregate()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; case WHEN_SVCS_CHANGE: switch (evt) { case evtRefreshServicesBegin: case evtRefreshServicesEnd: if ( (lpiEvt && lpiEvt->fIsCell()) || (aDispatchList[ iDispatch ].lpiObject == lpiEvt) || (aDispatchList[ iDispatch ].lpiObject == NULL) ) { if (lpiEvt && (lpiEvt->fIsCell() || lpiEvt->fIsServer())) fDispatch = TRUE; } break; case evtCreate: case evtDestroy: case evtRefreshStatusBegin: case evtRefreshStatusEnd: case evtAlertsChanged: if (lpiEvt && lpiEvt->fIsService()) { if (aDispatchList[ iDispatch ].lpiObject == NULL) fDispatch = TRUE; else { LPIDENT lpiEvtSvr = lpiEvt->GetServer(); if (aDispatchList[ iDispatch ].lpiObject == lpiEvtSvr) fDispatch = TRUE; } } break; } break; } if (fDispatch) { LPNOTIFYSTRUCT lpns = New (NOTIFYSTRUCT); lpns->hwndTarget = aDispatchList[ iDispatch ].hWnd; lpns->evt = evt; memcpy (&lpns->Params, pParams, sizeof(NOTIFYPARAMS)); lpns->Params.lpUser = aDispatchList[ iDispatch ].lpUser; PostMessage (aDispatchList[ iDispatch ].hWnd, WM_NOTIFY_FROM_DISPATCH, (WPARAM)0, (LPARAM)lpns); } } }
void DispatchNotification_AltThread (NOTIFYEVENT evt, PNOTIFYPARAMS pParams) { LPIDENT lpiEvt = pParams->lpi1; switch (evt) { case evtRefreshStatusEnd: if (lpiEvt && (lpiEvt->fIsService() || lpiEvt->fIsAggregate() || lpiEvt->fIsFileset())) { Alert_RemoveSecondary (lpiEvt); Alert_Scout_QueueCheckServer (lpiEvt); } if (lpiEvt && lpiEvt->fIsServer()) { LPSERVER_PREF lpsp; if ((lpsp = (LPSERVER_PREF)lpiEvt->GetUserParam()) != NULL) { LPSERVER lpServer; if ((lpServer = lpiEvt->OpenServer()) != NULL) { if (lpsp->fIsMonitored != lpServer->fIsMonitored()) { g.sub = Subsets_SetMonitor (g.sub, lpiEvt, lpServer->fIsMonitored()); UpdateDisplay_ServerWindow (FALSE, lpiEvt); } lpsp->fIsMonitored = lpServer->fIsMonitored(); lpServer->Close(); } } Alert_Scout_ServerStatus (lpiEvt, pParams->status); } break; // When we get a create request, use the object's Get/SetUserParam() // methods to attach an allocated structure to the thing--the structure // contains the preferences for the server/fileset/etc (for instance, // its warning threshholds, any current scout problems, etc). // On delete requests, free that structure. // case evtCreate: if (lpiEvt->fIsServer()) { PVOID pPref = Server_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); // Should this server be monitored? // if (!Subsets_fMonitorServer (g.sub, lpiEvt)) { LPSERVER lpServer; if ((lpServer = lpiEvt->OpenServer()) != NULL) { lpServer->SetMonitor (FALSE); lpServer->Close(); } } Alert_Scout_SetOutOfDate (lpiEvt); } else if (lpiEvt->fIsService()) { PVOID pPref = Services_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } else if (lpiEvt->fIsAggregate()) { PVOID pPref = Aggregates_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } else if (lpiEvt->fIsFileset()) { PVOID pPref = Filesets_LoadPreferences (lpiEvt); lpiEvt->SetUserParam (pPref); } if (!lpiEvt->fIsCell()) { Alert_Scout_QueueCheckServer (lpiEvt); } break; // When we get a create request, use the object's Get/SetUserParam() // methods to attach an allocated structure to the thing--the structure // contains the preferences for the server/fileset/etc (for instance, // its warning threshholds, any current scout problems, etc). // On delete requests, free that structure. // case evtDestroy: if (lpiEvt->fIsServer()) { PVOID pPref = lpiEvt->GetUserParam(); lpiEvt->SetUserParam (0); if (pPref) Delete (pPref); } else if (lpiEvt->fIsService() || lpiEvt->fIsAggregate() || lpiEvt->fIsFileset()) { Alert_RemoveSecondary (lpiEvt); PVOID pPref = lpiEvt->GetUserParam(); lpiEvt->SetUserParam (0); if (pPref) Delete (pPref); } break; } }
void StartContextCommand (HWND hDialog, LPIDENT lpiRepresentedByWindow, LPIDENT lpiChosenByClick, int cmd) { CHILDTAB iTab = Server_GetDisplayedTab (hDialog); LPIDENT lpi = (lpiChosenByClick) ? lpiChosenByClick : lpiRepresentedByWindow; if (lpi && lpi->fIsCell()) lpi = NULL; switch (cmd) { case M_COLUMNS: if (iTab == tabSERVICES) ShowColumnsDialog (hDialog, &gr.viewSvc); else if (iTab == tabAGGREGATES) ShowColumnsDialog (hDialog, &gr.viewAgg); else if (iTab == tabFILESETS) ShowColumnsDialog (hDialog, &gr.viewSet); else ShowColumnsDialog (hDialog, NULL); break; case M_SVR_VIEW_ONEICON: case M_SVR_VIEW_TWOICONS: case M_SVR_VIEW_STATUS: Command_OnIconView (hDialog, TRUE, iTab, cmd); break; case M_VIEW_ONEICON: case M_VIEW_TWOICONS: case M_VIEW_STATUS: Command_OnIconView (hDialog, FALSE, iTab, cmd); break; case M_PROPERTIES: if (lpi) Command_OnProperties (lpi); break; case M_SUBSET: ShowSubsetsDialog(); break; case M_REFRESHALL: if (g.lpiCell) StartTask (taskREFRESH, NULL, g.lpiCell); break; case M_REFRESH: if (lpi) StartTask (taskREFRESH, NULL, lpi); else if (g.lpiCell) StartTask (taskREFRESH, NULL, g.lpiCell); break; case M_SYNCVLDB: if (lpi) Server_SyncVLDB (lpi); break; case M_SALVAGE: if (lpi) Server_Salvage (lpi); break; case M_SET_CREATE: Filesets_Create (lpi); break; case M_SET_REPLICATION: if (lpi && lpi->fIsFileset()) Filesets_ShowReplication (Server_GetWindowForChild (hDialog), lpi); break; case M_SET_DELETE: if (lpi && lpi->fIsFileset()) Filesets_Delete (lpi); break; case M_SET_CLONE: Filesets_Clone (lpi); break; case M_SET_DUMP: if (lpi && lpi->fIsFileset()) Filesets_Dump (lpi); break; case M_SET_RESTORE: Filesets_Restore (lpi); break; case M_SET_RELEASE: if (lpi && lpi->fIsFileset()) Filesets_Release (lpi); break; case M_SET_MOVETO: if (lpi && lpi->fIsFileset()) Filesets_ShowMoveTo (lpi, NULL); break; case M_SET_SETQUOTA: if (lpi && lpi->fIsFileset()) Filesets_SetQuota (lpi); break; case M_SET_LOCK: if (lpi && lpi->fIsFileset()) StartTask (taskSET_LOCK, NULL, lpi); break; case M_SET_UNLOCK: if (lpi && !lpi->fIsService()) StartTask (taskSET_UNLOCK, NULL, lpi); else if (!lpi && g.lpiCell) StartTask (taskSET_UNLOCK, NULL, g.lpiCell); break; case M_SET_RENAME: if (lpi && lpi->fIsFileset()) Filesets_ShowRename (lpi); break; case M_SVR_OPEN: if (lpi && lpi->fIsServer()) StartTask (taskSVR_GETWINDOWPOS, g.hMain, lpi); break; case M_SVR_CLOSE: if (lpi && lpi->fIsServer()) Server_Close (lpi); break; case M_SVR_CLOSEALL: Server_CloseAll (TRUE); break; case M_SVR_SECURITY: Server_Security (lpi); break; case M_SVR_HOSTS: Server_Hosts (lpi); break; case M_SVR_INSTALL: Server_Install (lpi); break; case M_SVR_UNINSTALL: Server_Uninstall (lpi); break; case M_SVR_PRUNE: Server_Prune (lpi); break; case M_SVR_GETDATES: Server_GetDates (lpi); break; case M_EXECUTE: Server_Execute (lpi); break; case M_VIEWLOG: if (lpi && lpi->fIsService()) Services_ShowServiceLog (lpi); else Services_ShowServerLog (lpi); break; case M_SVR_MONITOR: if (lpi && lpi->fIsServer()) StartTask (taskSVR_MONITOR_ONOFF, NULL, lpi); break; case M_SVC_CREATE: if (!lpi) Services_Create (NULL); else Services_Create (lpi->GetServer()); break; case M_SVC_DELETE: if (lpi && lpi->fIsService()) Services_Delete (lpi); break; case M_SVC_START: if (lpi && lpi->fIsService()) Services_Start (lpi); break; case M_SVC_STOP: if (lpi && lpi->fIsService()) Services_Stop (lpi); break; case M_SVC_RESTART: if (lpi && lpi->fIsService()) Services_Restart (lpi); break; case M_CELL_OPEN: OpenCellDialog(); break; case M_CREDENTIALS: NewCredsDialog(); break; case M_OPTIONS: ShowOptionsDialog(); break; case M_HELP: WinHelp (g.hMain, cszHELPFILENAME, HELP_FINDER, 0); break; case M_HELP_FIND: Help_FindCommand(); break; case M_HELP_XLATE: Help_FindError(); break; case M_ABOUT: Help_About(); break; } }