X-Git-Url: https://git.novaco.in/?p=StratumLibrary.git;a=blobdiff_plain;f=StratumLibrary%2FStratum.cs;h=30ca0bcd86734cdee5cd6222de47ed8cc71ead76;hp=722abdacc2dae2f1070551c8ec0235f495917790;hb=27ffb176358e7959320a5be4d916a862a55cff37;hpb=4a8b5eb7cc482da2c1eefd4691879c03c3482dd9 diff --git a/StratumLibrary/Stratum.cs b/StratumLibrary/Stratum.cs index 722abda..30ca0bc 100644 --- a/StratumLibrary/Stratum.cs +++ b/StratumLibrary/Stratum.cs @@ -9,9 +9,13 @@ using System.Collections.Generic; namespace Stratum { + delegate void NotificationCallback(out object[] notificationData); + public class Stratum { private Socket client; + + object responsesLock = new object(); private Dictionary responses = new Dictionary(); ManualResetEvent gotResponse = new ManualResetEvent(false); @@ -94,6 +98,22 @@ namespace Stratum /// /// Return type /// Method name + /// StratumResponse object + public StratumResponse Invoke(string method) + { + var req = new StratumRequest() + { + Method = method, + Params = new object[] { } + }; + return Invoke(req); + } + + /// + /// Invoke remote method + /// + /// Return type + /// Method name /// Argument /// StratumResponse object public StratumResponse Invoke(string method, object arg) @@ -129,16 +149,22 @@ namespace Stratum var reqJSON = Newtonsoft.Json.JsonConvert.SerializeObject(stratumReq) + '\n'; var reqId = (string) stratumReq.Id; + string strResponse = ""; + StratumResponse responseObj = null; + // Send JSON data to the remote device. Send(client, reqJSON); // Wait for response gotResponse.WaitOne(); - // Deserialize the response - string strResponse = responses[reqId]; - StratumResponse responseObj = Newtonsoft.Json.JsonConvert.DeserializeObject>(strResponse); - responses.Remove(reqId); + lock (responsesLock) + { + // Deserialize the response + strResponse = responses[reqId]; + responses.Remove(reqId); + } + responseObj = Newtonsoft.Json.JsonConvert.DeserializeObject>(strResponse); // Reset the state gotResponse.Reset(); @@ -195,7 +221,10 @@ namespace Stratum if (!String.IsNullOrEmpty(requestId)) { - responses.Add(requestId, strMessage); + lock (responsesLock) + { + responses.Add(requestId, strMessage); + } gotResponse.Set(); }