Example #1
0
        async Task IServer.DownloadFile(SrvDownloadRequest request, ITcpOp tcpOp)
        {
            _log.Info(request.TrackingId, request);

            validate(request);

            var user = await getUser(request);

            authenticate(user, request);

            var srcPath = makeFilePath(user, request.FileName);

            if (!File.Exists(srcPath))
            {
                throw new ApplicationException($"Can't find '{request.FileName}'");
            }

            var file = File.Open(srcPath, FileMode.Open, FileAccess.Read);

            var response = makeResponse <SrvDownloadResponse>(request);

            response.FileSize = file.Length;
            await tcpOp.Write(response);

            await tcpOp.WriteBytesFrom(file, file.Length);

            file.Close();

            _log.Info(request.TrackingId, response);
        }
Example #2
0
        async Task IServer.UploadFile(SrvUploadRequest request, ITcpOp tcpOp)
        {
            _log.Info(request.TrackingId, request);

            validate(request);

            var user = await getUser(request);

            authenticate(user, request);

            var dstPath = makeFilePath(user, request.FileName);

            Directory.CreateDirectory(user.Folder);

            var file = File.Open(dstPath, FileMode.Create);

            var response = makeResponse <SrvUploadResponse>(request);
            await tcpOp.Write(response);

            await tcpOp.ReadBytesTo(file, request.FileSize);

            file.Flush();
            file.Close();

            await tcpOp.Write(response);

            _log.Info(request.TrackingId, response);
        }
Example #3
0
        async Task IServer.Ping(SrvPingRequest request, ITcpOp tcpOp)
        {
            validate(request);

            var user = await getUser(request);

            authenticate(user, request);

            var response = makeResponse <SrvPongResponse>(request);
            await tcpOp.Write(response);
        }
Example #4
0
        async Task IServer.ListFiles(SrvListRequest request, ITcpOp tcpOp)
        {
            _log.Info(request.TrackingId, request);

            validate(request);

            var user = await getUser(request);

            authenticate(user, request);

            Directory.CreateDirectory(user.Folder);

            var fileList = Directory
                           .GetFiles(user.Folder)
                           .Select(path => Path.GetFileName(path))
                           .ToArray();

            var response = makeResponse <SrvListResponse>(request);

            response.FileNames = fileList;
            await tcpOp.Write(response);

            _log.Info(request.TrackingId, response);
        }
Example #5
0
        async Task IServer.DeleteFile(SrvDeleteRequest request, ITcpOp tcpOp)
        {
            _log.Info(request.TrackingId, request);

            validate(request);

            var user = await getUser(request);

            authenticate(user, request);

            var path = makeFilePath(user, request.FileName);

            if (!File.Exists(path))
            {
                throw new ApplicationException($"'{request.FileName}' is not found");
            }

            File.Delete(path);

            var response = makeResponse <SrvDeleteResponse>(request);
            await tcpOp.Write(response);

            _log.Info(request.TrackingId, response);
        }
Example #6
0
        private async Task <bool> dispathRequest(SrvRequest request, string jRequest, ITcpOp tcpOp)
        {
            try
            {
                switch (request.Command)
                {
                case SrvRequest.PING:
                    var pingRequest = jRequest.Parse <SrvPingRequest>();
                    await _server.Ping(pingRequest, tcpOp);

                    break;

                case SrvRequest.LIST:
                    var listRequest = jRequest.Parse <SrvListRequest>();
                    await _server.ListFiles(listRequest, tcpOp);

                    break;

                case SrvRequest.UPLOAD:
                    var uploadRequest = jRequest.Parse <SrvUploadRequest>();
                    await _server.UploadFile(uploadRequest, tcpOp);

                    break;

                case SrvRequest.DOWNLOAD:
                    var downloadRequest = jRequest.Parse <SrvDownloadRequest>();
                    await _server.DownloadFile(downloadRequest, tcpOp);

                    break;

                case SrvRequest.DELETE:
                    var deleteRequest = jRequest.Parse <SrvDeleteRequest>();
                    await _server.DeleteFile(deleteRequest, tcpOp);

                    break;

                default:
                    throw new IOException($"Unknown command: {request.Command}");
                }

                return(true);
            }
            catch (Exception ex)
            {
                _log.Error(request.TrackingId, ex);

                await tcpOp.Write(new SrvResponse {
                    TrackingId = request.TrackingId,
                    Error      = ex.Message
                });

                return(false);
            }
        }