1212#include " current.h"
1313#include " model/configuration.h"
1414
15+ #define NETWORK_BUFFER_SIZE 2048
16+ #define NETWORK_TIMEOUT 1000 * 60
17+ #define NETWORK_DELAY 1222
18+ #define NETWORK_WIFI_ATTEMPTS 2
19+ #define NETWORK_STRATUM_ATTEMPTS 2
20+ #define MAX_PAYLOAD_SIZE 256
21+ #define MAX_PAYLOADS 10
22+
1523WiFiClient client = WiFiClient();
1624char TAG_NETWORK[8 ] = " Network" ;
1725uint64_t id = 0 ;
@@ -21,12 +29,8 @@ uint32_t authorizeId = 0;
2129uint8_t isAuthorized = 0 ;
2230uint8_t isListening = 0 ;
2331extern Configuration configuration;
24-
25- #define NETWORK_BUFFER_SIZE 2048
26- #define NETWORK_TIMEOUT 1000 * 60
27- #define NETWORK_DELAY 1222
28- #define NETWORK_WIFI_ATTEMPTS 2
29- #define NETWORK_STRATUM_ATTEMPTS 2
32+ char payloads[MAX_PAYLOADS][MAX_PAYLOAD_SIZE]; // Array of payloads
33+ size_t payloads_count = 0 ;
3034
3135/* *
3236 * @brief Generates the next ID for the network.
@@ -367,25 +371,38 @@ short network_getJob()
367371 return 1 ;
368372}
369373
374+ void enqueue (const char *payload) {
375+ if (payloads_count < MAX_PAYLOADS) {
376+ strncpy (payloads[payloads_count], payload, MAX_PAYLOAD_SIZE - 1 );
377+ payloads_count++;
378+ l_debug (TAG_NETWORK, " Payload queued: %s" , payload);
379+ } else {
380+ l_error (TAG_NETWORK, " Payload queue is full" );
381+ }
382+ }
383+
370384void network_send (const std::string &job_id, const std::string &extranonce2, const std::string &ntime, const uint32_t &nonce)
371385{
372- char payload[256 ];
386+ char payload[MAX_PAYLOAD_SIZE ];
373387 snprintf (payload, sizeof (payload), " {\" id\" :%llu,\" method\" :\" mining.submit\" ,\" params\" :[\" %s\" ,\" %s\" ,\" %s\" ,\" %s\" ,\" %08x\" ]}\n " , nextId (), configuration.wallet_address .c_str (), job_id.c_str (), extranonce2.c_str (), ntime.c_str (), nonce);
374- request (payload);
375388#if defined(ESP8266)
376389 network_listen ();
390+ request (payload);
391+ #else
392+ enqueue (payload);
377393#endif
378394}
379395
380396void network_listen ()
381397{
382- #if defined(ESP8266)
398+ #if defined(ESP8266)
383399 if (isListening == 1 )
384400 {
385401 return ;
386402 }
387403 isListening = 1 ;
388- #endif
404+ #endif
405+
389406 int len = 0 ;
390407 isConnected ();
391408 do
@@ -398,18 +415,45 @@ void network_listen()
398415 response (data);
399416 }
400417 } while (len > 0 );
401- #if defined(ESP8266)
418+
419+ #if defined(ESP8266)
402420 isListening = 0 ;
403- #endif
421+ #endif
422+ }
423+
424+ void network_submit (const char *payload) {
425+ if (isConnected () == -1 ) {
426+ return ; // Handle connection failure
427+ }
428+
429+ request (payload);
430+
431+ // Remove the submitted payload from the array
432+ for (size_t i = 0 ; i < payloads_count; ++i) {
433+ if (strcmp (payloads[i], payload) == 0 ) {
434+ // Shift remaining payloads
435+ for (size_t j = i; j < payloads_count - 1 ; ++j) {
436+ strcpy (payloads[j], payloads[j+1 ]);
437+ }
438+ payloads_count--;
439+ break ;
440+ }
441+ }
442+ }
443+
444+ void network_submit_all () {
445+ for (size_t i = 0 ; i < payloads_count; ++i) {
446+ network_submit (payloads[i]);
447+ }
404448}
405449
406450#if defined(ESP32)
407- #define NETWORK_TASK_TIMEOUT 600
451+ #define NETWORK_TASK_TIMEOUT 100
408452void networkTaskFunction (void *pvParameters)
409453{
410454 while (1 )
411455 {
412- network_listen ();
456+ network_submit_all ();
413457 network_listen ();
414458 vTaskDelay (NETWORK_TASK_TIMEOUT / portTICK_PERIOD_MS);
415459 }
0 commit comments