/// <summary> /// Send RPC to get JSON DAta /// </summary> /// <param name="rpcName">name of RPC method</param> /// <param name="ps">params send to RPC</param> /// <returns></returns> public ReturnObject EthereumSendRPC(EthereumRpcList.RpcName rpcName, Object[] ps = null) { try { //Console.WriteLine("=====================" + RpcName + "======================="); // Set a default policy level for the "http:" and "https" schemes. HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default); HttpWebRequest.DefaultCachePolicy = policy; var httpWebRequest = (HttpWebRequest)WebRequest.Create(EndPointUrl); // Define a cache policy for this request only. HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); httpWebRequest.CachePolicy = noCachePolicy; httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; //EthRPCJson.Sender _sender = new EthRPCJson.Sender() //{ // id = "1", // jsonrpc = "2.0", // method = "eth_accounts" //}; EthRpcJson.Sender sender = EthereumRpcList.GetSender(rpcName); if (ps != null) { sender.Param = ps; } using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = sender.GetJSon(); //Console.WriteLine(json); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } //Console.WriteLine("FROM CACHE:" + httpWebRequest.GetResponse().IsFromCache); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); //if (httpResponse == null) // Console.WriteLine("No response from ETH node"); //Console.WriteLine("IsFromCache? {0}", httpResponse.IsFromCache); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); //EthRPCJson.Getter _getter = new EthRPCJson.Getter(result); //Console.WriteLine(result); //Console.WriteLine("FROM CACHE:" + httpWebRequest.GetResponse().IsFromCache); return(new ReturnObject { Status = Status.STATUS_COMPLETED, //Message = _getter, Data = result, }); } } catch (Exception e) { return(new ReturnObject { Status = Status.STATUS_ERROR, Message = e.Message }); } }
/// <summary> /// Send RPC to get JSON DAta /// </summary> /// <param name="rpcName">name of RPC method</param> /// <param name="ps">params send to RPC</param> /// <returns></returns> public ReturnObject EthereumSendRPC(EthereumRpcList.RpcName rpcName, Object[] ps = null) { try { //Console.WriteLine("=====================" + RpcName + "======================="); // Set a default policy level for the "http:" and "https" schemes. HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default); HttpWebRequest.DefaultCachePolicy = policy; var httpWebRequest = (HttpWebRequest)WebRequest.Create(EndPointUrl); // Define a cache policy for this request only. HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore); httpWebRequest.CachePolicy = noCachePolicy; httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; //}; EthRpcJson.Sender sender = EthereumRpcList.GetSender(rpcName); if (ps != null) { sender.Param = ps; } using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { string json = sender.GetJSon(); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var result = streamReader.ReadToEnd(); var results = JsonHelper.DeserializeObject <JObject>(result); if (!results.ContainsKey("error")) { return(new ReturnObject { Status = Status.STATUS_COMPLETED, Data = results["result"].ToString() }); } return(new ReturnObject { Status = Status.STATUS_ERROR, Message = results["error"].ToString() }); } } catch (Exception e) { return(new ReturnObject { Status = Status.STATUS_ERROR, Message = e.Message }); } }