Exemple #1
0
        /// <summary>
        /// Метод получает задания в статусе "В аукционе".
        /// </summary>
        /// <returns>Список заданий в аукционе.</returns>
        public async Task <GetTaskResultOutput> LoadAuctionTasks()
        {
            try
            {
                GetTaskResultOutput resultTasks  = new GetTaskResultOutput();
                IEnumerable         auctionTasks = await(from tasks in _postgre.Tasks
                                                         join categories in _postgre.TaskCategories on tasks.CategoryCode equals categories.CategoryCode
                                                         join statuses in _postgre.TaskStatuses on tasks.StatusCode equals statuses.StatusCode
                                                         join users in _postgre.Users on tasks.OwnerId equals users.Id
                                                         where statuses.StatusName.Equals(StatusTask.AUCTION)
                                                         select new
                {
                    tasks.CategoryCode,
                    tasks.CountOffers,
                    tasks.CountViews,
                    tasks.OwnerId,
                    tasks.SpecCode,
                    categories.CategoryName,
                    tasks.StatusCode,
                    statuses.StatusName,
                    TaskBegda = string.Format("{0:f}", tasks.TaskBegda),
                    TaskEndda = string.Format("{0:f}", tasks.TaskEndda),
                    tasks.TaskTitle,
                    tasks.TaskDetail,
                    tasks.TaskId,
                    TaskPrice = string.Format("{0:0,0}", tasks.TaskPrice),
                    tasks.TypeCode,
                    users.UserName
                })
                                                   .OrderBy(o => o.TaskId)
                                                   .ToListAsync();

                // Приводит к типу коллекции GetTaskResultOutput.
                foreach (object task in auctionTasks)
                {
                    string     jsonString = JsonSerializer.Serialize(task);
                    TaskOutput result     = JsonSerializer.Deserialize <TaskOutput>(jsonString);

                    // Считает кол-во ставок к заданию, либо проставит 0.
                    int countResponds = await _postgre.Responds
                                        .Where(r => r.TaskId == result.TaskId)
                                        .Select(r => r.RespondId)
                                        .CountAsync();

                    result.CountOffers = countResponds > 0 ? countResponds : 0;

                    resultTasks.Tasks.Add(result);
                }

                return(resultTasks);
            }

            catch (Exception ex)
            {
                Logger _logger = new Logger(_db, ex.GetType().FullName, ex.Message.ToString(), ex.StackTrace);
                await _logger.LogCritical();

                throw new Exception(ex.Message.ToString());
            }
        }
Exemple #2
0
        public override async Task GetTrackingTasks(Int32Value request, IServerStreamWriter <TaskOutput> responseStream, ServerCallContext context)
        {
            var result = await _dataAccess.GetTrackingTasksDataAccessAsync(request.Value);

            if (result is null)
            {
                await responseStream.WriteAsync(new TaskOutput());

                return;
            }

            foreach (var taskModel in result)
            {
                var task = new TaskOutput
                {
                    TaskId      = taskModel.TaskId,
                    FinalDate   = taskModel.FinalDate.ToUniversalTime().ToTimestamp(),
                    Subject     = taskModel.Subject,
                    Description = taskModel.Description,
                    Priority    = taskModel.Priority,
                    IsArchive   = taskModel.IsArchive,
                    IsCompleted = taskModel.IsCompleted,
                    EmployeeId  = taskModel.UserId,
                    CreatedDate = taskModel.CreatedDate.ToUniversalTime().ToTimestamp()
                };

                await responseStream.WriteAsync(task);
            }
        }
Exemple #3
0
        private object RegisterTaskNotification(MapReduceOperation operation)
        {
            string taskID = (string)operation.TaskID;

            if (taskID == null || string.IsNullOrEmpty(taskID))
            {
                throw new OperationFailedException("Task can not be null or empty");
            }

            TaskBase t = null;

            if (runningTasks.ContainsKey(taskID))
            {
                t = (TaskBase)runningTasks[taskID];
                t.AddTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo);
            }
            else if (waitingTasks.ContainsKey(taskID))
            {
                t = (TaskBase)waitingTasks[taskID];
                t.AddTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo);
            }
            else if (taskOutputStore != null && taskOutputStore.TaskOutputExists(taskID))
            {
                //Put listener info into taskoutput and then call notify client async
                TaskOutput output = taskOutputStore.TaskOutput(taskID);
                if (output != null)
                {
                    output.AddToListeners(operation.CallbackInfo);
                }

                if (_context.CacheImpl != null && _context.CacheInternal != null)
                {
                    EventContext eventContext = new EventContext();
                    eventContext.TaskStatus = TaskStatus.Success;

                    IList listeners = new ArrayList();
                    listeners.Add((TaskCallbackInfo)operation.CallbackInfo);

                    _context.CacheInternal.NotifyTaskCallback(taskID, listeners, true, null, eventContext);
                }
            }
            else if (this.cancelledTask.Contains(taskID))
            {
                throw new OperationFailedException("Task with Specified TaskId was cancelled.");
            }
            else
            {
                throw new OperationFailedException("Task with Specified Task id does not exists");
            }

            return(true);
        }
Exemple #4
0
        private object UnregisterTaskNotification(MapReduceOperation operation)
        {
            String taskID = (String)operation.TaskID;

            if (taskID == null || string.IsNullOrEmpty(taskID))
            {
                throw new OperationFailedException("Task can not be null or empty");
            }

            TaskBase t = null;

            if (runningTasks.ContainsKey(taskID))
            {
                t = (TaskBase)runningTasks[taskID];
                t.RemoveTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo);
            }
            else if (waitingTasks.ContainsKey(taskID))
            {
                t = (TaskBase)waitingTasks[taskID];
                t.RemoveTaskCallbackInfo((TaskCallbackInfo)operation.CallbackInfo);
            }
            else if (taskOutputStore != null && taskOutputStore.TaskOutputExists(taskID))
            {
                //remove listener info from taskoutput
                TaskOutput output = taskOutputStore.TaskOutput(taskID);
                if (output != null)
                {
                    output.RemoveFromListeners(operation.CallbackInfo);
                }
            }
            else if (this.cancelledTask.Contains(taskID))
            {
                throw new OperationFailedException("Task with Specified TaskId was cancelled.");
            }
            else
            {
                throw new OperationFailedException("Task with Specified Task id does not exists");
            }

            return(true);
        }
Exemple #5
0
        static internal ReturnCode Run(TaskInput input, out TaskOutput output)
        {
            output = new TaskOutput();
            output.BundleDetails = new Dictionary <string, BundleDetails>();

            List <ArchiveWorkItem>     allItems    = CreateWorkItems(input);
            Dictionary <string, ulong> fileOffsets = CalculateHashFileOffsets(input);

            IList <CacheEntry>     cacheEntries   = null;
            IList <CachedInfo>     cachedInfo     = null;
            List <ArchiveWorkItem> cachedItems    = new List <ArchiveWorkItem>();
            List <ArchiveWorkItem> nonCachedItems = allItems;

            if (input.BuildCache != null)
            {
                using (input.Log.ScopedStep(LogLevel.Info, "Creating Cache Entries"))
                    cacheEntries = allItems.Select(x => GetCacheEntry(x.BundleName, x.ResourceFiles, x.Compression)).ToList();

                using (input.Log.ScopedStep(LogLevel.Info, "Load Cached Data"))
                    input.BuildCache.LoadCachedData(cacheEntries, out cachedInfo);

                cachedItems    = allItems.Where(x => cachedInfo[x.Index] != null).ToList();
                nonCachedItems = allItems.Where(x => cachedInfo[x.Index] == null).ToList();
                foreach (ArchiveWorkItem i in allItems)
                {
                    i.CachedArtifactPath = string.Format("{0}/{1}", input.BuildCache.GetCachedArtifactsDirectory(cacheEntries[i.Index]), i.BundleName);
                }
            }

            using (input.Log.ScopedStep(LogLevel.Info, "CopyingCachedFiles"))
            {
                foreach (ArchiveWorkItem item in cachedItems)
                {
                    if (!input.ProgressTracker.UpdateInfoUnchecked(string.Format("{0} (Cached)", item.BundleName)))
                    {
                        return(ReturnCode.Canceled);
                    }

                    item.ResultDetails          = (BundleDetails)cachedInfo[item.Index].Data[0];
                    item.ResultDetails.FileName = item.OutputFilePath;
                    item.ResultHash             = item.ResultDetails.Hash;
                    CopyToOutputLocation(item.CachedArtifactPath, item.ResultDetails.FileName, input.Log);
                }
            }

            // Write all the files that aren't cached
            if (!ArchiveItems(nonCachedItems, fileOffsets, input.TempOutputFolder, input.ProgressTracker, input.Threaded, input.Log))
            {
                return(ReturnCode.Canceled);
            }

            PostArchiveProcessing(allItems, input.AssetToFilesDependencies.Values.ToList(), input.InternalFilenameToBundleName, input.Log);

            // Put everything into the cache
            if (input.BuildCache != null)
            {
                using (input.Log.ScopedStep(LogLevel.Info, "Copying To Cache"))
                {
                    List <CachedInfo> uncachedInfo = nonCachedItems.Select(x => GetCachedInfo(input.BuildCache, cacheEntries[x.Index], x.ResourceFiles, x.ResultDetails)).ToList();
                    input.BuildCache.SaveCachedData(uncachedInfo);
                }
            }

            output.BundleDetails = allItems.ToDictionary((x) => x.BundleName, (x) => x.ResultDetails);

            if (input.OutCachedBundles != null)
            {
                input.OutCachedBundles.AddRange(cachedItems.Select(x => x.BundleName));
            }

            return(ReturnCode.Success);
        }
 protected override void WriteOutput(TaskOutput output)
 => Output.Enqueue(output);
        static internal ReturnCode RunInternal(TaskInput input, out TaskOutput output)
        {
#if !UNITY_2020_2_OR_NEWER
            input.EngineHooks = input.EngineHooks != null ? input.EngineHooks : new CalculateAssetDependencyHooks();
#endif
            output = new TaskOutput();
            output.AssetResults = new AssetOutput[input.Assets.Count];

            IList <CachedInfo> cachedInfo = null;
            if (input.BuildCache != null)
            {
                IList <CacheEntry> entries = input.Assets.Select(x => input.BuildCache.GetCacheEntry(x, kVersion)).ToList();
                input.BuildCache.LoadCachedData(entries, out cachedInfo);
            }

            using (input.Logger.ScopedStep(LogLevel.Info, "Calculate Dependencies"))
            {
                for (int i = 0; i < input.Assets.Count; i++)
                {
                    AssetOutput assetResult = new AssetOutput();
                    assetResult.asset = input.Assets[i];
                    if (cachedInfo != null && cachedInfo[i] != null)
                    {
                        assetResult.assetInfo    = cachedInfo[i].Data[0] as AssetLoadInfo;
                        assetResult.usageTags    = cachedInfo[i].Data[1] as BuildUsageTagSet;
                        assetResult.spriteData   = cachedInfo[i].Data[2] as SpriteImporterData;
                        assetResult.extendedData = cachedInfo[i].Data[3] as ExtendedAssetData;
                        assetResult.objectTypes  = cachedInfo[i].Data[4] as List <KeyValuePair <ObjectIdentifier, System.Type[]> >;
                        output.AssetResults[i]   = assetResult;
                        output.CachedAssetCount++;
                        continue;
                    }

                    GUID   asset     = input.Assets[i];
                    string assetPath = AssetDatabase.GUIDToAssetPath(asset.ToString());

                    if (!input.ProgressTracker.UpdateInfoUnchecked(assetPath))
                    {
                        return(ReturnCode.Canceled);
                    }

                    assetResult.assetInfo = new AssetLoadInfo();
                    assetResult.usageTags = new BuildUsageTagSet();

                    assetResult.assetInfo.asset = asset;
                    var includedObjects = ContentBuildInterface.GetPlayerObjectIdentifiersInAsset(asset, input.Target);
                    assetResult.assetInfo.includedObjects = new List <ObjectIdentifier>(includedObjects);
                    var referencedObjects = ContentBuildInterface.GetPlayerDependenciesForObjects(includedObjects, input.Target, input.TypeDB);
                    assetResult.assetInfo.referencedObjects = new List <ObjectIdentifier>(referencedObjects);
                    var allObjects = new List <ObjectIdentifier>(includedObjects);
                    allObjects.AddRange(referencedObjects);
                    ContentBuildInterface.CalculateBuildUsageTags(allObjects.ToArray(), includedObjects, input.GlobalUsage, assetResult.usageTags, input.DependencyUsageCache);

                    var importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
                    if (importer != null && importer.textureType == TextureImporterType.Sprite)
                    {
                        assetResult.spriteData = new SpriteImporterData();
                        assetResult.spriteData.PackedSprite  = false;
                        assetResult.spriteData.SourceTexture = includedObjects.FirstOrDefault();

                        if (EditorSettings.spritePackerMode != SpritePackerMode.Disabled)
                        {
                            assetResult.spriteData.PackedSprite = referencedObjects.Length > 0;
                        }
#if !UNITY_2020_1_OR_NEWER
                        if (EditorSettings.spritePackerMode == SpritePackerMode.AlwaysOn || EditorSettings.spritePackerMode == SpritePackerMode.BuildTimeOnly)
                        {
                            assetResult.spriteData.PackedSprite = !string.IsNullOrEmpty(importer.spritePackingTag);
                        }
#endif
                    }

#if !UNITY_2020_2_OR_NEWER
                    GatherAssetRepresentations(assetPath, input.EngineHooks.LoadAllAssetRepresentationsAtPath, includedObjects, out assetResult.extendedData);
#else
                    GatherAssetRepresentations(asset, input.Target, out assetResult.extendedData);
#endif
                    output.AssetResults[i] = assetResult;
                }
            }

            if (input.BuildCache != null)
            {
                List <CachedInfo> toCache = new List <CachedInfo>();
                for (int i = 0; i < input.Assets.Count; i++)
                {
                    AssetOutput r = output.AssetResults[i];
                    if (cachedInfo[i] == null)
                    {
                        toCache.Add(GetCachedInfo(input.BuildCache, input.Assets[i], r.assetInfo, r.usageTags, r.spriteData, r.extendedData));
                    }
                }
                input.BuildCache.SaveCachedData(toCache);
            }

            return(ReturnCode.Success);
        }
Exemple #8
0
        private void TaskTest()
        {
            var now = DateTime.Now;
            var task = Task.Factory.StartNew<TaskOutput>(() =>
            {
                var to = new TaskOutput() ;
				Thread.Sleep(2000);
                to.Msg = "success";
                return to;
            });

			Console.WriteLine(task.Result.Msg);
            var span = DateTime.Now - now;
            Console.WriteLine("Total(ms):" + span.TotalMilliseconds);
        }
Exemple #9
0
        static internal ReturnCode RunInternal(TaskInput input, out TaskOutput output)
        {
            input.EngineHooks   = input.EngineHooks != null ? input.EngineHooks : new CalculateAssetDependencyHooks();
            output              = new TaskOutput();
            output.AssetResults = new AssetOutput[input.Assets.Count];

            IList <CachedInfo> cachedInfo = null;

            if (input.BuildCache != null)
            {
                IList <CacheEntry> entries = input.Assets.Select(x => input.BuildCache.GetCacheEntry(x, kVersion)).ToList();
                input.BuildCache.LoadCachedData(entries, out cachedInfo);
            }

            for (int i = 0; i < input.Assets.Count; i++)
            {
                AssetOutput assetResult = new AssetOutput();
                assetResult.asset = input.Assets[i];
                if (cachedInfo != null && cachedInfo[i] != null)
                {
                    assetResult.assetInfo    = cachedInfo[i].Data[0] as AssetLoadInfo;
                    assetResult.usageTags    = cachedInfo[i].Data[1] as BuildUsageTagSet;
                    assetResult.spriteData   = cachedInfo[i].Data[2] as SpriteImporterData;
                    assetResult.extendedData = cachedInfo[i].Data[3] as ExtendedAssetData;
                    output.AssetResults[i]   = assetResult;
                    output.CachedAssetCount++;
                    continue;
                }

                GUID   asset     = input.Assets[i];
                string assetPath = AssetDatabase.GUIDToAssetPath(asset.ToString());

                if (!input.ProgressTracker.UpdateInfoUnchecked(assetPath))
                {
                    return(ReturnCode.Canceled);
                }

                assetResult.assetInfo = new AssetLoadInfo();
                assetResult.usageTags = new BuildUsageTagSet();

                assetResult.assetInfo.asset = asset;
                var includedObjects = ContentBuildInterface.GetPlayerObjectIdentifiersInAsset(asset, input.Target);
                assetResult.assetInfo.includedObjects = new List <ObjectIdentifier>(includedObjects);
                var referencedObjects = ContentBuildInterface.GetPlayerDependenciesForObjects(includedObjects, input.Target, input.TypeDB);
                assetResult.assetInfo.referencedObjects = new List <ObjectIdentifier>(referencedObjects);
                var allObjects = new List <ObjectIdentifier>(includedObjects);
                allObjects.AddRange(referencedObjects);
                ContentBuildInterface.CalculateBuildUsageTags(allObjects.ToArray(), includedObjects, input.GlobalUsage, assetResult.usageTags, input.DependencyUsageCache);

                var importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
                if (importer != null && importer.textureType == TextureImporterType.Sprite)
                {
                    assetResult.spriteData = new SpriteImporterData();
                    assetResult.spriteData.PackedSprite  = false;
                    assetResult.spriteData.SourceTexture = includedObjects.First();

                    if (EditorSettings.spritePackerMode != SpritePackerMode.Disabled)
                    {
                        assetResult.spriteData.PackedSprite = referencedObjects.Length > 0;
                    }
#if !UNITY_2020_1_OR_NEWER
                    if (EditorSettings.spritePackerMode == SpritePackerMode.AlwaysOn || EditorSettings.spritePackerMode == SpritePackerMode.BuildTimeOnly)
                    {
                        assetResult.spriteData.PackedSprite = !string.IsNullOrEmpty(importer.spritePackingTag);
                    }
#endif
                }

                var representations = input.EngineHooks.LoadAllAssetRepresentationsAtPath(assetPath);
                if (!representations.IsNullOrEmpty())
                {
                    assetResult.extendedData = new ExtendedAssetData();
                    for (int j = 0; j < representations.Length; j++)
                    {
                        if (representations[j] == null)
                        {
                            BuildLogger.LogWarning($"SubAsset {j} inside {assetPath} is null. It will not be included in the build.");
                            continue;
                        }

                        if (AssetDatabase.IsMainAsset(representations[j]))
                        {
                            continue;
                        }

                        string guid;
                        long   localId;
                        if (!AssetDatabase.TryGetGUIDAndLocalFileIdentifier(representations[j], out guid, out localId))
                        {
                            continue;
                        }

                        assetResult.extendedData.Representations.AddRange(includedObjects.Where(x => x.localIdentifierInFile == localId));
                    }
                }
                output.AssetResults[i] = assetResult;
            }

            if (input.BuildCache != null)
            {
                List <CachedInfo> toCache = new List <CachedInfo>();
                for (int i = 0; i < input.Assets.Count; i++)
                {
                    AssetOutput r = output.AssetResults[i];
                    if (cachedInfo[i] == null)
                    {
                        toCache.Add(GetCachedInfo(input.BuildCache, input.Assets[i], r.assetInfo, r.usageTags, r.spriteData, r.extendedData));
                    }
                }
                input.BuildCache.SaveCachedData(toCache);
            }

            return(ReturnCode.Success);
        }