Example #1
0
        /// <summary>
        /// 获取消息
        /// </summary>
        /// <typeparam name="TInfo"></typeparam>
        /// <param name="handler"></param>
        /// <param name="error"></param>
        public bool GetInfo <TInfo>(Action <List <TInfo>, int, int> handler, Action <ErrorResult> error) where TInfo : IInfo
        {
            // 测试连接状态
            if (!TryConnect(error))
            {
                return(false);
            }
            // 获取信息环境准备
            var are  = new AutoResetEvent(false);
            var flag = false;
            var cmd  = Command.Create(typeof(TInfo).Name);
            var info = new InfoHandler <TInfo>(Serial)
            {
                DataHandler = handler,
                Exit        = success =>
                {
                    flag = success;
                    are.Set();
                }
            };

            // 开始获取数据
            info.BeginGetInfo(cmd.ToString(), error);
            are.WaitOne();
            return(flag);
        }
Example #2
0
        /// <summary>
        /// 获取文件列表
        /// </summary>
        /// <param name="dir"></param>
        /// <param name="progress"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public List <AnFile> GetFileList(string dir, Action <int, int> progress, Action <ErrorResult> error)
        {
            // 获取AnFile列表
            var are   = new AutoResetEvent(false);
            var files = new List <AnFile>();

            // 测试连接状态
            if (!TryConnect(error))
            {
                return(null);
            }
            // 获取信息
            var cmd  = Command.Create(typeof(AnFile).Name);
            var info = new InfoHandler <AnFile>(Serial)
            {
                DataHandler = (infos, current, total) =>
                {
                    files.AddRange(infos);
                    progress?.Invoke(current, total);
                },
                // 处理退出事件
                Exit = success => { are.Set(); }
            };

            info.BeginGetInfo(cmd.ToString(), error);
            are.WaitOne();
            if (files.Count == 0)
            {
                return(null);
            }
            // 解析Anfile
            var root = new List <AnFile>();

            foreach (var file in files.FindAll(file => file.IsRoot))
            {
                root.Add(file);
                AnFile.Prepare(file, files);
            }
            return(root);
        }