Example #1
0
        public static void Run()
        {
            AppstoreClientManager.Current.InitConfig();
            InitProtoBufType();
            var dispatch = TaskDispatch.StartTask();

            dispatch.Add(new FightCombatTask());
            //dispatch.Start(););)

            lock (thisLock)
            {
                _isRunning = false;
            }
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            RegisterCacheSet();
            ConfigCacheGlobal.Load();
            LoadGlobalData();
            LoadUser();

            GameUser.Callback = new AsyncDataChangeCallback(UserHelper.TriggerUserCallback);
            //UserGeneral.EscalateHandle += UserHelper.TriggerGeneral;
            new GameActiveCenter(null);
            new GuildGameActiveCenter(null);

            InitRanking();
            stopwatch.Stop();
            new BaseLog().SaveLog("系统全局运行环境加载所需时间:" + stopwatch.Elapsed.TotalMilliseconds + "ms");

            lock (thisLock)
            {
                _isRunning = true;
            }
        }
        internal static Task <TReturnType> CreateTaskDispatcher <TReturnType>(out Guid taskIdentity)
        {
            taskIdentity = Guid.NewGuid();

            var taskDispatch = new TaskDispatch();

            _taskDispatcher.Add(taskIdentity, taskDispatch);

            taskDispatch.CancelTokenSource = new CancellationTokenSource();
            taskDispatch.CancelToken       = taskDispatch.CancelTokenSource.Token;

            var taskAction = new Task <TReturnType>(() =>
            {
                //Will throw here if task faulted
                taskDispatch.ThrowExceptionIfFaulted();

                if (taskDispatch.ResultData == null || !taskDispatch.ResultData.TaskSuccess)
                {
                    return(default(TReturnType));
                }

                //In case of a void call, we must return the IgnoredType for the caller instead of TaskComplete
                if (typeof(TReturnType) == typeof(IgnoredType))
                {
                    taskDispatch.ResultData.ReturnValue = new IgnoredType();
                }

                return((TReturnType)taskDispatch.ResultData.ReturnValue);
            }, taskDispatch.CancelToken);

            taskDispatch.TaskId       = taskIdentity;
            taskDispatch.ResultAction = taskAction;

            return(taskAction);
        }
Example #3
0
        internal static Task <TReturnType> CreateTaskDispatcher <TReturnType>(out int taskIdentity)
        {
            taskQueueId++;
            taskIdentity = taskQueueId;

            var taskDispatch = new TaskDispatch();

            _taskDispatcher.Add(taskIdentity, taskDispatch);

            taskDispatch.CancelTokenSource = new CancellationTokenSource();
            taskDispatch.CancelToken       = taskDispatch.CancelTokenSource.Token;

            var taskAction = new Task <TReturnType>(() =>
            {
                //Check if we are first from a CancellationContext
                if (taskDispatch.CancelToken.IsCancellationRequested)
                {
                    taskDispatch.CancelToken.ThrowIfCancellationRequested();
                }

                if (taskDispatch.ResultData == null || !taskDispatch.ResultData.TaskSuccess)
                {
                    return(default(TReturnType));
                }

                return((TReturnType)taskDispatch.ResultData.ReturnValue);
            }, taskDispatch.CancelToken);

            taskDispatch.TaskId       = taskIdentity;
            taskDispatch.ResultAction = taskAction;

            return(taskAction);
        }
Example #4
0
        /// <summary>
        /// 检测调度状态
        /// </summary>
        private void CheckDispatch()
        {
            WcfMainHelper.InitPara(_severIp, "", "");

            List <DispatchBackMember> result = WcfMainHelper.GetDispatchList();

            if (result != null)
            {
                foreach (var item in result)
                {
                    if (item.TaskImf == _clientMark && item.OrderStatue == ResultTypeEnum.Suc)
                    {
                        WcfMainHelper.CtrDispatch(item.DisGuid, DisOrderCtrTypeEnum.Stop);
                    }
                }

                if (_callingTask != null)
                {
                    if (result.Find(c => { return(c.DisGuid == _callingTask.DisGuid); }) == null)
                    {
                        _callingTask = null;
                    }
                }
            }

            if (_callingTask == null)
            {
                _isCalling = false;
            }
        }
Example #5
0
        internal static Task <TReturnType> CreateTaskDispatcher <TReturnType>(out int taskIdentity)
        {
            taskQueueId++;
            taskIdentity = taskQueueId;

            var taskDispatch = new TaskDispatch();

            _taskDispatcher.Add(taskIdentity, taskDispatch);

            taskDispatch.CancelTokenSource = new CancellationTokenSource();
            taskDispatch.CancelToken       = taskDispatch.CancelTokenSource.Token;

            var taskAction = new Task <TReturnType>(() =>
            {
                //Will throw here if task faulted
                taskDispatch.ThrowExceptionIfFaulted();

                if (taskDispatch.ResultData == null || !taskDispatch.ResultData.TaskSuccess)
                {
                    return(default(TReturnType));
                }

                return((TReturnType)taskDispatch.ResultData.ReturnValue);
            }, taskDispatch.CancelToken);

            taskDispatch.TaskId       = taskIdentity;
            taskDispatch.ResultAction = taskAction;

            return(taskAction);
        }
Example #6
0
        /// <summary>
        ///
        /// </summary>
        private void SendTask()
        {
            #region SendNow

            List <int> selectTar = GetSelectedTars();

            if (selectTar == null || selectTar.Count < 1)
            {
                MessageBox.Show("未选择有效任务", "提示");

                return;
            }

            ///构建任务
            TaskDispatch task = new TaskDispatch();

            task.Descip = _clientMark;

            TaskPathNode node = null;

            int lastTar = 0;

            ///添加任务节点
            foreach (var item in selectTar)
            {
                node = new TaskPathNode("", item, false);

                task.TaskPathNode.Add(node);

                lastTar = item;
            }

            ///启动本地AGV
            task.StartSiteList.Add(LocSite.ToString());

            ///执行任务
            if (MessageBox.Show(string.Format("确定要执行任务【{0}】", textBoxNextTars.Text), "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                WcfDispatchHelper.InitPara(_severIp, "", "");

                string result = WcfDispatchHelper.IStartTaskDispatch(task);

                if (result != "s")
                {
                    SetOutputMsg(result);

                    MessageBox.Show("当前没有空闲AGV," + "请稍后再试!", "提示");
                }
                else
                {
                    ResetBackCorlor();

                    SetOutputMsg(string.Format("开启新任务"));

                    MessageBox.Show("派发任务成功,点击启动开始运行!", "提示");
                }
            }
            #endregion
        }
Example #7
0
        /// <summary>
        /// 返回待命点
        /// </summary>
        private void BackWaitPoint()
        {
            #region BackWaitPoint
            StationMember staMem = GetRelateMember(_locTar);

            if (staMem == null)
            {
                MessageBox.Show("没有配置相关的站点,请检查!", "提示");

                return;
            }

            ///构建任务
            TaskDispatch task = new TaskDispatch();

            task.Descip = _clientMark;

            TaskPathNode node = null;

            int lastTar = 0;

            ///添加任务节点
            foreach (var item in staMem.BackTarList)
            {
                node = new TaskPathNode("", item, false);

                task.TaskPathNode.Add(node);

                lastTar = item;
            }

            ///启动本地AGV
            task.StartSiteList.Add(LocSite.ToString());

            ///执行任务
            if (MessageBox.Show(string.Format("确定要返回待命点?"), "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                WcfDispatchHelper.InitPara(_severIp, "", "");

                string result = WcfDispatchHelper.IStartTaskDispatch(task);

                if (result != "s")
                {
                    SetOutputMsg(result);

                    MessageBox.Show("当前没有空闲AGV," + "请稍后再试!", "提示");
                }
                else
                {
                    ResetBackCorlor();

                    SetOutputMsg(string.Format("开启新任务"));

                    MessageBox.Show("派发任务成功,点击启动开始运行!", "提示");
                }
            }
            #endregion
        }
        /// <summary>
        /// 远程调度接口
        /// TaskDispatch task: 自定义的调度
        /// 返回结果   s:成功    Other:具体的异常信息
        /// </summary>
        /// <returns></returns>
        public static string IStartTaskDispatch(TaskDispatch task)
        {
            if (!_channelState && !Open())
            {
                return("通道未打开");
            }

            lock (_ans) { try { return(_backupsClass.IStartTaskDispatch(task)); } catch { return("远程操作异常"); } }
        }
Example #9
0
        /// <summary>
        /// 呼叫AGV
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonCallAGv_Click(object sender, EventArgs e)
        {
            try
            {
                if (_isCalling)
                {
                    MessageBox.Show("AGV过来的途中,请等待!", "提示"); return;
                }

                TaskDispatch task = new TaskDispatch();

                task.Descip = _clientMark;

                StationMember sta = _staDic.Values.ToList().Find(c => { return(c.StaSite == LocSite); });

                if (sta == null)
                {
                    MessageBox.Show("未找到与本客户端绑定的站点", "提示"); return;
                }

                TaskPathNode node = new TaskPathNode(sta.StaSite.ToString(), sta.StaTarget, true);

                task.TaskPathNode.Add(node);

                if (sta != null && sta.WaitList != null)
                {
                    foreach (var item in sta.WaitList)
                    {
                        task.StartSiteList.Add(item.ToString());
                    }
                }

                if (task.StartSiteList == null || task.StartSiteList.Count < 1)
                {
                    MessageBox.Show("未正确配置其相应的待命点,请检查配置!", "提示");

                    return;
                }

                if (MessageBox.Show(string.Format("确定要呼叫AGV到【{0}】位置", sta.StaTarget), "提示", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    WcfDispatchHelper.InitPara(_severIp, "", "");

                    string result = WcfDispatchHelper.IStartTaskDispatch(task);

                    SetOutputMsg(string.Format("开启新任务"));

                    if (result != "s")
                    {
                        SetOutputMsg(result);

                        MessageBox.Show("当前没有空闲的AGV,请稍后再试!", "提示");
                    }
                    else
                    {
                        _isCalling = true;

                        _callingTask = task;

                        DispatchBackMember disback = WcfMainHelper.GetDispatch(task.DisGuid);

                        if (disback != null)
                        {
                            _callingAGV = disback.DisDevId;

                            DeviceBackImf devback = WcfMainHelper.GetDev(_callingAGV);

                            if (devback != null)
                            {
                                _callingSite = devback.SensorList.Find(c => { return(c.SenId == string.Format("{0}0002", devback.DevId)); }).RValue;
                            }
                            else
                            {
                                _callingSite = null;
                            }
                        }
                        else
                        {
                            _callingAGV = null;
                        }

                        MessageBox.Show("呼叫成功,请等待AGV过来!", "提示");
                    }
                }
            }
            catch { }
        }