using System.Net.Http.Json;
using System.Text.Json;
namespace Synor.Sdk.Mining;
///
/// Synor Mining SDK client for C#.
/// Pool connections, block templates, hashrate stats, and GPU management.
///
public class SynorMining : IDisposable
{
private readonly MiningConfig _config;
private readonly HttpClient _httpClient;
private readonly JsonSerializerOptions _jsonOptions;
private bool _disposed;
private StratumConnection? _activeConnection;
public SynorMining(MiningConfig config)
{
_config = config;
_httpClient = new HttpClient { BaseAddress = new Uri(config.Endpoint), Timeout = config.Timeout };
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {config.ApiKey}");
_httpClient.DefaultRequestHeaders.Add("X-SDK-Version", "csharp/0.1.0");
_jsonOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNameCaseInsensitive = true };
}
// ==================== Pool Operations ====================
public async Task ConnectAsync(PoolConfig pool, CancellationToken ct = default)
{
var body = new Dictionary { ["url"] = pool.Url, ["user"] = pool.User };
if (pool.Password != null) body["password"] = pool.Password;
if (pool.Algorithm != null) body["algorithm"] = pool.Algorithm;
if (pool.Difficulty != null) body["difficulty"] = pool.Difficulty;
_activeConnection = await PostAsync("/pool/connect", body, ct);
return _activeConnection;
}
public async Task DisconnectAsync(CancellationToken ct = default)
{
if (_activeConnection == null) return;
await PostAsync