/// <summary> API call. </summary> /// /// <remarks> Paul, 19/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A Task<T> </returns> async public Task <T> ApiCall <T>(GrapheneMethods method, GrapheneApi api, params object[] args) { TaskCompletionSource <T> task = new TaskCompletionSource <T>(); EventHandler <string> onMessage = null; int id = -1; onMessage = (object sender, string message) => { GrapheneSocketResponse <T> decoded = JsonSerializer.DeserializeFromString <GrapheneSocketResponse <T> >(message); if (decoded.id == id) { m_socket.OnMessage -= onMessage; if (decoded.error != null) { task.SetException(new GrapheneRpcException(new GrapheneError { message = decoded.error })); } else { task.SetResult(decoded.result); } } }; m_socket.OnMessage += onMessage; id = m_socket.Send(method, m_apiMap[api], args); return(await task.Task); }
/// <summary> API call synchronise. </summary> /// /// <remarks> Paul, 23/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public T ApiCallSync <T>(GrapheneMethodEnum method, GrapheneApi api, params object[] args) { Task <T> t = Task.Run <T>(() => { return(ApiCall <T>(method, api, args)); }); bool sucesss = t.Wait(kTimeoutSeconds * 1000); if (!sucesss) { throw new TimeoutException(); } return(t.Result); }
/// <summary> API call synchronise. </summary> /// /// <remarks> Paul, 23/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public T ApiCallSync <T>(GrapheneMethods method, GrapheneApi api, params object[] args) { int outer = System.Threading.Thread.CurrentThread.ManagedThreadId; Task <T> t = Task.Run <T>(() => { if (System.Threading.Thread.CurrentThread.ManagedThreadId == outer) { throw new NotImplementedException(); } return(ApiCall <T>(method, api, args)); }); bool sucesss = t.Wait(kTimeoutSeconds * 1000); if (!sucesss) { throw new TimeoutException(); } return(t.Result); }
/// <summary> API call. </summary> /// /// <remarks> Paul, 20/10/2015. </remarks> /// /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public T ApiCall <T>(GrapheneMethods method, GrapheneApi api, params object[] args) { return(m_cliWallet.ApiCallSync <T>(method, api, args)); }
/// <summary> API call. </summary> /// /// <remarks> Paul, 20/10/2015. </remarks> /// /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public async Task <T> ApiCallAsync <T>(GrapheneMethods method, GrapheneApi api, params object[] args) { return(await m_cliWallet.ApiCall <T>(method, api, args)); }
/// <summary> API call blockchain. </summary> /// /// <remarks> Paul, 23/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public T ApiCallBlockchain <T>(GrapheneMethods method, GrapheneApi api, params object[] args) { return(m_blockchain.ApiCallSync <T>(method, api, args)); }
/// <summary> API call blockchain. </summary> /// /// <remarks> Paul, 23/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A T. </returns> public T ApiCallBlockchain <T>(GrapheneMethodEnum method, GrapheneApi api, params object[] args) { return(m_cliWallet.ApiCallSync <T>(method, api, args)); //return m_blockchain.ApiCallSync<T>(method, api, args); }
/// <summary> API call. </summary> /// /// <remarks> Paul, 19/10/2015. </remarks> /// /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="method"> The method. </param> /// <param name="args"> A variable-length parameters list containing arguments. </param> /// /// <returns> A Task<T> </returns> async public Task <T> ApiCall <T> (GrapheneMethodEnum method, GrapheneApi api, params object[] args) { TaskCompletionSource <T> task = new TaskCompletionSource <T>(); EventHandler <string> onMessage = null; int id = -1; onMessage = (object sender, string message) => { var conv1 = new DictionaryTwoArrayConverter <GrapheneOperation>(new List <JsonConverter>()); var conv2 = new DictionaryTwoArrayConverter <GrapheneTransactionRecord <GrapheneOperation> >(new List <JsonConverter>() { conv1 }); var conv3 = new DictionaryTwoArrayConverter <GrapheneAssetCreator>(new List <JsonConverter>()); var conv4 = new DictionaryTwoArrayConverter <GrapheneTransactionRecord <GrapheneAssetCreator> >(new List <JsonConverter>() { conv3 }); var conv5 = new DictionaryTwoArrayConverter <GrapheneAssetIssued>(new List <JsonConverter>()); var conv6 = new DictionaryTwoArrayConverter <GrapheneTransactionRecord <GrapheneAssetIssued> >(new List <JsonConverter>() { conv5 }); var conv7 = new DictionaryTwoArrayConverter <GrapheneLimitOrderBody>(new List <JsonConverter>()); var conv8 = new DictionaryTwoArrayConverter <GrapheneTransactionRecord <GrapheneLimitOrderBody> >(new List <JsonConverter>() { conv7 }); var conv9 = new DictionaryTwoArrayConverter <GrapheneOperation>(new List <JsonConverter>()); var conv10 = new DictionaryTwoArrayConverter <GrapheneOpContainer <GrapheneOperation> >(new List <JsonConverter>() { conv9 }); var conv11 = new DictionaryTwoArrayConverter <GrapheneOpContainerMain>(new List <JsonConverter>() { conv10 }); try { GrapheneSocketResponse <T> decoded = JsonConvert.DeserializeObject <GrapheneSocketResponse <T> >(message, conv1, conv2, conv3, conv4, conv5, conv6, conv7, conv8, conv9, conv10, conv11 ); if (decoded.Id == id.ToString()) { m_socket.OnMessage -= onMessage; if (decoded.Error != null) { task.SetException(new GrapheneRpcException(decoded.Error.Message)); } else { task.SetResult(decoded.Result); } } } catch (Exception ex) { throw new Exception(string.Concat("Message Received, with error: ", message), ex); } }; if (m_socket != null) { m_socket.OnMessage = null; m_socket.OnMessage += onMessage; id = m_socket.Send(method, m_apiMap[api], args); } return(await task.Task); }