Source code for ReFreSH.MobileSuit.Core.Middlewares.HostShellMiddleware

from ..ISuitMiddleware import SuitRequestDelegate, ISuitMiddleware
from ..Services.SuitHostShell import SuitHostShell
from ..Services.TaskService import ITaskService
from ..SuitBuildUtils import SuitCommandTarget, SuitCommandTargetHost, SuitCommandTargetApp, SuitCommandTargetAppTask
from ..SuitContext import SuitContext
from ...RequestStatus import RequestStatus


[docs] class HostShellMiddleware(ISuitMiddleware): """Middleware to execute command over suit server shell."""
[docs] async def InvokeAsync(self, context: SuitContext, nextStep: SuitRequestDelegate) -> None: """Inherited from base class.""" # TODO: CancellationToken # if context.CancellationToken.IsCancellationRequested: # context.RequestStatus = RequestStatus.Interrupt # await next(context) if context.RequestStatus != RequestStatus.NotHandled: await nextStep(context) return tasks = context.ServiceProvider.GetRequiredService(ITaskService) force = context.Properties.get(SuitCommandTarget) == SuitCommandTargetHost forceClient = context.Properties.get(SuitCommandTarget) in (SuitCommandTargetApp, SuitCommandTargetAppTask) if forceClient: await nextStep(context) return server = context.ServiceProvider.GetRequiredService(SuitHostShell) await tasks.RunTaskImmediately(server.Execute(context)) if force and context.RequestStatus == RequestStatus.NotHandled: context.RequestStatus = RequestStatus.CommandNotFound await nextStep(context)