Implemented donate over proxy.

This commit is contained in:
XMRig 2019-03-19 21:31:54 +07:00
parent 0907d1eb0c
commit 4c95136e6a
9 changed files with 161 additions and 55 deletions

View file

@ -44,15 +44,20 @@ class Controller;
class IStrategyListener;
class DonateStrategy : public IStrategy, public IStrategyListener, public ITimerListener
class DonateStrategy : public IStrategy, public IStrategyListener, public ITimerListener, public IClientListener
{
public:
DonateStrategy(Controller *controller, IStrategyListener *listener);
~DonateStrategy() override;
public:
inline bool isActive() const override { return state() == STATE_ACTIVE; }
inline void resume() override {}
protected:
inline bool isActive() const override { return state() == STATE_ACTIVE; }
inline Client *client() const override { return m_proxy ? m_proxy : m_strategy->client(); }
inline void onJob(IStrategy *, Client *client, const Job &job) override { setJob(client, job); }
inline void onJobReceived(Client *client, const Job &job, const rapidjson::Value &) override { setJob(client, job); }
inline void onResultAccepted(Client *client, const SubmitResult &result, const char *error) override { setResult(client, result, error); }
inline void onResultAccepted(IStrategy *, Client *client, const SubmitResult &result, const char *error) override { setResult(client, result, error); }
inline void resume() override {}
int64_t submit(const JobResult &result) override;
void connect() override;
@ -60,11 +65,13 @@ public:
void stop() override;
void tick(uint64_t now) override;
protected:
void onActive(IStrategy *strategy, Client *client) override;
void onJob(IStrategy *strategy, Client *client, const Job &job) override;
void onPause(IStrategy *strategy) override;
void onResultAccepted(IStrategy *strategy, Client *client, const SubmitResult &result, const char *error) override;
void onClose(Client *client, int failures) override;
void onLogin(Client *client, rapidjson::Document &doc, rapidjson::Value &params) override;
void onLoginSuccess(Client *client) override;
void onTimer(const Timer *timer) override;
private:
@ -78,9 +85,14 @@ private:
inline State state() const { return m_state; }
Client *createProxy();
void idle(double min, double max);
void setJob(Client *client, const Job &job);
void setResult(Client *client, const SubmitResult &result, const char *error);
void setState(State state);
bool m_tls;
char m_userId[65];
Client *m_proxy;
const uint64_t m_donateTime;
const uint64_t m_idleTime;
@ -91,7 +103,7 @@ private:
std::vector<Pool> m_pools;
Timer *m_timer;
uint64_t m_now;
uint64_t m_stop;
uint64_t m_timestamp;
};