internal async Task RunFileBrowserCloseTask(FileBrowserCloseParams fileBrowserParams, RequestContext <FileBrowserCloseResponse> requestContext) { FileBrowserCloseResponse result = new FileBrowserCloseResponse(); try { FileBrowserOperation operation = null; ConnectionInfo connInfo; ownerToFileBrowserMap.TryGetValue(fileBrowserParams.OwnerUri, out operation); this.ConnectionServiceInstance.TryFindConnection(fileBrowserParams.OwnerUri, out connInfo); if (operation != null && connInfo != null) { if (!operation.FileTreeCreated) { operation.Cancel(); } // Clear queued items this.fileBrowserQueue.ClearQueuedItems(); // Queue operation to clean up resources QueueItem queueItem = fileBrowserQueue.QueueBindingOperation( key: fileBrowserQueue.AddConnectionContext(connInfo, this.serviceName), bindingTimeout: DefaultTimeout, waitForLockTimeout: DefaultTimeout, bindOperation: (bindingContext, cancelToken) => { FileBrowserOperation removedOperation = null; ownerToFileBrowserMap.TryRemove(fileBrowserParams.OwnerUri, out removedOperation); if (removedOperation != null) { removedOperation.Dispose(); } result.Succeeded = true; return(result); }); queueItem.ItemProcessed.WaitOne(); if (queueItem.GetResultAsT <FileBrowserCloseResponse>() != null) { result = queueItem.GetResultAsT <FileBrowserCloseResponse>(); } this.fileBrowserQueue.CloseConnections(connInfo.ConnectionDetails.ServerName, connInfo.ConnectionDetails.DatabaseName, DefaultTimeout); } } catch (Exception ex) { Logger.Write(TraceEventType.Error, "Unexpected exception while closing file browser: " + ex.Message); result.Message = ex.Message; } await requestContext.SendEvent(FileBrowserClosedNotification.Type, result); }
public async void HandleFileBrowserCloseRequestTest() { var liveConnection = LiveConnectionHelper.InitLiveConnectionInfo(); FileBrowserService service = new FileBrowserService(); var requestContext = new Mock <RequestContext <FileBrowserCloseResponse> >(); requestContext.Setup(x => x.SendResult(It.IsAny <FileBrowserCloseResponse>())).Returns(Task.FromResult(new object())); var inputParams = new FileBrowserCloseParams { OwnerUri = liveConnection.ConnectionInfo.OwnerUri }; await service.HandleFileBrowserCloseRequest(inputParams, requestContext.Object); requestContext.Verify(x => x.SendResult(It.Is <FileBrowserCloseResponse>(p => p.Succeeded == true))); }
internal async Task HandleFileBrowserCloseRequest( FileBrowserCloseParams fileBrowserParams, RequestContext <FileBrowserCloseResponse> requestContext) { try { var task = Task.Run(() => RunFileBrowserCloseTask(fileBrowserParams, requestContext)) .ContinueWithOnFaulted(null); await requestContext.SendResult(new FileBrowserCloseResponse() { Succeeded = true }); } catch (Exception ex) { Logger.Write(TraceEventType.Error, "Unexpected exception while handling file browser close request: " + ex.Message); await requestContext.SendResult(new FileBrowserCloseResponse() { Message = ex.Message }); } }