Пример #1
0
        /// <summary>
        /// 终止
        /// </summary>
        /// <param name="dataid"></param>
        /// <param name="abandon"></param>
        /// <returns></returns>
        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 dataCount  = cache.Get <int>(DataCountKey);
            var dataResult = new DataResult();

            dataResult.DataId     = dataid;
            dataResult.SplitCount = dataCount;

            //清理缓存中的东西
            cache.Clear();
            cache = null;

            return(dataResult);
        }
Пример #2
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);
        }
Пример #3
0
        /// <summary>
        /// 告诉服务器开始传递数据,把传递数据的 action id , 数据总分节数通知服务器
        /// 让服务器开辟内存等待处理
        /// </summary>
        /// <param name="info"></param>
        public void Begin(DataInfo info)
        {
            if (!AuthenticationHelper.AuthServiceHeader())
            {
                LogHelper.Debug(GetType(), "权限校验不通过");
                throw new SoapHeaderException();
            }

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

            actionID = info.DataId;
            cache.Add(DataKey, info);
        }
Пример #4
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);
        }
Пример #5
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);
            }
        }
Пример #6
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);
            }
        }