Browse Source

auto reconnect after failure

cl-refactor
Jan Willem Penterman 9 years ago
parent
commit
231c4d9a5a
  1. 43
      libstratum/EthStratumClient.cpp
  2. 1
      libstratum/EthStratumClient.h
  3. BIN
      releases/ethminer-0.9.41-genoil-1.0.4.zip
  4. BIN
      releases/ethminer-0.9.41-genoil-1.0.4b2.zip

43
libstratum/EthStratumClient.cpp

@ -38,10 +38,22 @@ void EthStratumClient::connect()
} }
void EthStratumClient::reconnect()
{
m_socket.close();
m_io_service.reset();
m_authorized = false;
cnote << "Reconnecting in 3 seconds...";
boost::asio::deadline_timer timer(m_io_service, boost::posix_time::seconds(3));
timer.wait();
connect();
}
void EthStratumClient::disconnect() void EthStratumClient::disconnect()
{ {
cnote << "Disconnecting"; cnote << "Disconnecting";
m_running = false; m_running = false;
m_socket.close(); m_socket.close();
m_io_service.stop(); m_io_service.stop();
} }
@ -78,7 +90,7 @@ void EthStratumClient::connect_handler(const boost::system::error_code& ec, tcp:
else else
{ {
cwarn << "Could not connect to stratum server " << m_host << ":" << m_port << ", " << ec.message(); cwarn << "Could not connect to stratum server " << m_host << ":" << m_port << ", " << ec.message();
disconnect(); reconnect();
} }
} }
@ -114,30 +126,36 @@ void EthStratumClient::readResponse(const boost::system::error_code& ec, std::si
std::string response; std::string response;
getline(is, response); getline(is, response);
Json::Value responseObject; if (response.front() == '{' && response.back() == '}')
Json::Reader reader;
if (reader.parse(response.c_str(), responseObject))
{ {
processReponse(responseObject); Json::Value responseObject;
m_response = response; Json::Reader reader;
if (reader.parse(response.c_str(), responseObject))
{
processReponse(responseObject);
m_response = response;
}
else
{
cwarn << "Parse response failed: " << reader.getFormattedErrorMessages();
}
} }
else else
{ {
cwarn << "Parse response failed: " << reader.getFormattedErrorMessages(); cwarn << "Discarding incomplete response";
} }
readline();
} }
else else
{ {
cwarn << "Read response failed: " << ec.message(); cwarn << "Read response failed: " << ec.message();
reconnect();
} }
readline();
} }
void EthStratumClient::processReponse(Json::Value& responseObject) void EthStratumClient::processReponse(Json::Value& responseObject)
{ {
Json::Value error = responseObject.get("error", NULL); Json::Value error = responseObject.get("error", new Json::Value);
if (error.isArray()) if (error.isArray())
{ {
string msg = error.get(1, "Unknown error").asString(); string msg = error.get(1, "Unknown error").asString();
@ -167,7 +185,7 @@ void EthStratumClient::processReponse(Json::Value& responseObject)
cnote << "Authorized worker " << m_user; cnote << "Authorized worker " << m_user;
break; break;
case 4: case 4:
if (responseObject.get("result", false).asBool()) if (responseObject.get("result", false).asBool())
cnote << "B-) Submitted and accepted."; cnote << "B-) Submitted and accepted.";
else else
cwarn << ":-( Not accepted."; cwarn << ":-( Not accepted.";
@ -225,6 +243,7 @@ void EthStratumClient::processReponse(Json::Value& responseObject)
} }
break; break;
} }
} }
bool EthStratumClient::submit(EthashProofOfWork::Solution solution) { bool EthStratumClient::submit(EthashProofOfWork::Solution solution) {

1
libstratum/EthStratumClient.h

@ -28,6 +28,7 @@ public:
bool submit(EthashProofOfWork::Solution solution); bool submit(EthashProofOfWork::Solution solution);
private: private:
void connect(); void connect();
void reconnect();
void disconnect(); void disconnect();
void resolve_handler(const boost::system::error_code& ec, tcp::resolver::iterator i); void resolve_handler(const boost::system::error_code& ec, tcp::resolver::iterator i);
void connect_handler(const boost::system::error_code& ec, tcp::resolver::iterator i); void connect_handler(const boost::system::error_code& ec, tcp::resolver::iterator i);

BIN
releases/ethminer-0.9.41-genoil-1.0.4.zip

Binary file not shown.

BIN
releases/ethminer-0.9.41-genoil-1.0.4b2.zip

Binary file not shown.
Loading…
Cancel
Save