Пример #1
0
        public async Task <Result> SendNotificationFileTransferStalledAsync(int fileTransferId)
        {
            var handleTransferStalled = FileTransferHandler.HandleInboundFileTransferStalled(fileTransferId);

            if (handleTransferStalled.Failure)
            {
                return(handleTransferStalled);
            }

            var fileTransfer = handleTransferStalled.Value;

            var notifyTransferStalled = new FileTransferResponse(RequestType.FileTransferStalled)
            {
                LocalServerInfo        = MyInfo,
                RemoteServerInfo       = fileTransfer.RemoteServerInfo,
                TransferResponseCode   = fileTransfer.TransferResponseCode,
                RemoteServerTransferId = fileTransfer.Id,
                Status    = RequestStatus.InProgress,
                Direction = TransferDirection.Outbound
            };

            InboundFileTransferInProgress?.Invoke(this, false);

            return(await _requestHandler.SendRequestAsync(notifyTransferStalled));
        }
Пример #2
0
        async Task SendNotificationFileTransferComplete(FileTransfer inboundFileTransfer)
        {
            var fileTransferComplete = new FileTransferResponse(RequestType.FileTransferComplete)
            {
                LocalServerInfo        = MyInfo,
                RemoteServerInfo       = inboundFileTransfer.RemoteServerInfo,
                TransferResponseCode   = inboundFileTransfer.TransferResponseCode,
                RemoteServerTransferId = inboundFileTransfer.Id,
                Status    = RequestStatus.InProgress,
                Direction = TransferDirection.Outbound
            };

            InboundFileTransferInProgress?.Invoke(this, false);

            await _requestHandler.SendRequestAsync(fileTransferComplete);
        }
Пример #3
0
        public async Task <Result> AcceptInboundFileTransferAsync(FileTransfer fileTransfer)
        {
            var acceptFileTransfer = new FileTransferResponse(RequestType.FileTransferAccepted)
            {
                LocalServerInfo        = MyInfo,
                RemoteServerInfo       = fileTransfer.RemoteServerInfo,
                TransferResponseCode   = fileTransfer.TransferResponseCode,
                RemoteServerTransferId = fileTransfer.Id,
                Status    = RequestStatus.InProgress,
                Direction = TransferDirection.Outbound
            };

            InboundFileTransferInProgress?.Invoke(this, true);

            var sendRequest = await _requestHandler.AcceptInboundFileTransferAsync(acceptFileTransfer);

            if (sendRequest.Failure)
            {
                InboundFileTransferInProgress?.Invoke(this, false);

                var abortTransfer =
                    FileTransferHandler.AbortInboundFileTransfer(
                        acceptFileTransfer,
                        sendRequest.Error);

                return(abortTransfer.Success
                    ? sendRequest
                    : Result.Combine(abortTransfer, sendRequest));
            }

            var socket = _requestHandler.GetSocketForInboundFileTransfer();

            if (socket == null)
            {
                InboundFileTransferInProgress?.Invoke(this, false);
                var error = "Unable to retrieve transfer socket, file transfer must be aborted";

                var abortTransfer =
                    FileTransferHandler.AbortInboundFileTransfer(
                        acceptFileTransfer,
                        error);

                return(abortTransfer.Success
                    ? Result.Fail(error)
                    : Result.Combine(abortTransfer, Result.Fail(error)));
            }

            var receiveFile = await
                              FileTransferHandler.AcceptInboundFileTransferAsync(
                fileTransfer,
                socket,
                _fileBytes.ToArray(),
                _token);

            if (receiveFile.Failure)
            {
                InboundFileTransferInProgress?.Invoke(this, false);
            }

            return(receiveFile);
        }