aspnetcore/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h

44 lines
1.3 KiB
C++

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#pragma once
#include <filesystem>
#include "application.h"
enum PollingAppOfflineApplicationMode
{
StopWhenAdded,
StopWhenRemoved
};
class PollingAppOfflineApplication: public APPLICATION
{
public:
PollingAppOfflineApplication(IHttpApplication& pApplication, PollingAppOfflineApplicationMode mode)
:
m_ulLastCheckTime(0),
m_appOfflineLocation(GetAppOfflineLocation(pApplication)),
m_fAppOfflineFound(false),
m_mode(mode)
{
InitializeSRWLock(&m_statusLock);
}
APPLICATION_STATUS QueryStatus() override;
bool AppOfflineExists();
virtual HRESULT OnAppOfflineFound() = 0;
void Stop(bool fServerInitiated) override { UNREFERENCED_PARAMETER(fServerInitiated); }
protected:
std::experimental::filesystem::path m_appOfflineLocation;
static std::experimental::filesystem::path GetAppOfflineLocation(IHttpApplication& pApplication);
private:
static const int c_appOfflineRefreshIntervalMS = 200;
std::string m_strAppOfflineContent;
ULONGLONG m_ulLastCheckTime;
bool m_fAppOfflineFound;
SRWLOCK m_statusLock {};
PollingAppOfflineApplicationMode m_mode;
};