|
4 | 4 | use Monolog\Handler\StreamHandler;
|
5 | 5 | use Monolog\Logger;
|
6 | 6 | use RicardoFiorani\DuinoMiner\Configuration;
|
7 |
| -use RicardoFiorani\DuinoMiner\DucoS1Miner; |
| 7 | +use RicardoFiorani\DuinoMiner\Logic\DuinoMinerLogic; |
| 8 | +use RicardoFiorani\DuinoMiner\Miner\DucoS1Miner; |
8 | 9 |
|
9 | 10 | /**
|
10 | 11 | * Configuration
|
|
20 | 21 | */
|
21 | 22 | $logger = new Logger('name');
|
22 | 23 | $logger->pushHandler(new StreamHandler('php://stdout'));
|
23 |
| -$logger->alert('STARTING PHP MINER FOR USER '.$configuration->getUsername()); |
| 24 | +$logger->alert('STARTING PHP MINER', ['user' => $configuration->getUsername()]); |
24 | 25 |
|
25 | 26 | /**
|
26 | 27 | * Miner logic
|
27 | 28 | */
|
28 | 29 | $loop = React\EventLoop\Factory::create();
|
29 |
| -$connector = new React\Socket\Connector($loop); |
30 |
| -$miner = new DucoS1Miner(); |
| 30 | +$connector = new React\Socket\Connector($loop, ['timeout' => 200]); |
| 31 | +$algorithm = new DucoS1Miner(); |
| 32 | +$miner = new DuinoMinerLogic(); |
31 | 33 |
|
32 | 34 | while (true) {
|
33 |
| - $logger->alert(sprintf('Connecting to %s...', $configuration->getPoolAddress())); |
34 |
| - $connector->connect($configuration->getPoolAddress())->then( |
35 |
| - function (React\Socket\ConnectionInterface $connection) use ($logger, $miner, $configuration) { |
36 |
| - // connection successfully established |
37 |
| - $connection->on('data', function ($data) use ($connection, $logger) { |
38 |
| - $logger->info('SERVER SENT: ' . $data); |
39 |
| - |
40 |
| - $arguments = explode(',', $data); |
41 |
| - $event = array_shift($arguments); |
42 |
| - $event = str_replace(array("\r", "\n"), '', $event); |
43 |
| - |
44 |
| - if (in_array($event, ['OK', 'GOOD', 'BAD'])) { |
45 |
| - $connection->emit($event, $arguments); |
46 |
| - $logger->info('EMITTING: ' . $event); |
47 |
| - return; |
48 |
| - } |
49 |
| - |
50 |
| - if(floatval($event) < 5){ |
51 |
| - $logger->info('Connected to server version: ' . floatval($event)); |
52 |
| - |
53 |
| - return; |
54 |
| - } |
55 |
| - |
56 |
| - //Then we know its a job |
57 |
| - $connection->emit('JOB_INCOMING', explode(',', $data)); |
58 |
| - }); |
59 |
| - |
60 |
| - $connection->on('close', function () use ($logger) { |
61 |
| - $logger->warning('[SOCKET CLOSED]'); |
62 |
| - }); |
63 |
| - |
64 |
| - //Based on server response |
65 |
| - $connection->on('OK', function () use ($connection) { |
66 |
| - $connection->emit('TIME_FOR_NEW_JOB'); |
67 |
| - }); |
68 |
| - |
69 |
| - $connection->on('TIME_FOR_NEW_JOB', function () use ($connection, $configuration) { |
70 |
| - $connection->write(sprintf("JOB,%s,MEDIUM", $configuration->getUsername())); |
71 |
| - }); |
72 |
| - |
73 |
| - $connection->on('GOOD', function () use ($connection, $logger) { |
74 |
| - $logger->info('Share Accepted!'); |
75 |
| - $connection->emit('TIME_FOR_NEW_JOB'); |
76 |
| - }); |
77 |
| - |
78 |
| - $connection->on('BAD', function () use ($connection, $logger) { |
79 |
| - $logger->warning('Share NOT ACCEPTED!'); |
80 |
| - $connection->emit('TIME_FOR_NEW_JOB'); |
81 |
| - }); |
82 |
| - |
83 |
| - $connection->on('JOB_INCOMING', function ($baseHash, $digest, $difficulty) use ($connection, $logger, $miner) { |
84 |
| - $logger->info("Starting to work on {$baseHash}:{$digest}:{$difficulty}"); |
85 |
| - |
86 |
| - $start = microtime(true); |
87 |
| - $result = $miner->work((string)$baseHash, (string)$digest, (int)$difficulty); |
88 |
| - $timeDifference = microtime(true) - $start; |
89 |
| - |
90 |
| - $logger->debug('Time difference', [$timeDifference]); |
91 |
| - |
92 |
| - if ($result < 0) { |
93 |
| - $logger->alert('Hash Not Found :('); |
94 |
| - $connection->emit('TIME_FOR_NEW_JOB'); |
95 |
| - return; |
96 |
| - } |
97 |
| - |
98 |
| - $logger->info('FOUND!', ['result' => $result]); |
99 |
| - |
100 |
| - $hashRate = $result / ($timeDifference); |
101 |
| - $logger->info('Current HashRate: ' . round($hashRate, 2) . ' H/s'); |
102 |
| - $connection->write("$result,$hashRate,{$miner->getName()}"); |
103 |
| - }); |
104 |
| - |
105 |
| - //The knot that ties everything together |
106 |
| - $connection->emit('TIME_FOR_NEW_JOB'); |
107 |
| - }, |
108 |
| - function (Exception $error) use ($logger) { |
109 |
| - $logger->error($error->getMessage()); |
110 |
| - } |
111 |
| - ); |
112 |
| - |
113 |
| - $loop->run(); |
114 |
| - |
115 |
| - $logger->alert('Sleeping 60 seconds before trying again...'); |
116 |
| - |
117 |
| - foreach(range(60, 0) as $i ){ |
118 |
| - sleep(1); |
119 |
| - $logger->info(sprintf('%s seconds before trying again.', $i)); |
120 |
| - } |
| 35 | + $miner->run($logger, $loop, $connector, $algorithm, $configuration); |
121 | 36 | }
|
0 commit comments