コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        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);
            }
        }