summaryrefslogtreecommitdiffstats
path: root/xmrstak/misc/executor.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'xmrstak/misc/executor.hpp')
-rw-r--r--xmrstak/misc/executor.hpp43
1 files changed, 25 insertions, 18 deletions
diff --git a/xmrstak/misc/executor.hpp b/xmrstak/misc/executor.hpp
index d705c27..11c8206 100644
--- a/xmrstak/misc/executor.hpp
+++ b/xmrstak/misc/executor.hpp
@@ -5,12 +5,14 @@
#include "xmrstak/backend/iBackend.hpp"
#include "xmrstak/misc/environment.hpp"
#include "xmrstak/net/msgstruct.hpp"
+#include "xmrstak/donate-level.hpp"
#include <atomic>
#include <array>
#include <list>
+#include <vector>
#include <future>
-
+#include <chrono>
class jpsock;
@@ -42,10 +44,6 @@ public:
void push_timed_event(ex_event&& ev, size_t sec);
void log_result_error(std::string&& sError);
- constexpr static size_t invalid_pool_id = 0;
- constexpr static size_t dev_pool_id = 1;
- constexpr static size_t usr_pool_id = 2;
-
private:
struct timed_event
{
@@ -55,6 +53,8 @@ private:
timed_event(ex_event&& ev, size_t ticks) : event(std::move(ev)), ticks_left(ticks) {}
};
+ inline void set_timestamp() { dev_timestamp = get_timestamp(); };
+
// In miliseconds, has to divide a second (1000ms) into an integer number
constexpr static size_t iTickTime = 500;
@@ -62,6 +62,17 @@ private:
// We will divide up this period according to the config setting
constexpr static size_t iDevDonatePeriod = 100 * 60;
+ inline bool is_dev_time()
+ {
+ //Add 2 seconds to compensate for connect
+ constexpr size_t dev_portion = double(iDevDonatePeriod) * fDevDonationLevel + 2;
+
+ if(dev_portion < 12) //No point in bothering with less than 10s
+ return false;
+
+ return (get_timestamp() - dev_timestamp) % iDevDonatePeriod >= (iDevDonatePeriod - dev_portion);
+ };
+
std::list<timed_event> lTimedEvents;
std::mutex timed_event_mutex;
thdq<ex_event> oEventQ;
@@ -69,15 +80,14 @@ private:
xmrstak::telemetry* telem;
std::vector<xmrstak::iBackend*>* pvThreads;
- size_t current_pool_id;
+ size_t current_pool_id = invalid_pool_id;
+ size_t last_usr_pool_id = invalid_pool_id;
+ size_t dev_timestamp;
- jpsock* usr_pool;
- jpsock* dev_pool;
+ std::list<jpsock> pools;
jpsock* pick_pool_by_id(size_t pool_id);
- bool is_dev_time;
-
executor();
void ex_main();
@@ -101,8 +111,6 @@ private:
std::promise<void> httpReady;
std::mutex httpMutex;
- size_t iReconnectAttempts = 0;
-
struct sck_error_log
{
std::chrono::system_clock::time_point time;
@@ -171,17 +179,16 @@ private:
double fHighestHps = 0.0;
- void log_socket_error(std::string&& sError);
+ void log_socket_error(jpsock* pool, std::string&& sError);
void log_result_ok(uint64_t iActualDiff);
- void sched_reconnect();
-
void on_sock_ready(size_t pool_id);
- void on_sock_error(size_t pool_id, std::string&& sError);
+ void on_sock_error(size_t pool_id, std::string&& sError, bool silent);
void on_pool_have_job(size_t pool_id, pool_job& oPoolJob);
void on_miner_result(size_t pool_id, job_result& oResult);
- void on_reconnect(size_t pool_id);
- void on_switch_pool(size_t pool_id);
+ void connect_to_pools(std::list<jpsock*>& eval_pools);
+ bool get_live_pools(std::vector<jpsock*>& eval_pools, bool is_dev);
+ void eval_pool_choice();
inline size_t sec_to_ticks(size_t sec) { return sec * (1000 / iTickTime); }
};
OpenPOWER on IntegriCloud