Add Connected event and default to break state

This commit is contained in:
Yoshi Askharoun
2023-10-11 13:22:33 -05:00
parent 306a7124d8
commit 63fd7848c1
6 changed files with 30 additions and 14 deletions
@@ -2,7 +2,7 @@
public enum InterpreterCommand : byte public enum InterpreterCommand : byte
{ {
Continue,
Break, Break,
Continue,
Step, Step,
} }
+1 -8
View File
@@ -3,15 +3,8 @@ using System;
namespace Microsoft.Iris.Debug; namespace Microsoft.Iris.Debug;
public interface IDebuggerClient public interface IDebuggerClient : IDebuggerState
{ {
/// <summary>
/// The URI the client is connected to.
/// </summary>
Uri ConnectionUri { get; }
InterpreterCommand DebuggerCommand { get; set; }
event Action<InterpreterCommand> InterpreterStateChanged; event Action<InterpreterCommand> InterpreterStateChanged;
/// <summary> /// <summary>
+1 -3
View File
@@ -2,10 +2,8 @@
namespace Microsoft.Iris.Debug; namespace Microsoft.Iris.Debug;
internal interface IDebuggerServer internal interface IDebuggerServer : IDebuggerState
{ {
InterpreterCommand DebuggerCommand { get; set; }
/// <summary> /// <summary>
/// Logs the context, opcode, and operands of an instruction /// Logs the context, opcode, and operands of an instruction
/// decoded by <c>Microsoft.Iris.Markup.Interpreter</c>. /// decoded by <c>Microsoft.Iris.Markup.Interpreter</c>.
@@ -0,0 +1,19 @@
using Microsoft.Iris.Debug.Data;
using System;
namespace Microsoft.Iris.Debug;
public interface IDebuggerState
{
/// <summary>
/// The URI the client is connected to.
/// </summary>
public Uri ConnectionUri { get; }
InterpreterCommand DebuggerCommand { get; set; }
/// <summary>
/// Fired when a connection is established.
/// </summary>
public event Action<IDebuggerState, object> Connected;
}
@@ -12,7 +12,7 @@ public class NetDebuggerClient : IDebuggerClient, IDisposable
private readonly Socket _socket; private readonly Socket _socket;
private readonly ConcurrentQueue<byte[]> _outQueue = new(); private readonly ConcurrentQueue<byte[]> _outQueue = new();
private readonly IFormatter _formatter; private readonly IFormatter _formatter;
private InterpreterCommand _uibCommand = InterpreterCommand.Continue; private InterpreterCommand _uibCommand;
public Uri ConnectionUri { get; } public Uri ConnectionUri { get; }
@@ -31,6 +31,7 @@ public class NetDebuggerClient : IDebuggerClient, IDisposable
public event EventHandler<InterpreterEntry> InterpreterExecute; public event EventHandler<InterpreterEntry> InterpreterExecute;
public event Action<string> DispatcherStep; public event Action<string> DispatcherStep;
public event Action<InterpreterCommand> InterpreterStateChanged; public event Action<InterpreterCommand> InterpreterStateChanged;
public event Action<IDebuggerState, object> Connected;
public NetDebuggerClient(string connectionUri) : this(connectionUri is null ? null : new Uri(connectionUri)) public NetDebuggerClient(string connectionUri) : this(connectionUri is null ? null : new Uri(connectionUri))
{ {
@@ -127,6 +128,8 @@ public class NetDebuggerClient : IDebuggerClient, IDisposable
catch { } catch { }
} }
Connected?.Invoke(this, _socket);
System.Threading.Thread receiveThread = new(MessageReceiveLoop) { IsBackground = true }; System.Threading.Thread receiveThread = new(MessageReceiveLoop) { IsBackground = true };
System.Threading.Thread sendThread = new(MessageSendLoop) { IsBackground = true }; System.Threading.Thread sendThread = new(MessageSendLoop) { IsBackground = true };
receiveThread.Start(); receiveThread.Start();
@@ -15,7 +15,9 @@ internal class NetDebuggerServer : IDebuggerServer, IDisposable
private readonly IFormatter _formatter; private readonly IFormatter _formatter;
private Socket _socket; private Socket _socket;
private bool _disposed = false; private bool _disposed = false;
private InterpreterCommand _uibCommand = InterpreterCommand.Continue; private InterpreterCommand _uibCommand;
public event Action<IDebuggerState, object> Connected;
public Uri ConnectionUri { get; } public Uri ConnectionUri { get; }
@@ -130,6 +132,7 @@ internal class NetDebuggerServer : IDebuggerServer, IDisposable
if (_disposed) return; if (_disposed) return;
_socket = _listener.AcceptSocket(); _socket = _listener.AcceptSocket();
Connected?.Invoke(this, _socket);
System.Threading.Thread receiveThread = new(MessageReceiveLoop) { IsBackground = true }; System.Threading.Thread receiveThread = new(MessageReceiveLoop) { IsBackground = true };
System.Threading.Thread sendThread = new(MessageSendLoop) { IsBackground = true }; System.Threading.Thread sendThread = new(MessageSendLoop) { IsBackground = true };