private void RequestRepository(TransferRepository repository, Reporter reporter)
        {
            var repozipFile = RepoEnv.TempFiles.CreateFile();

            UpdateLock.EnterUpgradeableReadLock();
            try
            {
                Log.Info("Incomming Transfer Request for Repository {Name}", repository.RepoName);
                reporter.Send(RepositoryMessages.GetRepo);

                var data = _repos.AsQueryable().FirstOrDefault(r => r.RepoName == repository.RepoName);
                if (data == null)
                {
                    reporter.Compled(OperationResult.Failure(RepoErrorCodes.DatabaseNoRepoFound));
                    return;
                }

                var commitInfo = _gitHubClient.Repository.Commit.GetSha1(data.RepoId, "HEAD").Result;

                var repozip = repozipFile.Stream;

                if (!(commitInfo != data.LastUpdate && UpdateRepository(data, reporter, repository, commitInfo, repozip)))
                {
                    reporter.Send(RepositoryMessages.GetRepositoryFromDatabase);
                    Log.Info("Downloading Repository {Name} From Server", repository.RepoName);
                    repozip.SetLength(0);
                    _bucket.DownloadToStream(ObjectId.Parse(data.FileName), repozip);
                }

                //_reporter = reporter;

                //repozip.Seek(0, SeekOrigin.Begin);
                //Timers.StartSingleTimer(_reporter, new TransferFailed(string.Empty, FailReason.Timeout, data.RepoName), TimeSpan.FromMinutes(10));
                var request = DataTransferRequest.FromStream(repository.OperationId, repozip, repository.Manager ?? throw new ArgumentNullException("FileManager"), commitInfo);
                request.SendCompletionBack = true;

                _dataTransfer.Request(request);
                _currentTransfers[request.OperationId] = repozipFile;

                reporter.Compled(OperationResult.Success(new FileTransactionId(request.OperationId)));
            }
            finally
            {
                UpdateLock.ExitUpgradeableReadLock();
            }
        }
        public void processDataTransfer(byte[] byteArray1, byte[] byteArray2)
        {
            // Kiểm tra kết nối, server, service trước khi request
            Common.Utilities.IsRequestAllow(ApplicationConstant.SystemService.ZATestAppService.layGiaTri());

            // Khởi tạo và gán các giá trị cho request
            DataTransferRequest request = Common.Utilities.PrepareRequest(new DataTransferRequest());

            request.logo1 = byteArray1;
            request.logo2 = byteArray2;

            // Ghi log
            LLogging.WriteLog(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.ToString(), LLogging.LogType.SYS, "processDataTransfer at Client : ");

            // Lấy kết quả trả về
            DataTransferResponse response = Client.processDataTransfer(request);

            // Kiểm tra kết quả trả về
            Common.Utilities.ValidResponse(request, response);
        }
        public string HandleDataTransfer(OCPPMessage msgIn, OCPPMessage msgOut)
        {
            string errorCode = null;
            DataTransferResponse dataTransferResponse = new DataTransferResponse();

            bool msgWritten = false;

            try
            {
                Logger.LogTrace("Processing data transfer...");
                DataTransferRequest dataTransferRequest = JsonConvert.DeserializeObject <DataTransferRequest>(msgIn.JsonPayload);
                Logger.LogTrace("DataTransfer => Message deserialized");

                if (ChargePointStatus != null)
                {
                    // Known charge station
                    msgWritten = WriteMessageLog(ChargePointStatus.Id, null, msgIn.Action, string.Format("VendorId={0} / MessageId={1} / Data={2}", dataTransferRequest.VendorId, dataTransferRequest.MessageId, dataTransferRequest.Data), errorCode);
                    dataTransferResponse.Status = DataTransferResponseStatus.UnknownVendorId;
                }
                else
                {
                    // Unknown charge station
                    errorCode = ErrorCodes.GenericError;
                }

                msgOut.JsonPayload = JsonConvert.SerializeObject(dataTransferResponse);
                Logger.LogTrace("DataTransfer => Response serialized");
            }
            catch (Exception exp)
            {
                Logger.LogError(exp, "DataTransfer => Exception: {0}", exp.Message);
                errorCode = ErrorCodes.InternalError;
            }

            if (!msgWritten)
            {
                WriteMessageLog(ChargePointStatus.Id, null, msgIn.Action, null, errorCode);
            }
            return(errorCode);
        }
Beispiel #4
0
 public OperatorData StartSending(DataTransferRequest id, IActorRef sender)
 => Copy(id.OperationId, id.Target.Actor, id.Source, id.Data, sendBack: id.SendCompletionBack, sender: sender);
Beispiel #5
0
        public AppQueryHandler(IMongoCollection <AppData> apps, GridFSBucket files, DataTransferManager dataTransfer, IActorRef changeTracker)
        {
            Receive <QueryChangeSource>(changeTracker.Forward);

            MakeQueryCall <QueryApps, AppList>("QueryApps", (query, _)
                                               => new AppList(apps.AsQueryable().Select(ad => ad.ToInfo()).ToImmutableList()));

            MakeQueryCall <QueryApp, AppInfo>("QueryApp", (query, reporter) =>
            {
                var data = apps.AsQueryable().FirstOrDefault(e => e.Name == query.AppName);

                if (data != null)
                {
                    return(data.ToInfo());
                }

                reporter.Compled(OperationResult.Failure(BuildErrorCodes.QueryAppNotFound));
                return(null);
            });

            MakeQueryCall <QueryBinarys, FileTransactionId>("QueryBinaries", (query, reporter) =>
            {
                if (query.Manager == null)
                {
                    return(null);
                }

                var data = apps.AsQueryable().FirstOrDefault(e => e.Name == query.AppName);

                if (data == null)
                {
                    reporter.Compled(OperationResult.Failure(BuildErrorCodes.QueryAppNotFound));
                    return(null);
                }

                var targetVersion = query.AppVersion != -1 ? query.AppVersion : data.Last;

                var file = data.Versions.FirstOrDefault(f => f.Version == targetVersion);
                if (file == null)
                {
                    reporter.Compled(OperationResult.Failure(BuildErrorCodes.QueryFileNotFound));
                    return(null);
                }

                var request = DataTransferRequest.FromStream(() => files.OpenDownloadStream(file.File), query.Manager, query.AppName);
                dataTransfer.Request(request);

                return(new FileTransactionId(request.OperationId));
            });

            MakeQueryCall <QueryBinaryInfo, BinaryList>("QueryBinaryInfo", (binarys, reporter) =>
            {
                var data = apps.AsQueryable().FirstOrDefault(ad => ad.Name == binarys.AppName);
                if (data != null)
                {
                    return(new BinaryList(data.Versions.Select(i => new AppBinary(data.Name, i.Version, i.CreationTime, i.Deleted, i.Commit, data.Repository)).ToImmutableList()));
                }

                reporter.Compled(OperationResult.Failure(BuildErrorCodes.QueryAppNotFound));
                return(null);
            });
        }
Beispiel #6
0
 .Select(evt => evt.New(DataTransferRequest.FromStream(
                            () => evt.Event.File.Open(FileAccess.Read),
                            evt.Event.Manager,
                            evt.Event.AppName)))
 .Select(evt => evt.New <FileTransactionId?>(evt.State.DataTransfer.Request(evt.Event))));