/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <ClaymoreTemplate> GetRPCResponse() { var jsonSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore, Culture = CultureInfo.InvariantCulture }; ClaymoreTemplate claymoreTemplate; try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { string get_menu_request = "{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"miner_getstat1\"}\n"; NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(get_menu_request); await serverStream.WriteAsync(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; var totalBytesRead = await serverStream.ReadAsync(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream, 0, totalBytesRead); claymoreTemplate = JsonConvert.DeserializeObject <ClaymoreTemplate>(returndata, jsonSettings); // Close socket clientSocket.Close(); clientSocket = null; return(claymoreTemplate); } else { NLogProcessing.LogInfo($"Could not connect to claymore miner socket on port {ApiPort}"); // Return null object; return(null); } } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from claymore miner on port {ApiPort}"); // Return null object; return(null); } }
/// <summary> /// Call RPC and get response /// </summary> /// <returns></returns> private async Task <DSTMTemplate> GetRPCResponse() { DSTMTemplate dstmTemplate; try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { string get_menu_request = "{\"id\":1, \"method\":\"getstat\"}\n"; NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(get_menu_request); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; await serverStream.ReadAsync(inStream, 0, (int)clientSocket.ReceiveBufferSize); string _returndata = System.Text.Encoding.ASCII.GetString(inStream); string jsonData = _returndata.Substring(0, _returndata.LastIndexOf("}") + 1); dstmTemplate = JsonConvert.DeserializeObject <DSTMTemplate>(jsonData); // Close socket clientSocket.Close(); clientSocket = null; return(dstmTemplate); } else { NLogProcessing.LogInfo($"Could not connect to DSTM miner socket on port {ApiPort}"); // Return null object; return(null); } } catch (Exception e) { NLogProcessing.LogError(e, $"Error reading RPC call from DSTM miner on port {ApiPort}"); // Return null object; return(null); } }
private async Task <MinerMonitorStat> GetRPCResponse() { MinerMonitorStat minerMonitorStat = new MinerMonitorStat(); try { var clientSocket = new TcpClient(); if (clientSocket.ConnectAsync(HostName, ApiPort).Wait(5000)) { //string get_menu_request = "{\"id\":1, \"method\":\"getstat\"}\n"; //string get_menu_request = "{\"id\":0,\"jsonrpc\":\"2.0\",\"method\":\"miner_getstat1\"}\n"; string get_menu_request = "summary"; NetworkStream serverStream = clientSocket.GetStream(); byte[] outStream = System.Text.Encoding.ASCII.GetBytes(get_menu_request); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] inStream = new byte[clientSocket.ReceiveBufferSize]; await serverStream.ReadAsync(inStream, 0, (int)clientSocket.ReceiveBufferSize); string returndata = System.Text.Encoding.ASCII.GetString(inStream); string[] jsonData = returndata.Split(','); //ewbfTemplate = JsonConvert.DeserializeObject<EWBFTemplate>(jsonData); // Close socket clientSocket.Close(); clientSocket = null; } else { NLogProcessing.LogInfo($"Could not connect to EWBF miner socket on port {ApiPort}"); // Return null object; return(null); } //var dictHW = PruvotApi.GetHwInfo(HostName, ApiPort); //var dictHist = PruvotApi.GetHistory(HostName, ApiPort); minerMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; minerMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); minerMonitorStat.CoinType = CoinType; minerMonitorStat.MinerBaseType = MinerBaseType; var gpuList = new List <int> [0, 1, 2]; //(from element in dictHist // orderby element["GPU"] ascending // select element["GPU"]).Distinct(); List <GPUMonitorStat> gpuMonitorStatList = new List <GPUMonitorStat>(); foreach (var gpuNumber in gpuList) { //var gpuHash = (from element in dictHist // orderby element["GPU"] ascending, element["TS"] descending // where element["GPU"] == gpuNumber // select element).FirstOrDefault(); //var gpuHw = (from hw in dictHW // where hw["GPU"] == gpuNumber // select hw).FirstOrDefault(); // Create new GPU monitor stats object and map values GPUMonitorStat gpuMonitorStat = new GPUMonitorStat(); gpuMonitorStat.AccountGuid = (Guid)Application.Current.Properties["AccountID"]; gpuMonitorStat.WorkerName = Application.Current.Properties["WorkerName"].ToString(); gpuMonitorStat.CoinType = CoinType.ToString(); gpuMonitorStat.GPUID = Convert.ToInt32(gpuNumber); //gpuMonitorStat.HashRate = (Convert.ToDecimal(gpuHash["KHS"])); //gpuMonitorStat.FanSpeed = Convert.ToInt16(gpuHw["FAN"]); //gpuMonitorStat.Temp = (short)Convert.ToDecimal(gpuHw["TEMP"]); //gpuMonitorStat.Power = (short)(Convert.ToDecimal(gpuHw["POWER"]) / 1000); gpuMonitorStat.HardwareType = Hardware; // Sum up power and hashrate minerMonitorStat.Power += (short)gpuMonitorStat.Power; minerMonitorStat.HashRate += gpuMonitorStat.HashRate; // Add GPU stats to list gpuMonitorStatList.Add(gpuMonitorStat); } // Set list of GPU monitor stats minerMonitorStat.GPUMonitorStatList = gpuMonitorStatList; return(await Task.Run(() => { return minerMonitorStat; })); } catch (Exception ex) { NLogProcessing.LogError(ex, "Error calling GetRPCResponse from miner."); // Return null object; return(null); } }