mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-10-17 09:10:21 +01:00
Graceful shutdown menu
This commit is contained in:
parent
b294c4b9f4
commit
241ac2f593
1 changed files with 44 additions and 4 deletions
|
@ -8,36 +8,76 @@
|
||||||
|
|
||||||
#if defined(__HAIKU__)
|
#if defined(__HAIKU__)
|
||||||
|
|
||||||
#include "Daemon.h"
|
#include <memory>
|
||||||
|
|
||||||
#include <MenuItem.h>
|
#include <MenuItem.h>
|
||||||
#include <MenuBar.h>
|
#include <MenuBar.h>
|
||||||
|
#include <MessageRunner.h>
|
||||||
#include <Window.h>
|
#include <Window.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
|
||||||
|
#include "RouterContext.h"
|
||||||
|
#include "Tunnel.h"
|
||||||
|
#include "Daemon.h"
|
||||||
|
|
||||||
|
constexpr int M_GRACEFUL_SHUTDOWN = 1;
|
||||||
|
constexpr int C_GRACEFUL_SHUTDOWN_UPDATE = 2;
|
||||||
|
constexpr bigtime_t GRACEFUL_SHUTDOWN_UPDATE_INTERVAL = 1000*1000; // in microseconds
|
||||||
|
constexpr int GRACEFUL_SHUTDOWN_UPDATE_COUNT = 600; // 10 minutes
|
||||||
|
|
||||||
class MainWindow: public BWindow
|
class MainWindow: public BWindow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MainWindow ();
|
MainWindow ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void MessageReceived (BMessage * msg) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
BMessenger m_Messenger;
|
||||||
|
std::unique_ptr<BMessageRunner> m_GracefulShutdownTimer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class I2PApp: public BApplication
|
class I2PApp: public BApplication
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
I2PApp ();
|
I2PApp ();
|
||||||
};
|
};
|
||||||
|
|
||||||
MainWindow::MainWindow ():
|
MainWindow::MainWindow ():
|
||||||
BWindow (BRect(100, 100, 500, 400), "i2pd", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE)
|
BWindow (BRect(100, 100, 500, 400), "i2pd", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE),
|
||||||
|
m_Messenger (nullptr, this)
|
||||||
{
|
{
|
||||||
auto r = Bounds (); r.bottom = 20;
|
auto r = Bounds (); r.bottom = 20;
|
||||||
auto menuBar = new BMenuBar (r, "menubar");
|
auto menuBar = new BMenuBar (r, "menubar");
|
||||||
AddChild (menuBar);
|
AddChild (menuBar);
|
||||||
auto runMenu = new BMenu ("Run");
|
auto runMenu = new BMenu ("Run");
|
||||||
|
runMenu->AddItem (new BMenuItem ("Graceful shutdown", new BMessage (M_GRACEFUL_SHUTDOWN), 'G'));
|
||||||
runMenu->AddItem (new BMenuItem ("Quit", new BMessage (B_QUIT_REQUESTED), 'Q'));
|
runMenu->AddItem (new BMenuItem ("Quit", new BMessage (B_QUIT_REQUESTED), 'Q'));
|
||||||
menuBar->AddItem (runMenu);
|
menuBar->AddItem (runMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::MessageReceived (BMessage * msg)
|
||||||
|
{
|
||||||
|
if (!msg) return;
|
||||||
|
switch (msg->what)
|
||||||
|
{
|
||||||
|
case M_GRACEFUL_SHUTDOWN:
|
||||||
|
i2p::context.SetAcceptsTunnels (false);
|
||||||
|
m_GracefulShutdownTimer = std::make_unique<BMessageRunner>(m_Messenger,
|
||||||
|
BMessage (C_GRACEFUL_SHUTDOWN_UPDATE), GRACEFUL_SHUTDOWN_UPDATE_INTERVAL);
|
||||||
|
break;
|
||||||
|
case C_GRACEFUL_SHUTDOWN_UPDATE:
|
||||||
|
if (i2p::tunnel::tunnels.CountTransitTunnels () <= 0)
|
||||||
|
{
|
||||||
|
m_GracefulShutdownTimer = nullptr;
|
||||||
|
m_Messenger.SendMessage (B_QUIT_REQUESTED);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
BWindow::MessageReceived (msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
I2PApp::I2PApp (): BApplication("application/x-vnd.purplei2p-i2pd")
|
I2PApp::I2PApp (): BApplication("application/x-vnd.purplei2p-i2pd")
|
||||||
{
|
{
|
||||||
auto mainWindow = new MainWindow ();
|
auto mainWindow = new MainWindow ();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue