Esempio n. 1
0
        /// <summary>
        ///  Запись происходит в один поток, так как требуется упорядочить сжатые блоки по Id через Hashtable
        /// </summary>
        private void WritingThread(object obj)
        {
            FileDescriptor writeFileDescriptor = obj as FileDescriptor;

            try
            {
                using (FileStream writeFileStream = writeFileDescriptor.GetDescription.OpenWrite())
                {
                    while (_lastWritedBlock < _totalCount && !_cancellationToken.IsCancellationRequested)
                    {
                        ITaskInfo taskInfo = _writeTaskPool.NextTask() as ITaskInfo;
                        if (taskInfo == null)
                        {
                            Thread.Sleep(1);
                            continue;
                        }
                        taskInfo.Execute(writeFileStream);
                        _lastWritedBlock++;
                    }
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error on file writing");
#if DEBUG
                Console.WriteLine(exc);
#endif
            }
        }
Esempio n. 2
0
        public async Task AddAsync(ITaskInfo task)
        {
            var context = _contextStorage.Get();

            context.Tasks.Add(new TaskEntity(task));
            await context.SaveChangesAsync();
        }
 public PlayerCompletedTaskEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, ITaskInfo task)
 {
     Game          = game;
     ClientPlayer  = clientPlayer;
     PlayerControl = playerControl;
     Task          = task;
 }
 public void AddTask(ITaskInfo task)
 {
     lock (this)
     {
         _tasksInfo.Add(task.GetId(), task);
     }
 }
Esempio n. 5
0
        protected virtual void TaskDistribution(string serverCode, ITaskInfo taskInfo)
        {
            IEnumerator enumor = ServerManager.GetServerEnumerator();

            taskInfo.EmitServerCode = serverCode;
            if (enumor != null)
            {
                while (enumor.MoveNext())
                {
                    IServerInfo s = (IServerInfo)enumor.Current;
                    if (string.Compare(serverCode, s.ServerCode, true) != 0 && //去掉自己发给自己
                        taskInfo.EmitServerCode != s.ServerCode)     //去掉发给源服务器
                    {
                        if (s.ServerStatus == ServerStatus.Active &&
                            TaskAllocAlgFactory.GetProvider().Alloc(taskInfo, s))
                        {
                            try
                            {
                                Console.WriteLine("正在往" + s.ServerCode + "服务器分发数据");
                                ITaskRequest request     = RegisterService.TaskRequestService.GetService(s.ServerCode);
                                ITaskInfo    disTaskInfo = request.SendRequest(s.ServerCode, taskInfo);
                            }
                            catch (Exception ex)
                            {
                                s.ServerStatus = ServerStatus.Shutdown;
                                Console.WriteLine("向" + s.ServerCode + "服务器分发数据失败,异常信息为:" + ex.Message + "|" + ex.Source + "|" + ex.StackTrace);
                            }
                        }
                    }
                }
            }
        }
 public void AddTask(ITaskInfo task)
 {
     lock (this)
     {
         _tasksInfo.Enqueue(task);
     }
 }
Esempio n. 7
0
 public virtual ITaskInfo Handle(string serverCode, ITaskInfo taskInfo)
 {
     try
     {
         IServerInfo s = ServerManager.Get(serverCode);
         if (s.ServerStatus == ServerStatus.Active)
         {
             if (s.TaskBeginHandler != null)
             {
                 s.TaskBeginHandler(serverCode, taskInfo);
             }
             if (s.TaskHandler != null)
             {
                 s.TaskHandler(serverCode, taskInfo);
             }
             if (s.TaskEndHandler != null)
             {
                 s.TaskEndHandler(serverCode, taskInfo);
             }
         }
     }
     catch (Exception ex)
     {
         taskInfo.TaskRemark  = ex.Message + "|" + ex.Source + "|" + ex.StackTrace;
         taskInfo.TaskProcess = TaskProcess.Completed;
         taskInfo.TaskStatus  = TaskStatus.Failed;
     }
     return(taskInfo);
 }
Esempio n. 8
0
        public static ITaskHandle CreateTaskHandle(ITaskInfo taskInfo)
        {
            ITaskHandle handle = null;

            lock (m_taskHandleObj)
            {
                m_taskHandleDic.TryGetValue(taskInfo.TaskName, out handle);
            }
            if (handle == null)
            {
                string type = TaskHandleManager.GetHandle(taskInfo.TaskName);
                if (!string.IsNullOrEmpty(type))
                {
                    Type t = Type.GetType(type);
                    if (type.IndexOf(",") > 0)
                    {
                        string[]     arr = type.Split(new char[] { ',' });
                        ObjectHandle oh  = Activator.CreateInstance(arr[1].Trim(), arr[0].Trim());
                        if (oh != null)
                        {
                            handle = oh.Unwrap() as ITaskHandle;
                            lock (m_taskHandleObj)
                            {
                                m_taskHandleDic.Add(taskInfo.TaskName, handle);
                            }
                        }
                    }
                }
            }
            return(handle);
        }
Esempio n. 9
0
        /// <summary>
        /// Сжатие и генерация задач записи работает в том количестве потоков, сколько процессоров доступно системе,
        /// давая распределённую и почти 100% нагрузку на все ядра процессора
        /// </summary>
        private void CompressingThread()
        {
            try
            {
                while (_lastZippedBlock < _totalCount && !_cancellationToken.IsCancellationRequested)
                {
                    // Защита от переполнения памяти
                    if (_writeTaskPool.TaskCount() > _maxTasks)
                    {
                        Thread.Sleep(_sleep);
                        continue;
                    }
                    ITaskInfo taskInfo = _compressTaskPool.NextTask();
                    if (taskInfo == null)
                    {
                        Thread.Sleep(_sleep);
                        continue;
                    }
                    _writeTaskPool.AddTask(_taskFactory.CreateWriteTaskInfo(taskInfo.GetId(), taskInfo.Execute(null) as byte[]));
                    _lastZippedBlock++;
                }
#if DEBUG
                Console.WriteLine("End of compressing");
#endif
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error on file compressing");
#if DEBUG
                Console.WriteLine(exc);
#endif
            }
        }
Esempio n. 10
0
 public HomeController(ITaskInfo taskInfo, IUserInfo userInfo, ICharacterInfo characterInfo, ITaskManager taskManager, IQuestLogic questLogic)
 {
     _taskInfo      = taskInfo;
     _taskManager   = taskManager;
     _userInfo      = userInfo;
     _characterInfo = characterInfo;
     _questLogic    = questLogic;
 }
 private string GetJITInfo(ITaskInfo someTaskInfo, IAccessProperty somePropInfo)
 {
     if(mJITChecker == null)
     {
         return "N/A";
     }
     return mJITChecker(someTaskInfo.Task,somePropInfo.FullPath) ? "yes" : "no";
 }
Esempio n. 12
0
 private string GetJITInfo(ITaskInfo someTaskInfo, IAccessProperty somePropInfo)
 {
     if (mJITChecker == null)
     {
         return("N/A");
     }
     return(mJITChecker(someTaskInfo.Task, somePropInfo.FullPath) ? "yes" : "no");
 }
Esempio n. 13
0
        public ITaskInfo SendRequest(string serverCode, ITaskInfo taskInfo)
        {
            ITaskHandle taskHandle = TaskHandleFactory.CreateTaskHandle(taskInfo);

            if (taskHandle != null)
            {
                return(taskHandle.Handle(serverCode, taskInfo));
            }
            return(null);
        }
Esempio n. 14
0
 protected virtual void TaskDistribution(object obj)
 {
     object[] objArr = obj as object[];
     if (objArr != null && objArr.Length == 2)
     {
         string    serverCode = (string)objArr[0];
         ITaskInfo taskInfo   = (ITaskInfo)objArr[1];
         TaskDistribution(serverCode, taskInfo);
     }
 }
Esempio n. 15
0
 public TaskEntity(ITaskInfo taskInfo)
 {
     Name           = taskInfo.Name;
     Description    = taskInfo.Description;
     Priority       = taskInfo.Priority;
     TimeToComplete = taskInfo.TimeToComplete;
     Added          = taskInfo.Added;
     FeatureId      = taskInfo.FeatureId;
     Status         = TaskStatus.Active;
 }
Esempio n. 16
0
 public async Task AddAsync(int userId, ITaskInfo task)
 {
     if (await _projectsDataAccessor.IsProjectCreator(userId, task.FeatureId.Value) ||
         await _permissionsDataAccessor.HasPermissionForFeature(userId, task.FeatureId.Value, Permission.CreateTask))
     {
         await _taskDataAccessor.AddAsync(task);
     }
     else
     {
         throw new NoPermissionsForOperationException(ErrorMessages.NoPermissionsForOperation);
     }
 }
Esempio n. 17
0
        public override ITaskInfo Handle(string serverCode, ITaskInfo taskInfo)
        {
            try
            {
                LogMessageTaskInfo log = taskInfo as LogMessageTaskInfo;
                IServerInfo        s   = ServerManager.Get(serverCode);

                if (log != null && s != null && s.ServerStatus == ServerStatus.Active)
                {
                    if (s.TaskBeginHandler != null)
                    {
                        s.TaskBeginHandler(serverCode, taskInfo);
                    }
                    if (s.TaskHandler != null)
                    {
                        s.TaskHandler(serverCode, taskInfo);
                    }
                    else
                    {
                        MsmqLogger logger = MsmqLogger.GetInstance();
                        if (log.IsList)
                        {
                            List <LogMessage> ls = log.CurrLogMessageList;
                            foreach (LogMessage logMessage in ls)
                            {
                                logger.SendMessage(logMessage);
                            }
                            taskInfo.TaskProcess = TaskProcess.Completed;
                            taskInfo.TaskStatus  = TaskStatus.Success;
                        }
                        else
                        {
                            LogMessage lm = log.CurrLogMessage;
                            logger.SendMessage(lm);
                            taskInfo.TaskProcess = TaskProcess.Completed;
                            taskInfo.TaskStatus  = TaskStatus.Success;
                        }
                    }
                    if (s.TaskEndHandler != null)
                    {
                        s.TaskEndHandler(serverCode, taskInfo);
                    }
                }
            }
            catch (Exception ex)
            {
                taskInfo.TaskRemark  = ex.Message + "|" + ex.Source + "|" + ex.StackTrace;
                taskInfo.TaskProcess = TaskProcess.Completed;
                taskInfo.TaskStatus  = TaskStatus.Failed;
            }
            return(taskInfo);
        }
        public ITaskInfo NextTask()
        {
            ITaskInfo task = null;

            lock (this)
            {
                if (IsHasTasks())
                {
                    task = _tasksInfo.Dequeue();
                }
            }
            return(task);
        }
        public ITaskInfo NextTask()
        {
            ITaskInfo task = null;

            lock (this)
            {
                if (IsHasTasks())
                {
                    if (_tasksInfo.ContainsKey(_last))
                    {
                        task = _tasksInfo[_last] as ITaskInfo;
                        _tasksInfo.Remove(_last++);
                    }
                }
            }
            return(task);
        }
Esempio n. 20
0
 public Task AddTaskToUser(int userId, int taskId, TaskStatus status, ITaskInfo taskInfo)
 {
     return(_context.Users.UpdateOneAsync(x => x.UserId == userId && !x.Tasks.Any(y => y.Id == taskId),
                                          Builders <UserEntity> .Update.Push(x => x.Tasks, new TaskEntity
     {
         Id = taskId,
         Added = taskInfo.Added,
         TimeToComplete = taskInfo.TimeToComplete,
         FeatureId = taskInfo.FeatureId,
         Name = taskInfo.Name,
         Description = taskInfo.Description,
         Priority = taskInfo.Priority,
         Status = status
     }), new UpdateOptions {
         IsUpsert = true
     }));
 }
Esempio n. 21
0
        /// <summary>
        /// Метод для потока чтения. Чтение и генерация задач сжатия происходит в 1 поток, что даёт максимальную нагрузку на диск
        /// </summary>
        /// <param name="obj">
        /// Дескриптор файла для записи
        /// </param>
        private void ReadingThread(object obj)
        {
            FileDescriptor read_file = obj as FileDescriptor;

            try
            {
                using (FileStream _fileToBeCompressed = read_file.GetDescription.OpenRead())
                {
                    Int64 lastBlock = 0;
                    while (lastBlock < _totalCount && !_cancellationToken.IsCancellationRequested)
                    {
                        // Защита от переполнения памяти
                        if (_compressTaskPool.TaskCount() > _maxTasks * _cores)
                        {
                            Thread.Sleep(1);
                            continue;
                        }
                        ITaskInfo taskInfo = null;
                        taskInfo = _readTaskPool.NextTask();
                        if (taskInfo == null)
                        {
                            Thread.Sleep(_sleep);
                            continue;
                        }
                        _compressTaskPool.AddTask(_taskFactory.CreateProcessTaskInfo(lastBlock++, (taskInfo.Execute(_fileToBeCompressed) as byte[])));
                    }
#if DEBUG
                    Console.WriteLine("End of reading");
#endif
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error on file reading");
#if DEBUG
                Console.WriteLine(exc);
#endif
            }
        }
        /// <summary>
        /// Метод для потока чтения. Чтение и генерация задач сжатия происходит в 1 поток, что даёт максимальную нагрузку на диск
        /// </summary>
        /// <param name="obj">
        /// Дескриптор файла для чтения
        /// </param>
        private void ReadingThread(object obj)
        {
            FileDescriptor readFile = obj as FileDescriptor;

            _fileLength = readFile.GetDescription.Length;
            try
            {
                using (FileStream fileToBeDecompressed = readFile.GetDescription.OpenRead())
                {
                    // Читать блоки архива, пока не закончится файл
                    while (fileToBeDecompressed.Position < _fileLength && !_cancellationToken.IsCancellationRequested)
                    {
                        _position = fileToBeDecompressed.Position;
                        // Защита от переполнения памяти
                        if (_compressTaskPool.TaskCount() > _maxTasks * _cores)
                        {
                            Thread.Sleep(_sleep);
                            continue;
                        }
                        ITaskInfo task = _taskFactory.CreateReadTaskInfo(_batchCount, 0);
                        _compressTaskPool.AddTask(_taskFactory.CreateProcessTaskInfo(_batchCount++, task.Execute(fileToBeDecompressed) as byte[]));
                    }
                    _isReading = false;
#if DEBUG
                    Console.WriteLine("End of reading");
#endif
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error on file reading");
#if DEBUG
                Console.WriteLine(exc);
#endif
            }
        }
Esempio n. 23
0
 public override ITaskInfo Handle(string serverCode, ITaskInfo taskInfo)
 {
     taskInfo.TaskProcess = TaskProcess.Completed;
     taskInfo.TaskStatus  = TaskStatus.Success;
     return(taskInfo);
 }
Esempio n. 24
0
        public override ITaskInfo Handle(string serverCode, ITaskInfo taskInfo)
        {
            GetFileTransTaskInfo task = taskInfo as GetFileTransTaskInfo;

            try
            {
                string[] res = Directory.GetFiles(@"D:\APP\JinRi.App.Server\", "*.txt");
                task.AllFiles = string.Join("|", res);
            }
            catch (Exception)
            {
            }

            IServerInfo serverInfo = ServerManager.Get(serverCode);

            try
            {
                if (serverInfo.TaskBeginHandler != null)
                {
                    serverInfo.TaskBeginHandler(serverCode, taskInfo);
                }
                if (serverInfo.TaskHandler != null)
                {
                    serverInfo.TaskHandler(serverCode, taskInfo);
                }
                else
                {
                    if (task.TransProcess == FileTransProcess.TransDatas)
                    {
                        string filename = task.Filename;
                        if (File.Exists(filename))
                        {
                            using (FileStream stream = new FileStream(filename, FileMode.Open))
                            {
                                task.FileLength = (int)stream.Length;

                                task.ReadedBytes = Math.Min(task.FileLength - task.StartPos, task.ReadedBytes);

                                if (task.ReadedBytes > 0)
                                {
                                    stream.Position  = task.StartPos;
                                    task.Data        = new byte[task.ReadedBytes];
                                    task.ReadedBytes = stream.Read(task.Data, 0, task.ReadedBytes);
                                    stream.Close();
                                }
                                else
                                {
                                    task.ReadedBytes = 0;
                                }
                            }
                        }
                        else
                        {
                            task.ReadedBytes = 0;
                        }

                        task.TaskStatus       = TaskStatus.Success;
                        task.EmitServerCode   = serverInfo.ServerCode;
                        task.TransProcess     = FileTransProcess.TransDatas;
                        task.TaskCompleteTime = DateTime.Now;
                    }
                }
                if (serverInfo.TaskEndHandler != null)
                {
                    serverInfo.TaskEndHandler(serverCode, taskInfo);
                }
            }
            catch (Exception ex)
            {
                task.TaskRemark = ex.Message + "|" + ex.Source + "|" + ex.StackTrace;
                task.TaskStatus = TaskStatus.Failed;
            }

            return(task);
        }
Esempio n. 25
0
        public override ITaskInfo Handle(string serverCode, ITaskInfo taskInfo)
        {
            FileTransTaskInfo task       = taskInfo as FileTransTaskInfo;
            IServerInfo       serverInfo = ServerManager.Get(serverCode);

            try
            {
                if (serverInfo.TaskBeginHandler != null)
                {
                    serverInfo.TaskBeginHandler(serverCode, taskInfo);
                }
                if (serverInfo.TaskHandler != null)
                {
                    serverInfo.TaskHandler(serverCode, taskInfo);
                }
                else
                {
                    if (task.TransProcess == FileTransProcess.TransDatas)
                    {
                        ITaskInfo newTask = null;
                        if (serverInfo.IsDistributionServer)
                        {
                            newTask = (ITaskInfo)taskInfo.Clone();
                        }
                        if (task.Data != null && task.Data.Length > 0)
                        {
                            string     filename = task.SaveFilename;
                            FileStream fs       = null;
                            if (!File.Exists(filename))
                            {
                                fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
                            }
                            else
                            {
                                fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
                            }
                            task.TaskStartTime = DateTime.Now;
                            fs.Write(task.Data, 0, task.Data.Length);
                            fs.Close();
                            task.TaskStatus = TaskStatus.Success;

                            if (serverInfo.IsDistributionServer)
                            {
                                Console.WriteLine("开始分发数据");
                                object[] objArr = new object[] { serverCode, newTask };
                                ThreadPool.QueueUserWorkItem(new WaitCallback(TaskDistribution), objArr);
                            }
                            task.EmitServerCode   = serverInfo.ServerCode;
                            task.TransProcess     = FileTransProcess.TransDatas;
                            task.Data             = null;
                            task.TaskCompleteTime = DateTime.Now;
                        }
                    }
                }
                if (serverInfo.TaskEndHandler != null)
                {
                    serverInfo.TaskEndHandler(serverCode, taskInfo);
                }
            }
            catch (Exception ex)
            {
                task.TaskRemark = ex.Message + "|" + ex.Source + "|" + ex.StackTrace;
                task.TaskStatus = TaskStatus.Failed;
            }

            return(task);
        }
Esempio n. 26
0
 /// <summary>
 /// 分布式任务分配算法
 /// </summary>
 /// <param name="taskInfo">任务信息</param>
 /// <param name="info">服务器信息</param>
 /// <returns>是否在此服务器上执行任务(true:是,false:否)</returns>
 public bool Alloc(ITaskInfo taskInfo, IServerInfo info)
 {
     return(true);
 }
Esempio n. 27
0
        public virtual object  Execute(ICommandContext commandContext)
        {
            if (task == null)
            {
                throw new ActivitiIllegalArgumentException("task is null");
            }

            if (task.Revision == 0)
            {
                commandContext.TaskEntityManager.Insert(task, null);

                if (commandContext.EventDispatcher.Enabled)
                {
                    commandContext.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.TASK_CREATED, task));
                    if (!(task.Assignee is null))
                    {
                        commandContext.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.TASK_ASSIGNED, task));
                    }
                }
            }
            else
            {
                ITaskInfo originalTaskEntity = null;
                if (commandContext.ProcessEngineConfiguration.HistoryLevel.IsAtLeast(HistoryLevel.AUDIT))
                {
                    originalTaskEntity = commandContext.HistoricTaskInstanceEntityManager.FindById <IHistoricTaskInstanceEntity>(new KeyValuePair <string, object>("historicTaskInstanceId", task.Id));
                }

                if (originalTaskEntity == null)
                {
                    originalTaskEntity = commandContext.TaskEntityManager.FindById <ITaskEntity>(task.Id);
                }

                string   originalName              = originalTaskEntity.Name;
                string   originalAssignee          = originalTaskEntity.Assignee;
                string   originalOwner             = originalTaskEntity.Owner;
                string   originalDescription       = originalTaskEntity.Description;
                DateTime?originalDueDate           = originalTaskEntity.DueDate;
                int?     originalPriority          = originalTaskEntity.Priority;
                string   originalCategory          = originalTaskEntity.Category;
                string   originalFormKey           = originalTaskEntity.FormKey;
                string   originalParentTaskId      = originalTaskEntity.ParentTaskId;
                string   originalTaskDefinitionKey = originalTaskEntity.TaskDefinitionKey;

                // Only update history if history is enabled
                if (commandContext.ProcessEngineConfiguration.HistoryLevel.IsAtLeast(HistoryLevel.AUDIT))
                {
                    if (originalName != task.Name)
                    {
                        commandContext.HistoryManager.RecordTaskNameChange(task.Id, task.Name);
                    }
                    if (originalDescription != task.Description)
                    {
                        commandContext.HistoryManager.RecordTaskDescriptionChange(task.Id, task.Description);
                    }
                    if ((!originalDueDate.HasValue && task.DueDate.HasValue) || (originalDueDate.HasValue && !task.DueDate.HasValue) || (originalDueDate.HasValue && !originalDueDate.Equals(task.DueDate)))
                    {
                        commandContext.HistoryManager.RecordTaskDueDateChange(task.Id, task.DueDate.Value);
                    }
                    if (originalPriority != task.Priority)
                    {
                        commandContext.HistoryManager.RecordTaskPriorityChange(task.Id, task.Priority);
                    }
                    if (originalCategory != task.Category)
                    {
                        commandContext.HistoryManager.RecordTaskCategoryChange(task.Id, task.Category);
                    }
                    if (originalFormKey != task.FormKey)
                    {
                        commandContext.HistoryManager.RecordTaskFormKeyChange(task.Id, task.FormKey);
                    }
                    if (originalParentTaskId != task.ParentTaskId)
                    {
                        commandContext.HistoryManager.RecordTaskParentTaskIdChange(task.Id, task.ParentTaskId);
                    }
                    if (originalTaskDefinitionKey != task.TaskDefinitionKey)
                    {
                        commandContext.HistoryManager.RecordTaskDefinitionKeyChange(task.Id, task.TaskDefinitionKey);
                    }
                }

                if (originalOwner != task.Owner)
                {
                    if (!(task.ProcessInstanceId is null))
                    {
                        commandContext.IdentityLinkEntityManager.InvolveUser(task.ProcessInstance, task.Owner, IdentityLinkType.PARTICIPANT);
                    }
                    commandContext.HistoryManager.RecordTaskOwnerChange(task.Id, task.Owner);
                }
                if (originalAssignee != task.Assignee)
                {
                    if (!(task.ProcessInstanceId is null))
                    {
                        commandContext.IdentityLinkEntityManager.InvolveUser(task.ProcessInstance, task.Assignee, IdentityLinkType.PARTICIPANT);
                    }
                    commandContext.HistoryManager.RecordTaskAssigneeChange(task.Id, task.Assignee, task.AssigneeUser);

                    commandContext.ProcessEngineConfiguration.ListenerNotificationHelper.ExecuteTaskListeners(task, BaseTaskListenerFields.EVENTNAME_ASSIGNMENT);
                    commandContext.HistoryManager.RecordTaskAssignment(task);

                    if (commandContext.EventDispatcher.Enabled)
                    {
                        commandContext.EventDispatcher.DispatchEvent(ActivitiEventBuilder.CreateEntityEvent(ActivitiEventType.TASK_ASSIGNED, task));
                    }
                }

                commandContext.TaskEntityManager.Update(task);
            }


            return(null);
        }
Esempio n. 28
0
        //分布式批量提交数据到远程
        /// <summary>
        /// 分布式批量提交数据到远程
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="isHandle"></param>
        private static void BatchSendRequest(object obj, bool isHandle)
        {
            //获取日志实体列表
            IDataBuffer buffer = obj as IDataBuffer;

            if (buffer == null)
            {
                return;
            }
            List <LogMessage> logMessageList = buffer.GetList <LogMessage>();

            if (logMessageList == null)
            {
                return;
            }

            if (m_openLogCenter)
            {
#if THRIFT
                try
                {
                    SyncLogServerEvent.WaitOne();
                    SendRequestToNewLogCenter(logMessageList);
                    if (logMessageList.Count > 1 && DateTime.Now > lastExecuteLogTime.AddMinutes(5))
                    {
                        lastExecuteLogTime = DateTime.Now;
                        string content = string.Format("本次批量插入{0}条数据,结果:{1},IsHandle:{2}", logMessageList.Count, "Success", isHandle);
                        RecordLogCenterState("分布式日志2.0", content, isHandle, true);
                    }
                    AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V2.ToString()) });
                    return;
                }
                catch (Exception ex)
                {
                    AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V2.ToString()) });
                    m_localLog.Error(ex);
                    string content = string.Format("批量插入数据异常,原因:{0},IsHandle:{1}", ex.ToString(), isHandle);
                    RecordLogCenterState("分布式日志2.0", content, isHandle, false);
                }
#endif
            }
            else
            {
                try
                {
                    LogMessageTaskInfo taskInfo = new LogMessageTaskInfo
                    {
                        CurrLogMessageObj = logMessageList,
                        TaskCreateTime    = DateTime.Now,
                        TaskName          = "LogMessage",
                        EmitServerCode    = m_localServerCode
                    };

                    //发送日志实体列表到远程消息队列
                    ITaskInfo retTask = m_request.SendRequest(m_logToServer, taskInfo);

                    if (logMessageList.Count > 1 &&
                        DateTime.Now > lastExecuteLogTime.AddMinutes(5))
                    {
                        lastExecuteLogTime = DateTime.Now;
                        string content = string.Format("本次批量插入{0}条数据,结果:{1},IsHandle:{2}", logMessageList.Count, retTask.TaskStatus, isHandle);
                        RecordLogCenterState("分布式日志1.0", content, isHandle, retTask.TaskStatus == TaskStatus.Success);
                    }

                    if (retTask.TaskStatus == TaskStatus.Success)
                    {
#if THRIFT
                        AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V1.ToString()) });
#endif
                        return;
                    }
                }
                catch (Exception ex)
                {
#if THRIFT
                    AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.V1.ToString()) });
#endif
                    m_localLog.Error(ex);
                    string content = string.Format("批量插入数据异常,原因:{0},IsHandle:{1}", ex.ToString(), isHandle);
                    RecordLogCenterState("分布式日志1.0", content, isHandle, false);
                }
            }
            int insertResult = LogMessageDAL.GetInstance().Insert(buffer.GetEnumerator(), isHandle);
#if THRIFT
            if (insertResult > 0)
            {
                AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Success.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.Local.ToString()) });
            }
            else
            {
                AppMetricsKeys.LogCenterClient.MeterMark(MetricsEnum.Failed.ToString(), new string[] { string.Format("Client={0}", MetricsTagEnum.Local.ToString()) });
            }
#endif
            RecordLogCenterState("本地批量保存日志", string.Format("本地批量插入{0}条数据, IsHandler: {1}", logMessageList.Count, isHandle), isHandle, false);
        }