[browser][debugger] Clean up MessageId logic to prepare for sessions in the test...
authorLarry Ewing <lewing@microsoft.com>
Tue, 20 Oct 2020 18:31:33 +0000 (13:31 -0500)
committerGitHub <noreply@github.com>
Tue, 20 Oct 2020 18:31:33 +0000 (13:31 -0500)
* Clean up MessageId logic

* Update src/mono/wasm/debugger/DebuggerTestSuite/InspectorClient.cs

Co-authored-by: Ankit Jain <radical@gmail.com>
* Update src/mono/wasm/debugger/DebuggerTestSuite/InspectorClient.cs

Co-authored-by: Ankit Jain <radical@gmail.com>
* Update src/mono/wasm/debugger/DebuggerTestSuite/InspectorClient.cs

Co-authored-by: Ankit Jain <radical@gmail.com>
Co-authored-by: Ankit Jain <radical@gmail.com>
src/mono/wasm/debugger/BrowserDebugProxy/DevToolsProxy.cs
src/mono/wasm/debugger/DebuggerTestSuite/DevToolsClient.cs
src/mono/wasm/debugger/DebuggerTestSuite/InspectorClient.cs

index ade381d..204e9b7 100644 (file)
@@ -195,9 +195,9 @@ namespace Microsoft.WebAssembly.Diagnostics
             Log("protocol", $"browser: {msg}");
 
             if (res["id"] == null)
-                pending_ops.Add(OnEvent(new SessionId(res["sessionId"]?.Value<string>()), res["method"].Value<string>(), res["params"] as JObject, token));
+                pending_ops.Add(OnEvent(res.ToObject<SessionId>(), res["method"].Value<string>(), res["params"] as JObject, token));
             else
-                OnResponse(new MessageId(res["sessionId"]?.Value<string>(), res["id"].Value<int>()), Result.FromJson(res));
+                OnResponse(res.ToObject<MessageId>(), Result.FromJson(res));
         }
 
         private void ProcessIdeMessage(string msg, CancellationToken token)
@@ -206,8 +206,9 @@ namespace Microsoft.WebAssembly.Diagnostics
             if (!string.IsNullOrEmpty(msg))
             {
                 var res = JObject.Parse(msg);
+                var id = res.ToObject<MessageId>();
                 pending_ops.Add(OnCommand(
-                    new MessageId(res["sessionId"]?.Value<string>(), res["id"].Value<int>()),
+                    id,
                     res["method"].Value<string>(),
                     res["params"] as JObject, token));
             }
index 5caae92..b8fbac8 100644 (file)
@@ -19,7 +19,7 @@ namespace Microsoft.WebAssembly.Diagnostics
         TaskCompletionSource<bool> side_exit = new TaskCompletionSource<bool>();
         List<byte[]> pending_writes = new List<byte[]>();
         Task current_write;
-        readonly ILogger logger;
+        protected readonly ILogger logger;
 
         public DevToolsClient(ILogger logger)
         {
@@ -158,10 +158,5 @@ namespace Microsoft.WebAssembly.Diagnostics
 
             return false;
         }
-
-        protected virtual void Log(string priority, string msg)
-        {
-            //
-        }
     }
 }
index 7a8e1c8..e461300 100644 (file)
@@ -13,7 +13,7 @@ namespace Microsoft.WebAssembly.Diagnostics
 {
     internal class InspectorClient : DevToolsClient
     {
-        List<(int, TaskCompletionSource<Result>)> pending_cmds = new List<(int, TaskCompletionSource<Result>)>();
+        Dictionary<MessageId, TaskCompletionSource<Result>> pending_cmds = new Dictionary<MessageId, TaskCompletionSource<Result>>();
         Func<string, JObject, CancellationToken, Task> onEvent;
         int next_cmd_id;
 
@@ -22,18 +22,15 @@ namespace Microsoft.WebAssembly.Diagnostics
         Task HandleMessage(string msg, CancellationToken token)
         {
             var res = JObject.Parse(msg);
-            if (res["id"] == null)
-                DumpProtocol(string.Format("Event method: {0} params: {1}", res["method"], res["params"]));
-            else
-                DumpProtocol(string.Format("Response id: {0} res: {1}", res["id"], res));
 
             if (res["id"] == null)
                 return onEvent(res["method"].Value<string>(), res["params"] as JObject, token);
-            var id = res["id"].Value<int>();
-            var idx = pending_cmds.FindIndex(e => e.Item1 == id);
-            var item = pending_cmds[idx];
-            pending_cmds.RemoveAt(idx);
-            item.Item2.SetResult(Result.FromJson(res));
+
+            var id = res.ToObject<MessageId>();
+            if (!pending_cmds.Remove(id, out var item))
+                logger.LogError($"Unable to find command {id}");
+
+            item.SetResult(Result.FromJson(res));
             return null;
         }
 
@@ -49,6 +46,9 @@ namespace Microsoft.WebAssembly.Diagnostics
         }
 
         public Task<Result> SendCommand(string method, JObject args, CancellationToken token)
+            => SendCommand(new SessionId(null), method, args, token);
+
+        public Task<Result> SendCommand(SessionId sessionId, string method, JObject args, CancellationToken token)
         {
             int id = ++next_cmd_id;
             if (args == null)
@@ -62,20 +62,13 @@ namespace Microsoft.WebAssembly.Diagnostics
             });
 
             var tcs = new TaskCompletionSource<Result>();
-            pending_cmds.Add((id, tcs));
+            pending_cmds[new MessageId(sessionId.sessionId, id)] = tcs;
 
             var str = o.ToString();
-            //Log ("protocol", $"SendCommand: id: {id} method: {method} params: {args}");
 
             var bytes = Encoding.UTF8.GetBytes(str);
             Send(bytes, token);
             return tcs.Task;
         }
-
-        protected virtual void DumpProtocol(string msg)
-        {
-            // Console.WriteLine (msg);
-            //XXX make logging not stupid
-        }
     }
 }