コード例 #1
0
        /// <summary>
        /// 开始拉数据
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public DataInfo Begin(DataParameter parameter)
        {
            if (!AuthenticationHelper.AuthServiceHeader())
            {
                LogHelper.Debug(GetType(), "权限校验不通过");
                return(null);
            }

            LogHelper.Debug(GetType(), "开始准备数据" + LogInfo.ObjectToMessage(parameter));
            var dataInfo = new DataInfo();

            actionID = Guid.NewGuid().ToString();

            dataInfo.ActionId = parameter.Action;
            dataInfo.DataId   = actionID;

            cache = new AspnetCache(actionID);

            //todo:根据action取得字符串
            var test = @"Testtest";

            var processFactory = new DataProcessFactory();
            var data           = processFactory.ProcessToString(test);
            var dataCount      = (int)Math.Ceiling(data.Length / (double)dataLength);

            //存于缓存中
            cache.Add(DataKey, data);
            cache.Add(DataCountKey, dataCount);
            dataInfo.SpliteCount = dataCount;

            return(dataInfo);
        }
コード例 #2
0
        public void DataProcessFactoryCheckDataSegment()
        {
            var factory = new DataProcessFactory();
            var se      = factory.BuildDataSegment(0, "1", 1000, 1, "H4sIAAAAAAAEAONnZGBgqAAAyMMqIwYAAAA=");
            var x       = factory.CheckDataSegment(se);

            Assert.IsTrue(x);
        }
コード例 #3
0
        public void DataProcessFactoryCheckStringProcess()
        {
            var factory = new DataProcessFactory();
            var txt     = "x";
            var ptxt    = factory.ProcessToString(txt);
            var dtxt    = factory.ProcessToObject <string>(ptxt);

            Assert.AreEqual(txt, dtxt);
        }
コード例 #4
0
 /// <summary>
 /// 初始化
 /// </summary>
 public PullDataClient()
 {
     DataService = AppCtx.Resolve<IPullDataService>("PullService");
     if (DataService == null)
     {
         LogHelper.Debug(GetType(), "获取接口失败");
         throw new InvalidCastException("获取接口IPullDataService失败");
     }
     ProcessFactory = new DataProcessFactory();
 }
コード例 #5
0
        public void DataProcessFactoryByteProcess()
        {
            var factory = new DataProcessFactory();
            var txt     = "halkfjklsdfjowjflskdfjlsfjls";
            var bytes   = StringByteConver.ToByte(txt);
            var ptxt    = factory.Process(bytes);
            var dtxt    = factory.DeProcess(ptxt);
            var result  = StringByteConver.ToString(dtxt);

            Assert.AreEqual(txt, result);
        }
コード例 #6
0
        public void DataProcessFactoryTest()
        {
            var factory = new DataProcessFactory();
            var info    = new DataInfo();

            info.ActionId    = 1;
            info.DataId      = "sss";
            info.SpliteCount = 10;

            var bytes = factory.ProcessToString(info);

            var info2 = factory.ProcessToObject <DataInfo>(bytes);

            Assert.AreEqual(info.DataId, info2.DataId);
        }
コード例 #7
0
        /// <summary>
        /// 拉数据
        /// </summary>
        /// <param name="dataid"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public DataSegment Pull(string dataid, int index)
        {
            if (!AuthenticationHelper.AuthServiceHeader())
            {
                LogHelper.Debug(GetType(), "权限校验不通过");
                return(null);
            }

            LogHelper.Debug(GetType(), string.Format("数据ID:{0},索引:{1}", dataid, index), "拉数据");
            if (cache == null)
            {
                cache = new AspnetCache(actionID);
            }

            var dataCount      = cache.Get <int>(DataCountKey);
            var content        = cache.Get <string>(DataKey);
            var processFactory = new DataProcessFactory();
            var dataSegment    = processFactory.BuildDataSegment(index, dataid, dataLength, dataCount, content);

            return(dataSegment);
        }
コード例 #8
0
        public void Push(DataSegment segment)
        {
            if (!AuthenticationHelper.AuthServiceHeader())
            {
                LogHelper.Debug(GetType(), "权限校验不通过");
                throw new SoapHeaderException();
            }

            LogHelper.Debug(GetType(), "推送数据", LogInfo.ObjectToMessage(segment));
            if (cache == null)
            {
                cache = new AspnetCache(actionID);
            }

            var processFactory = new DataProcessFactory();

            if (processFactory.CheckDataSegment(segment))
            {
                cache.Add(string.Format("{0}.{1}", segment.DataId, segment.Index), segment.DataString);
            }
        }
コード例 #9
0
        public DataResult End(string dataid, bool abandon)
        {
            if (!AuthenticationHelper.AuthServiceHeader())
            {
                LogHelper.Debug(GetType(), "权限校验不通过");
                return(null);
            }

            LogHelper.Debug(GetType(), string.Format("推送数据结束,数据ID为:{0},是否取消:{1}", dataid, abandon));
            if (abandon)
            {
                return(null);
            }

            if (cache == null)
            {
                cache = new AspnetCache(actionID);
            }

            var processFactory = new DataProcessFactory();

            var dataInfo   = cache.Get <DataInfo>(DataKey);
            var dataResult = new DataResult();
            var datalength = dataLength * dataInfo.SpliteCount;
            var sb         = new StringBuilder(datalength);
            var success    = true;

            for (int i = 0; i < dataInfo.SpliteCount; i++)
            {
                var data = cache.Get <string>(string.Format("{0}.{1}", dataid, i));
                if (string.IsNullOrEmpty(data))
                {
                    success = false;
                    break;
                }
                else
                {
                    sb.Append(data);
                }
            }

            if (success)
            {
                //解压
                var content = processFactory.ProcessToObject <string>(sb.ToString());

                var handler = AppCtx.Resolve <IDataHandler>(actionID);

                if (!handler.Validation(0, int.Parse(actionID)))
                {
                    //TODO: 无法通过校验,不进行处理
                }

                // handler.ProcessData<object>()


                //todo:推送完成

                #region 把内容写下来
                var          fileName     = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".log");
                FileStream   fs           = new FileStream(fileName, FileMode.Append);
                StreamWriter streamWriter = new StreamWriter(fs);
                streamWriter.BaseStream.Seek(0, SeekOrigin.End);
                streamWriter.Write(content);
                streamWriter.WriteLine(DateTime.Now.ToString(CultureInfo.CurrentCulture));
                streamWriter.Flush();
                streamWriter.Close();
                FileInfo fileInfo = new FileInfo(fileName);
                LogHelper.Debug(GetType(), string.Format("保存成文件,路径为:{0}", fileInfo.FullName), LogInfo.ObjectToMessage(fileInfo));
                #endregion

                dataResult.DataId = dataInfo.DataId;
                dataResult.Action = dataInfo.ActionId;
                cache.Add(ContentKey, dataResult);

                cache.Clear();
                cache = null;
                return(dataResult);
            }
            else
            {
                cache.Clear();
                cache = null;
                return(null);
            }
        }