game: add daemon start/stop mining from the game

This commit is contained in:
Crypto City 2020-05-27 01:05:18 +00:00
parent fec0907c58
commit da975c6c35
8 changed files with 134 additions and 0 deletions

View File

@ -12,6 +12,7 @@ TBLayout: axis: y, distribution-position: "left top", distribution: "available"
TBTextField: text: "Temperature:"
TBTextField: id: "temperature"
TBTextField: text: "⚬"
TBSection: value: 1, text: "Player"
TBLayout: axis: y, spacing: 0, size: available
TBToggleContainer: id: "player-wallet-loaded", toggle: expanded
@ -33,6 +34,13 @@ TBLayout: axis: y, distribution-position: "left top", distribution: "available"
TBButton: skin: "TBButton.column", text: "Accept invitation" id: "player-accept-invitation"
TBButton: skin: "TBButton.column", text: "Load wallet" id: "player-load-wallet"
TBSection: value: 0, text: "Node"
TBLayout: axis: y, spacing: 0, size: available
TBToggleContainer: id: "start-mining-container", toggle: expanded
TBButton: skin: "TBButton.column", id: "start-mining", text: "Start mining"
TBToggleContainer: id: "stop-mining-container", toggle: expanded
TBButton: skin: "TBButton.column", id: "stop-mining", text: "Stop mining"
TBSection: value: 0, text: "Commands"
TBLayout: axis: y, spacing: 0, size: available
TBButton: skin: "TBButton.column", text: "Buy land", id: "actions-buy-land"

View File

@ -370,6 +370,10 @@ public:
bool is_syncing() const { return needs_sync; }
uint32_t get_authorized_game_account() const { return authorized_game_account; }
bool start_mining();
bool stop_mining();
bool is_mining() const;
protected:
virtual void on_new_block(uint64_t height, const cryptonote::block& block, const std::vector<cryptonote::transaction> &transactions) override;
virtual void on_reorg(uint64_t height) override;
@ -1380,6 +1384,21 @@ bool GameWalletInternal::get_attribute(const std::string &key, std::string &valu
return w && w->get_attribute(key, value);
}
bool GameWalletInternal::start_mining()
{
return w && w->start_mining();
}
bool GameWalletInternal::stop_mining()
{
return w && w->stop_mining();
}
bool GameWalletInternal::is_mining() const
{
return w && w->is_mining();
}
void GameWalletInternal::on_reorg(uint64_t height)
{
MINFO("Reorg, clearing recent history");
@ -1747,3 +1766,18 @@ bool GameWallet::generate_new_wallet(const char *wallet_file)
{
return internal->generate_new_wallet(wallet_file);
}
bool GameWallet::start_mining()
{
return internal->start_mining();
}
bool GameWallet::stop_mining()
{
return internal->stop_mining();
}
bool GameWallet::is_mining() const
{
return internal->is_mining();
}

View File

@ -94,6 +94,10 @@ public:
bool generate_invitation(uint64_t amount, uint64_t expiration, std::string &invitation) const;
bool generate_new_wallet(const char *wallet_file);
bool start_mining();
bool stop_mining();
bool is_mining() const;
private:
void HandleLoadingWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleNewWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);

View File

@ -242,6 +242,8 @@ public:
void HandleGenerateInvitation(StringHash eventType, VariantMap& eventData);
void HandleAcceptInvitation(StringHash eventType, VariantMap& eventData);
void HandleRequestInvitationStatus(StringHash eventType, VariantMap& eventData);
void HandleStartMining(StringHash eventType, VariantMap& eventData);
void HandleStopMining(StringHash eventType, VariantMap& eventData);
void MoveCamera(float timeStep);
void CloseBuildingTooltip();
@ -817,6 +819,8 @@ void CryptoCityUrho3D::SetupUI()
SubscribeToEvent(ui, E_CRYPTOCITY_GENERATE_INVITATION, URHO3D_HANDLER(CryptoCityUrho3D, HandleGenerateInvitation));
SubscribeToEvent(ui, E_CRYPTOCITY_ACCEPT_INVITATION, URHO3D_HANDLER(CryptoCityUrho3D, HandleAcceptInvitation));
SubscribeToEvent(ui, E_CRYPTOCITY_REQUEST_INVITATION_STATUS, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestInvitationStatus));
SubscribeToEvent(ui, E_CRYPTOCITY_START_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStartMining));
SubscribeToEvent(ui, E_CRYPTOCITY_STOP_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStopMining));
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_PLAYER_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestPlayerData));
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_ITEM_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestItemData));
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_BADGE_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestBadgeData));
@ -2452,6 +2456,20 @@ void CryptoCityUrho3D::HandleAcceptInvitation(StringHash eventType, VariantMap&
wallet->send_command(cmd);
}
void CryptoCityUrho3D::HandleStartMining(StringHash eventType, VariantMap& eventData)
{
if (!wallet)
return;
wallet->start_mining();
}
void CryptoCityUrho3D::HandleStopMining(StringHash eventType, VariantMap& eventData)
{
if (!wallet)
return;
wallet->stop_mining();
}
void CryptoCityUrho3D::AddBlock(bool use_selection)
{
UnsetFocus();

View File

@ -166,6 +166,9 @@ UIUrho3D::UIUrho3D(Context *ctx, const GameState *gameState):
citySpecialEventText = command_window->GetWidgetByIDAndType<TBTextField>("city-special-event");
cityTreasuryText = command_window->GetWidgetByIDAndType<TBTextField>("city-treasury");
startMiningContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("start-mining-container");
stopMiningContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("stop-mining-container");
CreateSpectatorModeWidget();
CreateNodeNotificationWidget();
CreateLoadingWalletNotificationWidget();
@ -383,6 +386,13 @@ void UIUrho3D::Update(float timeStep, uint32_t mouse_x, uint32_t mouse_y, uint32
UpdateQueuedCommandsNotification(w);
UpdateCompass(timeStep, view_direction);
m_mining_checker.do_call([this, &w](){
const bool is_mining = w->is_mining();
startMiningContainer->SetValue(!is_mining);
stopMiningContainer->SetValue(is_mining);
return true;
});
if (selectMaterial)
selectMaterial->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
@ -1046,6 +1056,18 @@ void UIUrho3D::HandleService(StringHash eventType, VariantMap& eventData)
});
}
void UIUrho3D::HandleStartMining(StringHash eventType, VariantMap& eventData)
{
VariantMap noEventData;
SendEvent(E_CRYPTOCITY_START_MINING, noEventData);
}
void UIUrho3D::HandleStopMining(StringHash eventType, VariantMap& eventData)
{
VariantMap noEventData;
SendEvent(E_CRYPTOCITY_STOP_MINING, noEventData);
}
void UIUrho3D::HandleAddBlock(StringHash eventType, VariantMap& eventData)
{
VariantMap noEventData;
@ -1725,6 +1747,9 @@ void UIUrho3D::HandleTBMessage(StringHash eventType, VariantMap& eventData)
CONNECT("demolish-confirmation", HandleDemolishConfirmation);
CONNECT("destroy-flag-confirmation", HandleDestroyFlagConfirmation);
CONNECT("start-mining", HandleStartMining);
CONNECT("stop-mining", HandleStopMining);
}
else if (ev->type == EVENT_TYPE_CHANGED)
{

View File

@ -11,6 +11,7 @@
#include <tb/tb_window.h>
#include <tb/tb_layout.h>
#include <tb/tb_select_item.h>
#include "math_helper.h"
#include "controls.h"
#include "shade-button.h"
#include "shadable-window.h"
@ -142,6 +143,8 @@ URHO3D_EVENT(E_CRYPTOCITY_SERVICE_PRICE, ServicePrice) { URHO3D_PARAM(P_FLAG, Fl
URHO3D_EVENT(E_CRYPTOCITY_GENERATE_INVITATION, GenerateInvitation) { URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_EXPIRATION, Expiration); URHO3D_PARAM(P_INVITATION, Invitation); }
URHO3D_EVENT(E_CRYPTOCITY_ACCEPT_INVITATION, AcceptInvitation) { URHO3D_PARAM(P_INVITATION, Invitation); URHO3D_PARAM(P_FILENAME, Filename); URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_REQUEST_INVITATION_STATUS, RequestInvitationStatus) { URHO3D_PARAM(P_PUBLIC_KEY, PublicKey); URHO3D_PARAM(P_USED, Used); URHO3D_PARAM(P_BALANCE_OK, BalanceOK); }
URHO3D_EVENT(E_CRYPTOCITY_START_MINING, StartMining) { }
URHO3D_EVENT(E_CRYPTOCITY_STOP_MINING, StopMining) { }
class UIUrho3D: public Urho3D::UIElement
{
@ -243,6 +246,8 @@ private:
void HandlePalette(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleFightFire(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleService(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleStartMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleStopMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDemolishConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDestroyFlagConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
@ -327,6 +332,9 @@ private:
UITBWindow *shadingFix;
uint32_t flag_owner;
tb::TBToggleContainer *startMiningContainer;
tb::TBToggleContainer *stopMiningContainer;
// no ref, cleared when destroyed
UIBuildingSettingsDialog *buildingSettingsDialog;
UILastUpdateEventsDialog *lastUpdateEventsDialog;
@ -366,6 +374,8 @@ private:
float compass_rotation_speed;
UISelectMaterial *selectMaterial;
epee::math_helper::once_a_time_seconds<2> m_mining_checker;
};
#endif

View File

@ -6122,6 +6122,37 @@ void wallet2::rescan_blockchain(bool hard, bool refresh, bool keep_key_images)
finish_rescan_bc_keep_key_images(transfers_cnt, transfers_hash);
}
//----------------------------------------------------------------------------------------------------
bool wallet2::start_mining()
{
COMMAND_RPC_START_MINING::request req = AUTO_VAL_INIT(req);
req.miner_address = get_account().get_public_address_str(nettype());
if (get_cc_pkey() != crypto::null_pkey)
req.game_account_key = epee::string_tools::pod_to_hex(get_cc_pkey());
req.threads_count = 0;
req.do_background_mining = false;
req.ignore_battery = false;
COMMAND_RPC_START_MINING::response res;
bool r = invoke_http_json("/start_mining", req, res);
return r && res.status == CORE_RPC_STATUS_OK;
}
//----------------------------------------------------------------------------------------------------
bool wallet2::stop_mining()
{
COMMAND_RPC_STOP_MINING::request req;
COMMAND_RPC_STOP_MINING::response res;
bool r = invoke_http_json("/stop_mining", req, res);
return r && res.status == CORE_RPC_STATUS_OK;
}
//----------------------------------------------------------------------------------------------------
bool wallet2::is_mining()
{
COMMAND_RPC_MINING_STATUS::request req;
COMMAND_RPC_MINING_STATUS::response res;
bool r = invoke_http_json("/mining_status", req, res);
return r && res.status == CORE_RPC_STATUS_OK && res.active;
}
//----------------------------------------------------------------------------------------------------
bool wallet2::is_transfer_unlocked(const transfer_details& td) const
{
return is_transfer_unlocked(td.m_tx.unlock_time, td.m_block_height);

View File

@ -1451,6 +1451,10 @@ private:
uint64_t credits() const { return m_rpc_payment_state.credits; }
void credit_report(uint64_t &expected_spent, uint64_t &discrepancy) const { expected_spent = m_rpc_payment_state.expected_spent; discrepancy = m_rpc_payment_state.discrepancy; }
bool start_mining();
bool stop_mining();
bool is_mining();
static const std::string &get_default_daemon_address() { return default_daemon_address; }
private: