/// <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&lt;T&gt; </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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #4
0
 /// <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));
 }
Beispiel #5
0
 /// <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));
 }
Beispiel #6
0
 /// <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));
 }
Beispiel #7
0
 /// <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);
 }
Beispiel #8
0
        /// <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&lt;T&gt; </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);
        }