예제 #1
0
        public static TaskMeta NewTask(string sid, string shopNo, int orderType)
        {
            var Task = new TaskMeta();

            Task.Topic  = TaskTopic.BuyTake.ToString();
            Task.ShopNo = shopNo;

            Task.OrderSID  = sid;
            Task.OrderType = orderType;

            return(Task);
        }
예제 #2
0
        /// <summary>
        /// thread function
        /// </summary>
        /// <param name="meta"></param>
        protected void Run(TaskMeta meta)
        {
            if (meta == null || meta._queue == null)
            {
                OnPythonEvent(null, "Task Meta or Queue is null, could not start Task");
                return;
            }

            while (!meta.isTaskStop())
            {
                try
                {
                    if (!meta._queue.IsCompleted)
                    {
                        TaskQueueObject obj = null;
                        if (!meta._queue.TryTake(out obj, 50))
                        {
                            //queue is empty
                        }
                        else
                        {
                            DispatchData(obj);
                        }

                        _lastQueuedCount = meta._queue.Count;
                    }
                    else
                    {
                        OnPythonEvent(null, "Queue already completed");
                        break;
                    }
                }
                catch (InvalidOperationException e) ///operating queue exception
                {
                    OnPythonEvent(null, "Task TryTake Queue InvalidOperationException:" + e.StackTrace);
                }
                catch (Exception e)
                {
                    OnPythonEvent(null, "Task Exception:" + e.StackTrace);
                }
                finally
                {
                    if (meta != null && meta._queue != null)
                    {
                        _lastQueuedCount = meta._queue.Count;
                    }
                }
            }
            OnPythonEvent(null, "Task done");
        }
예제 #3
0
 private bool CheckIsCompleted() // 检查任务是否完成,如果已完成则跳出当前帧。
 {
     if (BuildedCount == willBuildCount && sonBuildedNum == sonNum &&
         containerBuildedNum == containerNum)
     {
         IsComplete = true;
         buildAble  = false;
         TaskMeta.Reset();
         taskCurrentElementIndex = -1;
         m_OnBuilded(this);
         m_ParentTask?.OnSonCompleted(RootRect);
         return(true);
     }
     return(false);
 }
예제 #4
0
        // 根据任务结果格式化当前节点结果, 外部循环使用
        internal static bool FormatNodeErrorResp<TTRes>(NodeResp<TTRes> nodeResp, TaskResp<Resp> taskResp,
            TaskMeta tMeta)
            where TTRes : Resp, new()
        {
            var status = NodeStatus.ProcessCompoleted;
            if (!taskResp.run_status.IsCompleted())
            {
                var haveError = true;
                switch (tMeta.node_action)
                {
                    case NodeResultAction.PauseOnFailed:
                        status = NodeStatus.ProcessPaused;
                        break;
                    case NodeResultAction.FailedOnFailed:
                        status = taskResp.run_status == TaskRunStatus.RunFailed
                            ? NodeStatus.ProcessFailed
                            : NodeStatus.ProcessPaused;
                        break;
                    case NodeResultAction.RevrtAllOnFailed:
                        status = taskResp.run_status == TaskRunStatus.RunFailed
                            ? NodeStatus.ProcessFailedRevert
                            : NodeStatus.ProcessPaused;
                        break;
                    default:
                        haveError = false;
                        break;
                }

                if (haveError)
                {
                    if (status < nodeResp.node_status)
                    {
                        nodeResp.node_status = status;
                        nodeResp.resp = ConvertToNodeResult<TTRes>(taskResp.resp);
                    }

                    return true;
                }
            }

            if (nodeResp.node_status == NodeStatus.ProcessCompoleted && taskResp.resp is TTRes nres)
            {
                nodeResp.resp = nres;
            }

            return false;
        }
예제 #5
0
        public void Init(string id,
                         Action <LegoBuildTask> onBuilded,
                         RectTransform parent)
        {
            ParentRect = parent;
            TaskMeta   = metaHelper.GetMeta(id);
            TaskMeta.Reset(); // 每次开始构建都重置元数据
            m_OnBuilded    = onBuilded;
            sonNum         = TaskMeta.ComponentRefs.Count;
            containerNum   = TaskMeta.ContainerRefs.Count;
            willBuildCount = TaskMeta.WillBuildCount;

            CreateRootAtOnce(); // 构建组件根对象
            TryMountAtOnce();
            AddRootButton();    // 添加根按钮
#if DEBUG
            AddHelper();        // 编辑器下添加开发助手组件
#endif

            buildAble = true;
        }
예제 #6
0
 protected BaseStandTask(TaskMeta meta) : base(meta)
 {
     InstanceTaskType = InstanceType.Stand;
 }
예제 #7
0
 public static void WithNodeMeta(this TaskMeta taskMeta, NodeMeta nodeMeta)
 {
     taskMeta.owner_type = nodeMeta.owner_type;
     taskMeta.flow_id    = nodeMeta.flow_id;
     taskMeta.node_id    = nodeMeta.node_id;
 }
예제 #8
0
 protected BaseTask(TaskMeta meta) : base(meta)
 {
 }
예제 #9
0
 protected BaseDomainTask(TaskMeta meta) : base(meta)
 {
     InstanceTaskType = InstanceType.Domain;
 }