Merge branch 'donate'

This commit is contained in:
enWILLYado 2018-03-01 08:26:05 +01:00
commit f6fe59ba17
4 changed files with 41 additions and 34 deletions

View file

@ -589,6 +589,11 @@ void Client::ping()
void Client::reconnect() void Client::reconnect()
{ {
if(m_failures == -1)
{
return m_listener->onClose(this, -1);
}
setState(ConnectingState); setState(ConnectingState);
#ifndef XMRIG_PROXY_PROJECT #ifndef XMRIG_PROXY_PROJECT
@ -598,11 +603,6 @@ void Client::reconnect()
} }
#endif #endif
if(m_failures == -1)
{
return m_listener->onClose(this, -1);
}
m_failures++; m_failures++;
m_listener->onClose(this, (int) m_failures); m_listener->onClose(this, (int) m_failures);

View file

@ -124,7 +124,7 @@ void Network::onJob(Client* client, const Job & job)
LOG_INFO("new job from " << client->host() << ":" << client->port() << " diff " << job.diff()); 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; return;
} }

View file

@ -47,7 +47,7 @@ enum
DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* listener) : DonateStrategy::DonateStrategy(const std::string & agent, IStrategyListener* listener) :
m_active(false), m_active(false),
m_suspended(false), m_starting(false),
m_listener(listener), m_listener(listener),
m_donateTicks(0), m_donateTicks(0),
m_target(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(isDonate)
if(m_donateTicks < donateTicks)
{ {
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; return true;
} }
int64_t DonateStrategy::submit(const JobResult & result) int64_t DonateStrategy::submit(const JobResult & result)
{ {
return m_client->submit(result); return m_client->submit(result);
@ -116,17 +135,16 @@ int64_t DonateStrategy::submit(const JobResult & result)
void DonateStrategy::connect() void DonateStrategy::connect()
{ {
m_suspended = false; m_client->connect();
m_starting = true;
} }
void DonateStrategy::stop() void DonateStrategy::stop()
{ {
m_suspended = true;
m_donateTicks = 0; m_donateTicks = 0;
m_client->disconnect(); m_client->disconnect();
m_starting = false;
LOG_NOTICE("dev donate finished");
} }
@ -134,19 +152,8 @@ void DonateStrategy::tick(uint64_t now)
{ {
m_client->tick(now); m_client->tick(now);
if(m_suspended)
{
return;
}
m_ticks++; m_ticks++;
if(m_ticks == m_target)
{
LOG_NOTICE("dev donate start");
m_client->connect();
}
if(isActive()) if(isActive())
{ {
m_donateTicks++; m_donateTicks++;

View file

@ -38,7 +38,7 @@ class DonateStrategy : public IStrategy, public IClientListener
{ {
public: public:
DonateStrategy(const std::string & agent, IStrategyListener* listener); DonateStrategy(const std::string & agent, IStrategyListener* listener);
bool reschedule(); bool reschedule(const bool isDonate);
inline bool isActive() const override inline bool isActive() const override
{ {
@ -59,7 +59,7 @@ protected:
private: private:
bool m_active; bool m_active;
bool m_suspended; bool m_starting;
Client* m_client; Client* m_client;
IStrategyListener* m_listener; IStrategyListener* m_listener;
uint64_t m_donateTicks; uint64_t m_donateTicks;