Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IDE Channel Client: Have a generic OnMessageReceived (backport #18501) #18534

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions src/Uno.UI.RemoteControl.VS/EntryPoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -344,9 +344,7 @@ private async Task EnsureServerAsync()
_process.BeginErrorReadLine();

_ideChannelClient = new IdeChannelClient(pipeGuid, new Logger(this));
_ideChannelClient.ForceHotReloadRequested += OnForceHotReloadRequestedAsync;
_ideChannelClient.OnMessageReceived += OnMessageReceivedAsync;
_ideChannelClient.OnAddMenuItemIdeMessageRequested += OnAddMenuItemRequestIdeMessageAsync;
_ideChannelClient.ConnectToHost();

// Set the port to the projects
Expand Down Expand Up @@ -422,7 +420,34 @@ async Task RestartAsync()
}
}

private async Task OnMessageReceivedAsync(object? sender, NotificationRequestIdeMessage message)
private async Task OnMessageReceivedAsync(object? sender, IdeMessage devServerMessage)
{
try
{
switch (devServerMessage)
{
case AddMenuItemRequestIdeMessage amir:
await OnAddMenuItemRequestIdeMessageAsync(sender, amir);
break;
case ForceHotReloadIdeMessage fhr:
await OnForceHotReloadRequestedAsync(sender, fhr);
break;
case NotificationRequestIdeMessage nr:
await NotificationRequestIdeMessageAsync(sender, nr);
break;
default:
_debugAction?.Invoke($"Unknown message type {devServerMessage?.GetType()} from DevServer");
break;
}
}
catch (Exception e) when (_ideChannelClient is not null)
{
_debugAction?.Invoke($"Failed to handle IdeMessage with message {e.Message}");
throw;
}
}

private async Task NotificationRequestIdeMessageAsync(object? sender, NotificationRequestIdeMessage message)
{
try
{
Expand Down
17 changes: 3 additions & 14 deletions src/Uno.UI.RemoteControl.VS/IDEChannel/IDEChannelClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ internal class IdeChannelClient
private IIdeChannelServer? _devServer;
private readonly ILogger _logger;

public event AsyncEventHandler<ForceHotReloadIdeMessage>? ForceHotReloadRequested;
public event AsyncEventHandler<NotificationRequestIdeMessage>? OnMessageReceived;
public event AsyncEventHandler<AddMenuItemRequestIdeMessage>? OnAddMenuItemIdeMessageRequested;
public event AsyncEventHandler<IdeMessage>? OnMessageReceived;

public IdeChannelClient(Guid pipeGuid, ILogger logger)
{
Expand Down Expand Up @@ -93,20 +91,11 @@ private void ProcessDevServerMessage(object sender, IdeMessageEnvelope devServer
var process = Task.CompletedTask;
switch (devServerMessage)
{
case AddMenuItemRequestIdeMessage cr:
_logger.Debug("Command Ide Message Requested");
process = OnAddMenuItemIdeMessageRequested.InvokeAsync(this, cr);
break;

case ForceHotReloadIdeMessage forceHotReloadMessage when ForceHotReloadRequested is { } hrRequested:
_logger.Debug("Hot reload requested");
process = hrRequested.InvokeAsync(this, forceHotReloadMessage);
break;
case KeepAliveIdeMessage:
_logger.Verbose($"Keep alive from Dev Server");
break;
case NotificationRequestIdeMessage e when e is { } message:
_logger.Verbose($"Dev Server will open the Notification Message with message {e.Message}");
case IdeMessage message:
_logger.Verbose($"Dev Server Message {message.GetType()} requested");
process = OnMessageReceived.InvokeAsync(this, message);
break;
default:
Expand Down
Loading