using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Tango.Core.DI; using Tango.Core.Threading; using Tango.Integration.ExternalBridge; using Tango.PPC.Common.Application; using Tango.PPC.Common.ExternalBridge; using Tango.PPC.Common.RemoteActions; using Tango.PPC.Common.Threading; using Tango.PPC.Shared.RemoteActions; namespace Tango.PPC.UI.RemoteActions { [TangoCreateWhenRegistered] public class DefaultRemoteActionsService : IRemoteActionsService, IExternalBridgeRequestHandler { [TangoInject] private IDispatcherProvider DispatcherProvider { get; set; } [TangoInject] private IPPCApplicationManager ApplicationManager { get; set; } public DefaultRemoteActionsService(IPPCExternalBridgeService externalBridge) { externalBridge.RegisterRequestHandler(this); } public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) { //Do nothing. } [ExternalBridgeRequestHandlerMethod(typeof(SimulateApplicationExceptionRequest), RequestHandlerLoggingMode.LogRequestName)] public async Task OnSimulateApplicationExceptionRequest(SimulateApplicationExceptionRequest request, String token, ExternalBridgeReceiver receiver) { await receiver.SendGenericResponse(new SimulateApplicationExceptionResponse(), token); Thread.Sleep(500); DispatcherProvider.Invoke(() => { if (request.CrashApplication) { App.ExceptionTrapper.Disable(); throw new OutOfMemoryException("This is a simulated exception to cause the application to crash."); } else { throw new ApplicationException("This is a simulated exception to cause an unhandled application error."); } }); } [ExternalBridgeRequestHandlerMethod(typeof(RestartApplicationRequest), RequestHandlerLoggingMode.LogRequestName)] public async Task OnRestartApplicationRequest(RestartApplicationRequest request, String token, ExternalBridgeReceiver receiver) { await receiver.SendGenericResponse(new RestartApplicationResponse(), token); DispatcherProvider.Invoke(() => { ApplicationManager.Restart(); }); } } }