diff --git a/src/net/Client.cpp b/src/net/Client.cpp index fe220aec..ec250cb8 100644 --- a/src/net/Client.cpp +++ b/src/net/Client.cpp @@ -589,6 +589,11 @@ void Client::ping() void Client::reconnect() { + if(m_failures == -1) + { + return m_listener->onClose(this, -1); + } + setState(ConnectingState); #ifndef XMRIG_PROXY_PROJECT @@ -598,11 +603,6 @@ void Client::reconnect() } #endif - if(m_failures == -1) - { - return m_listener->onClose(this, -1); - } - m_failures++; m_listener->onClose(this, (int) m_failures); diff --git a/src/net/Network.cpp b/src/net/Network.cpp index 81d79efe..930dbe27 100644 --- a/src/net/Network.cpp +++ b/src/net/Network.cpp @@ -124,7 +124,7 @@ void Network::onJob(Client* client, const Job & job) LOG_INFO("new job from " << client->host() << ":" << client->port() << " diff " << job.diff()); } - if(m_donate && m_donate->isActive() && client->id() != -1 && !m_donate->reschedule()) + if(m_donate && m_donate->reschedule(client->id() == -1)) { return; } diff --git a/src/net/strategies/DonateStrategy.cpp b/src/net/strategies/DonateStrategy.cpp index fe0c5a12..6155f30c 100644 --- a/src/net/strategies/DonateStrategy.cpp +++ b/src/net/strategies/DonateStrategy.cpp @@ -47,7 +47,7 @@ enum DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* listener) : m_active(false), - m_suspended(false), + m_starting(false), m_listener(listener), m_donateTicks(0), m_target(0), @@ -91,23 +91,42 @@ DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* lis } -bool DonateStrategy::reschedule() +bool DonateStrategy::reschedule(const bool isDonate) { - const uint64_t donateTicks = Options::i()->donateMinutes() * C_TICKS_PER_MINUTE; - if(m_donateTicks < donateTicks) + if(isDonate) { - return false; + const uint64_t donateTargetTicks = Options::i()->donateMinutes() * C_TICKS_PER_MINUTE; + LOG_DEBUG("Dev donate ticks: " << m_donateTicks << "/" << donateTargetTicks); + if(m_donateTicks < donateTargetTicks) + { + return false; + } + + m_target = std::max(int(C_ONE_CICLE_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; + + LOG_NOTICE("Dev donate: finished!"); + stop(); + } + else + { + if(m_starting == true || m_active == true) + { + return false; + } + + LOG_DEBUG("Non-Dev donate ticks: " << m_ticks << "/" << m_target); + if(m_ticks < m_target) + { + return false; + } + + LOG_NOTICE("Dev donate: start!"); + connect(); } - m_target = std::max(int(C_ONE_CICLE_IN_TICKS - m_donateTicks), int(C_ONE_TICK)) + m_ticks; - m_active = false; - - stop(); - m_suspended = false; return true; } - int64_t DonateStrategy::submit(const JobResult & result) { return m_client->submit(result); @@ -116,17 +135,16 @@ int64_t DonateStrategy::submit(const JobResult & result) void DonateStrategy::connect() { - m_suspended = false; + m_client->connect(); + m_starting = true; } void DonateStrategy::stop() { - m_suspended = true; m_donateTicks = 0; m_client->disconnect(); - - LOG_NOTICE("dev donate finished"); + m_starting = false; } @@ -134,19 +152,8 @@ void DonateStrategy::tick(uint64_t now) { m_client->tick(now); - if(m_suspended) - { - return; - } - m_ticks++; - if(m_ticks == m_target) - { - LOG_NOTICE("dev donate start"); - m_client->connect(); - } - if(isActive()) { m_donateTicks++; diff --git a/src/net/strategies/DonateStrategy.h b/src/net/strategies/DonateStrategy.h index 0e199908..41d3c797 100644 --- a/src/net/strategies/DonateStrategy.h +++ b/src/net/strategies/DonateStrategy.h @@ -38,7 +38,7 @@ class DonateStrategy : public IStrategy, public IClientListener { public: DonateStrategy(const std::string & agent, IStrategyListener* listener); - bool reschedule(); + bool reschedule(const bool isDonate); inline bool isActive() const override { @@ -59,7 +59,7 @@ protected: private: bool m_active; - bool m_suspended; + bool m_starting; Client* m_client; IStrategyListener* m_listener; uint64_t m_donateTicks;