Ejemplo n.º 1
0
        /// <summary>
        /// 插入或更新文件夹
        /// </summary>
        internal static async ValueTask UpsertFolderAsync(ModelFolder folder, Transaction txn)
        {
            if (folder.Parent != null)
            {
                throw new InvalidOperationException("Can't save none root folder.");
            }

            //TODO:check need add version

            IntPtr keyPtr;
            IntPtr dataPtr = SerializeModel(folder, out _);

            unsafe
            {
                byte *pk = stackalloc byte[KeyUtil.FOLDER_KEY_SIZE];
                KeyUtil.WriteFolderKey(pk, folder.AppId, folder.TargetModelType);
                keyPtr = new IntPtr(pk);
            }

            var req = new ClrInsertRequire
            {
                RaftGroupId      = KeyUtil.META_RAFTGROUP_ID,
                KeyPtr           = keyPtr,
                KeySize          = new IntPtr(KeyUtil.FOLDER_KEY_SIZE),
                DataPtr          = dataPtr,
                SchemaVersion    = 0,
                OverrideIfExists = true,
                DataCF           = -1
            };
            IntPtr reqPtr;

            unsafe { reqPtr = new IntPtr(&req); }
            await HostApi.ExecKVInsertAsync(txn.Handle, reqPtr);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 根据当前选择的节点查找新建文件夹节点的上级节点
        /// </summary>
        public DesignNode FindNewFolderParentNode(DesignNode selected, out uint appID, out ModelType modelType)
        {
            appID     = 0;
            modelType = ModelType.Application;

            if (selected == null)
            {
                return(null);
            }

            if (selected is ModelRootNode rootNode)
            {
                appID     = rootNode.AppID;
                modelType = rootNode.TargetType;
                return(selected);
            }
            if (selected.NodeType == DesignNodeType.FolderNode)
            {
                ModelFolder folder = ((FolderNode)selected).Folder;
                appID     = folder.AppId;
                modelType = folder.TargetModelType;
                return(selected);
            }

            return(null);
        }
Ejemplo n.º 3
0
        public void Load(System.IO.Stream stream)
        {
            CanSave = true;

            Read(new FileReader(stream));

            TreeNode node = new QuickAccessFolder(this, "Quick access");

            Nodes.Add(node);
            Dictionary <string, TreeNode> folders = new Dictionary <string, TreeNode>();

            foreach (var file in files)
            {
                string ext        = Utils.GetExtension(file.FileName);
                string folderName = "Other";
                if (CategoryLookup.ContainsKey(ext))
                {
                    folderName = CategoryLookup[ext];
                }

                if (!folders.ContainsKey(folderName))
                {
                    TreeNode folder = new QuickAccessFileFolder(folderName);
                    if (folderName == "Textures")
                    {
                        folder = new TextureFolder(this, "Textures");
                    }
                    if (folderName == "Models")
                    {
                        folder = new ModelFolder("Models");
                    }
                    if (folderName == "Animations")
                    {
                        folder = new AnimationFolder("Animations");
                    }

                    node.Nodes.Add(folder);
                    folders.Add(folderName, folder);
                }

                string name = Path.GetFileName(file.FileName).Split('[').FirstOrDefault();

                string imageKey = "fileBlank";
                switch (ext)
                {
                case ".bntx": imageKey = "bntx"; break;

                case ".gfbmdl": imageKey = "model"; break;
                }

                TreeNode fodlerNode = folders[folderName];
                fodlerNode.Nodes.Add(new QuickAccessFile(name)
                {
                    Tag              = file,
                    ImageKey         = imageKey,
                    SelectedImageKey = imageKey,
                });
            }
        }
 public static dynamic GetTSObject(ModelFolder dynObject)
 {
     if (dynObject is null)
     {
         return(null);
     }
     return(dynObject.teklaObject);
 }
Ejemplo n.º 5
0
        internal Task SaveAsync()
        {
            //查找文件夹直至根级文件夹,然后序列化保存根级文件夹
            ModelFolder rootFolder = Folder.GetRoot();

            //保存节点模型
            return(StagedService.SaveFolderAsync(rootFolder));
        }
Ejemplo n.º 6
0
        private void addFolder(object sender, System.EventArgs e)
        {
            ModelFolder folder;

            folder = new ModelFolder("New Folder");
            model.Folders.Add(folder);

            refreshTree();
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 检查指定目录是否原本是根目录
 /// </summary>
 internal static bool CheckRootFolderCacheExists(ModelFolder folder)
 {
     throw ExceptionHelper.NotImplemented();
     // string path = PathService.GetFolderPath(folder, false);
     // ModelFolder current = FileCacheService.LoadFromCache(path) as ModelFolder;
     // if (current == null || current.PersistentState != PersistentState.Deleted)
     //     return false;
     // return true;
 }
Ejemplo n.º 8
0
        /// <summary>
        /// 保存模型类型的根目录
        /// </summary>
        internal static Task SaveFolderAsync(ModelFolder folder)
        {
            if (folder.Parent != null)
            {
                throw new InvalidOperationException("仅允许保存模型类型的根目录");
            }
            var data = BinSerializer.Serialize(folder, false, null);

            return(SaveAsync(StagedType.Folder, $"{folder.AppId}-{(byte)folder.TargetModelType}" /*不要使用folder.Id*/, data));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 删除根文件夹
        /// </summary>
        internal static async ValueTask DeleteFolderAsync(ModelFolder folder, DbTransaction txn)
        {
            if (folder.Parent != null)
            {
                throw new InvalidOperationException("Can't delete none root folder.");
            }
            var id = $"{folder.AppId.ToString()}.{(byte)folder.TargetModelType}"; //RootFolder.Id=Guid.Empty

            using var cmd   = SqlStore.Default.MakeCommand();
            cmd.Connection  = txn.Connection;
            cmd.Transaction = txn;
            BuildDeleteMetaCommand(cmd, Meta_Folder, id);
            await cmd.ExecuteNonQueryAsync();
        }
Ejemplo n.º 10
0
 private void ModelFolder_DragDrop(object sender, DragEventArgs e)
 {
     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
     foreach (string file in files)
     {
         if (ModelFolder.Text.Length == 0)
         {
             ModelFolder.Text = file;
         }
         else
         {
             ModelFolder.AppendText("\r\n" + file);
         }
         Console.WriteLine(file);
     }
 }
Ejemplo n.º 11
0
        /// <summary>
        /// 用于设计时加载所有Folder
        /// </summary>
        internal static async ValueTask <ModelFolder[]> LoadAllFolderAsync()
        {
            byte   key = KeyUtil.METACF_FOLDER_PREFIX;
            IntPtr keyPtr;

            unsafe { keyPtr = new IntPtr(&key); }

            var req = new ClrScanRequire
            {
                RaftGroupId  = KeyUtil.META_RAFTGROUP_ID,
                BeginKeyPtr  = keyPtr,
                BeginKeySize = new IntPtr(1),
                EndKeyPtr    = IntPtr.Zero,
                EndKeySize   = IntPtr.Zero,
                FilterPtr    = IntPtr.Zero,
                Skip         = 0,
                Take         = uint.MaxValue,
                DataCF       = -1
            };
            IntPtr reqPtr;

            unsafe { reqPtr = new IntPtr(&req); }
            var res = await HostApi.ReadIndexByScanAsync(reqPtr);

            var folders = new ModelFolder[res.Length];

            try
            {
                int index = 0;
                res.ForEachRow((kp, ks, vp, vs) =>
                {
                    folders[index] = (ModelFolder)DeserializeModel(vp, vs);
                    index++;
                });
            }
            catch (Exception) { throw; }
            finally { res.Dispose(); }

            return(folders);
        }
Ejemplo n.º 12
0
        private static void LoopAddFolder(Dictionary <Guid, PermissionNode> dic, PermissionNode parent, ModelFolder folder)
        {
            var parentNode = parent;

            if (folder.Parent != null)
            {
                var node = new PermissionNode(folder.Name);
                dic.Add(folder.Id, node);
                parent.Childs.Add(node);
                parentNode = node;
            }

            if (folder.HasChilds)
            {
                for (int i = 0; i < folder.Childs.Count; i++)
                {
                    LoopAddFolder(dic, parentNode, folder.Childs[i]);
                }
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Return recognition results.
        /// </summary>
        /// <param name="dc">Context object containing information for a single turn of conversation with a user.</param>
        /// <param name="activity">The incoming activity received from the user. The Text property value is used as the query text for QnA Maker.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <param name="telemetryProperties">Additional properties to be logged to telemetry with the LuisResult event.</param>
        /// <param name="telemetryMetrics">Additional metrics to be logged to telemetry with the LuisResult event.</param>
        /// <returns>A <see cref="RecognizerResult"/> containing the QnA Maker result.</returns>
        public override async Task <RecognizerResult> RecognizeAsync(DialogContext dc, Schema.Activity activity, CancellationToken cancellationToken, Dictionary <string, string> telemetryProperties = null, Dictionary <string, double> telemetryMetrics = null)
        {
            var text            = activity.Text ?? string.Empty;
            var detectAmbiguity = DetectAmbiguousIntents.GetValue(dc.State);

            _modelFolder  = ModelFolder.GetValue(dc.State);
            _snapshotFile = SnapshotFile.GetValue(dc.State);

            InitializeModel();

            var recognizerResult = new RecognizerResult()
            {
                Text    = text,
                Intents = new Dictionary <string, IntentScore>(),
            };

            if (string.IsNullOrWhiteSpace(text))
            {
                // nothing to recognize, return empty recognizerResult
                return(recognizerResult);
            }

            if (ExternalEntityRecognizer != null)
            {
                // Run external recognition
                var externalResults = await ExternalEntityRecognizer.RecognizeAsync(dc, activity, cancellationToken, telemetryProperties, telemetryMetrics).ConfigureAwait(false);

                recognizerResult.Entities = externalResults.Entities;
            }

            // Score with orchestrator
            var results = _resolver.Score(text);

            // Add full recognition result as a 'result' property
            recognizerResult.Properties.Add(ResultProperty, results);

            if (results.Any())
            {
                var topScore = results[0].Score;

                // if top scoring intent is less than threshold, return None
                if (topScore < UnknownIntentFilterScore)
                {
                    recognizerResult.Intents.Add(NoneIntent, new IntentScore()
                    {
                        Score = 1.0
                    });
                }
                else
                {
                    // add top score
                    recognizerResult.Intents.Add(results[0].Label.Name, new IntentScore()
                    {
                        Score = results[0].Score
                    });

                    // Disambiguate if configured
                    if (detectAmbiguity)
                    {
                        var thresholdScore   = DisambiguationScoreThreshold.GetValue(dc.State);
                        var classifyingScore = Math.Round(topScore, 2) - Math.Round(thresholdScore, 2);
                        var ambiguousResults = results.Where(item => item.Score >= classifyingScore).ToList();

                        if (ambiguousResults.Count > 1)
                        {
                            // create a RecognizerResult for each ambiguous result.
                            var recognizerResults = ambiguousResults.Select(result => new RecognizerResult()
                            {
                                Text        = text,
                                AlteredText = result.ClosestText,
                                Entities    = recognizerResult.Entities,
                                Properties  = recognizerResult.Properties,
                                Intents     = new Dictionary <string, IntentScore>()
                                {
                                    { result.Label.Name, new IntentScore()
                                      {
                                          Score = result.Score
                                      } }
                                },
                            });

                            // replace RecognizerResult with ChooseIntent => Ambiguous recognizerResults as candidates.
                            recognizerResult = CreateChooseIntentResult(recognizerResults.ToDictionary(result => Guid.NewGuid().ToString(), result => result));
                        }
                    }
                }
            }
            else
            {
                // Return 'None' if no intent matched.
                recognizerResult.Intents.Add(NoneIntent, new IntentScore()
                {
                    Score = 1.0
                });
            }

            await dc.Context.TraceActivityAsync($"{nameof(OrchestratorAdaptiveRecognizer)}Result", JObject.FromObject(recognizerResult), nameof(OrchestratorAdaptiveRecognizer), "Orchestrator Recognition", cancellationToken).ConfigureAwait(false);

            TrackRecognizerResult(dc, $"{nameof(OrchestratorAdaptiveRecognizer)}Result", FillRecognizerResultTelemetryProperties(recognizerResult, telemetryProperties, dc), telemetryMetrics);

            return(recognizerResult);
        }
Ejemplo n.º 14
0
        public async Task <object> Handle(DesignHub hub, InvokeArgs args)
        {
            //读取参数
            int    selectedNodeType = args.GetInt32();
            string selectedNodeId   = args.GetString();
            string name             = args.GetString();

            if (string.IsNullOrEmpty(name))
            {
                throw new Exception("名称不能为空");
            }

            //获取选择的节点
            var selectedNode = hub.DesignTree.FindNode((DesignNodeType)selectedNodeType, selectedNodeId);

            if (selectedNode == null)
            {
                throw new Exception("无法找到当前节点");
            }
            //根据选择的节点获取合适的插入位置
            var parentNode = hub.DesignTree.FindNewFolderParentNode(selectedNode, out uint appId, out ModelType modelType);

            if (parentNode == null)
            {
                throw new Exception("无法找到上级节点");
            }
            if (parentNode.Nodes.Exists(t => t.NodeType == DesignNodeType.FolderNode && t.Text == name))
            {
                throw new Exception("当前目录下已存在同名文件夹");
            }

            //判断当前模型根节点有没有签出
            var  rootNode            = hub.DesignTree.FindModelRootNode(appId, modelType);
            bool rootNodeHasCheckout = rootNode.IsCheckoutByMe;

            if (!await rootNode.Checkout())
            {
                throw new Exception($"Can't checkout: {rootNode.FullName}");
            }
            ////注意:需要重新引用上级文件夹节点,因自动签出上级节点可能已重新加载
            //if (!rootNodeHasCheckout && parentNode.NodeType == DesignNodeType.FolderNode)
            //{
            //    parentNode = rootNode.FindFolderNode(((FolderNode)parentNode).Folder.ID);
            //    if (parentNode == null)
            //        throw new Exception("上级节点已不存在,请刷新重试");
            //}

            // 判断选择节点即parentNode是文件夹还是模型根节点
            ModelFolder model = null;

            if (parentNode.NodeType == DesignNodeType.FolderNode)
            {
                model = new ModelFolder(((FolderNode)parentNode).Folder, name);
            }
            else if (parentNode.NodeType == DesignNodeType.ModelRootNode)
            {
                //判断是否存在根文件夹
                if (rootNode.RootFolder == null)
                {
                    rootNode.RootFolder = new ModelFolder(appId, rootNode.TargetType);
                }
                model = new ModelFolder(rootNode.RootFolder, name);
            }
            else
            {
                throw new Exception("不允许在此节点创建文件夹");
            }

            var node = new FolderNode(model);
            //添加至设计树
            var insertIndex = parentNode.Nodes.Add(node);

            // 添加至根节点索引内
            rootNode.AddFolderIndex(node);
            // 保存到本地
            await node.SaveAsync();

            return(new NewNodeResult
            {
                ParentNodeType = (int)parentNode.NodeType,
                ParentNodeID = parentNode.ID,
                NewNode = node,
                RootNodeID = rootNodeHasCheckout ? null : rootNode.ID,
                InsertIndex = insertIndex
            });
        }
Ejemplo n.º 15
0
 /// <summary>
 /// 移除新建的根目录所保存的本地缓存
 /// </summary>
 internal static void RemoveRootFolderCache(ModelFolder folder)
 {
     throw ExceptionHelper.NotImplemented();
     // string path = PathService.GetFolderPath(folder, true);
     // FileCacheService.DeleteCache(path);
 }
Ejemplo n.º 16
0
 public FolderNode(ModelFolder folder)
 {
     Folder = folder;
     Text   = Folder.Name;
 }