Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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)));
        }
Exemplo n.º 3
0
 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
         });
     }
 }