void RPCMinerClient::Run(const std::string &url, const std::string &user, const std::string &password, const int threadcount) { m_running=true; m_done=false; m_url=url; m_user=user; m_password=password; m_threadcount=threadcount; int64 lastrequestedwork=GetTimeMillis()-5000; int64 laststats=GetTimeMillis()-25000; m_lasttarget=0; m_lasthashdisplay=GetTimeMillis(); int64 timenowmillis; static unsigned int counter=0u; std::cout << "Client will start " << m_threadcount << " miner threads" << std::endl; std::cout << "Work will be refreshed every " << m_workrefreshms << " ms" << std::endl; while(Done()==false && HasError() == false) { if(m_minerthreads.RunningThreadCount()<m_threadcount) { int nextDeviceIndex = m_minerthreads.LastDeviceIndex() + 1; m_minerthreads.Start(new threadtype(nextDeviceIndex)); } /* if(lastrequestedwork<=GetTimeMillis()-m_workrefreshms) { SendWorkRequest(); lastrequestedwork=GetTimeMillis(); } */ if(m_serverstatsurl!="" && laststats<=GetTimeMillis()-60000) { json_spirit::Object statsobj; if(GetServerStats(statsobj)) { PrintServerStats(statsobj); } laststats=GetTimeMillis(); } if(m_minerthreads.HaveFoundHash()) { std::cout << GetTimeStr(time(0)) << " Found Hash!" << std::endl; foundhash fhash; m_minerthreads.GetFoundHash(fhash); ++counter; std::cout<<"Hashs found: "<<counter<<std::endl; SendFoundHash(fhash.m_blockid,fhash.m_nonce); SendWorkRequest(); lastrequestedwork=GetTimeMillis(); } CleanupOldBlocks(); if(lastrequestedwork<=GetTimeMillis()-m_workrefreshms) { SendWorkRequest(); lastrequestedwork=GetTimeMillis(); } timenowmillis=GetTimeMillis(); if(m_hashraterefresh>0 && (m_lasthashdisplay+m_hashraterefresh)<=timenowmillis) { int64 hr=GetHashRate(true); if(m_blocklookup.size()>0) { std::cout << hr << " khash/s" << std::endl; } else { if(m_startuptime+30000<timenowmillis) { std::cout << "No blocks are being hashed right now. This can happen if the application is" << std::endl; std::cout << "still starting up, you supplied incorrect parameters, or there is a" << std::endl; std::cout << "communications error connecting to the RPC server." << std::endl; m_minerthreads.ClearWork(); } } } Sleep(10); } m_running=false; }
void RemoteMinerClient::Run(const std::string &server, const std::string &port, const std::string &password, const std::string &address, const int threadcount) { int64 lastrequestedwork=GetTimeMillis(); //debug int64 starttime=0; int64 hashcount=0; int64 lastdisplay=0; std::cout << "Client will start " << threadcount << " miner threads" << std::endl; while(true) { if(IsConnected()==false) { m_minerthreads.Stop(); std::cout << "Attempting to connect to " << server << ":" << port << std::endl; Sleep(1000); if(Connect(server,port)) { m_minerthreads.Start(new threadtype); m_gotserverhello=false; std::cout << "Connected to " << server << ":" << port << std::endl; SendClientHello(password,address); lastrequestedwork=GetTimeMillis(); //debug starttime=GetTimeMillis(); } } else { Update(); while(MessageReady() && !ProtocolError()) { RemoteMinerMessage message; if(ReceiveMessage(message)) { if(message.GetValue().type()==json_spirit::obj_type) { HandleMessage(message); } else { std::cout << "Unexpected json type sent by server. Disconnecting." << std::endl; Disconnect(); } } } if(ProtocolError()) { std::cout << "Protocol error. Disconnecting." << std::endl; Disconnect(); } if(m_minerthreads.RunningThreadCount()<threadcount) { m_minerthreads.Start(new threadtype); } if(m_minerthreads.HaveFoundHash()) { std::cout << "Found Hash!" << std::endl; RemoteMinerThread::foundhash fhash; m_minerthreads.GetFoundHash(fhash); SendFoundHash(fhash.m_blockid,fhash.m_nonce); SendWorkRequest(); } while(m_minerthreads.HaveHashResult()) { RemoteMinerThread::hashresult hresult; m_minerthreads.GetHashResult(hresult); SendMetaHash(hresult.m_blockid,hresult.m_metahashstartnonce,hresult.m_metahashdigest,hresult.m_besthash,hresult.m_besthashnonce); //debug //std::cout << "sent result " << hresult.m_blockid << " " << hresult.m_metahashstartnonce << " " << hresult.m_besthashnonce << std::endl; hashcount+=m_metahashsize; if(hresult.m_metahashstartnonce>4000000000 && (lastrequestedwork+5000)<GetTimeMillis()) { std::cout << "Requesting a new block " << GetTimeMillis() << std::endl; SendWorkRequest(); lastrequestedwork=GetTimeMillis(); } } if(m_minerthreads.NeedWork()) { if((lastrequestedwork+6000)<GetTimeMillis()) { std::cout << "Requesting a new block " << GetTimeMillis() << std::endl; SendWorkRequest(); lastrequestedwork=GetTimeMillis(); } } //debug if(lastdisplay+10000<=GetTimeMillis()) { if(((GetTimeMillis()-starttime)/1000)>0) { //std::cout << hashcount/((GetTimeMillis()-starttime)/1000) << std::endl; //std::cout << "sendsize=" << m_sendbuffer.size() << std::endl; lastdisplay=GetTimeMillis(); } } } } }