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()
{
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);

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());
}
if(m_donate && m_donate->isActive() && client->id() != -1 && !m_donate->reschedule())
if(m_donate && m_donate->reschedule(client->id() == -1))
{
return;
}

View file

@ -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)
{
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;
m_active = false;
LOG_NOTICE("Dev donate: finished!");
stop();
m_suspended = false;
}
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();
}
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++;

View file

@ -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;