| File: src\sdk\src\Dotnet.Watch\AspireService\Models\SessionChangeNotification.cs | Web Access |
| Project: src\sdk\src\Dotnet.Watch\Watch\Microsoft.DotNet.HotReload.Watch.csproj (Microsoft.DotNet.HotReload.Watch) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; namespace Aspire.Tools.Service; internal static class NotificationType { public const string ProcessRestarted = "processRestarted"; public const string SessionTerminated = "sessionTerminated"; public const string ServiceLogs = "serviceLogs"; } /// <summary> /// Implements https://github.com/dotnet/aspire/blob/445d2fc8a6a0b7ce3d8cc42def4d37b02709043b/docs/specs/IDE-execution.md#common-notification-properties. /// </summary> internal class SessionNotification { public const string Url = "/notify"; /// <summary> /// One of <see cref="NotificationType"/>. /// </summary> [Required] [JsonPropertyName("notification_type")] public required string NotificationType { get; init; } /// <summary> /// The id of the run session that the notification is related to. /// </summary> [Required] [JsonPropertyName("session_id")] public required string SessionId { get; init; } } /// <summary> /// Implements https://github.com/dotnet/aspire/blob/445d2fc8a6a0b7ce3d8cc42def4d37b02709043b/docs/specs/IDE-execution.md#session-terminated-notification. /// <see cref="SessionNotification.NotificationType"/> is <see cref="NotificationType.SessionTerminated"/>. /// </summary> internal sealed class SessionTerminatedNotification : SessionNotification { /// <summary> /// The process id of the service process associated with the run session. /// </summary> [Required] [JsonPropertyName("pid")] public required int Pid { get; init; } /// <summary> /// The exit code of the process associated with the run session. /// </summary> [Required] [JsonPropertyName("exit_code")] public required int? ExitCode { get; init; } public override string ToString() => $"pid={Pid}, exit_code={ExitCode}"; } /// <summary> /// Implements https://github.com/dotnet/aspire/blob/445d2fc8a6a0b7ce3d8cc42def4d37b02709043b/docs/specs/IDE-execution.md#process-restarted-notification. /// <see cref="SessionNotification.NotificationType"/> is <see cref="NotificationType.ProcessRestarted"/>. /// </summary> internal sealed class ProcessRestartedNotification : SessionNotification { /// <summary> /// The process id of the service process associated with the run session. /// </summary> [Required] [JsonPropertyName("pid")] public required int PID { get; init; } public override string ToString() => $"pid={PID}"; } /// <summary> /// Implements https://github.com/dotnet/aspire/blob/445d2fc8a6a0b7ce3d8cc42def4d37b02709043b/docs/specs/IDE-execution.md#log-notification /// <see cref="SessionNotification.NotificationType"/> is <see cref="NotificationType.ServiceLogs"/>. /// </summary> internal sealed class ServiceLogsNotification : SessionNotification { /// <summary> /// True if the output comes from standard error stream, otherwise false (implying standard output stream). /// </summary> [Required] [JsonPropertyName("is_std_err")] public required bool IsStdErr { get; init; } /// <summary> /// The text written by the service program. /// </summary> [Required] [JsonPropertyName("log_message")] public required string LogMessage { get; init; } public override string ToString() => $"log_message='{LogMessage}', is_std_err={IsStdErr}"; }