using System.Collections.Generic;
using App.Robot.Station.Logical;
using Sers.SersLoader;
using Sers.SersLoader.ApiDesc.Attribute.Valid;
using Sers.Core.Module.Rpc;
using Sers.Core.Module.App;
using Vit.Core.Util.ComponentModel.Api;
using Vit.Core.Util.ComponentModel.Data;
using Vit.Core.Util.Threading;
using App.Robot.Station.Logical.Worker;
namespace App.Robot.Station.Controllers
{
public class TaskController : IApiController
{
///
/// 主线程开启的常驻线程,用以启动api触发的任务。
/// 若在api中直接调用,则会导致 ApiClient中 RpcData错乱的问题
/// (RpcData通过AsyncCache保存api调用关系,故若api中直接开启线程调用api,可能会出现api中的 RpcData错乱)。
///
public static readonly TaskQueue MainTask = new TaskQueue() { threadName = "Robot-MainTaskToStartTask" };
static TaskController()
{
//TaskController.MainTask
SersApplication.onStart += () => TaskController.MainTask.Start();
SersApplication.onStop += () => TaskController.MainTask.Stop();
}
///
/// 保存到Cache
///
///
[SsRoute("taskMng/saveToCache")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn TaskMngSaveToCache()
{
TaskMng.Instance.TaskMngSaveToCache();
return true;
}
///
/// 获取所有任务
///
/// ArgModelDesc-returns
[SsRoute("task/getAll")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn> GetAll()
{
return TaskMng.Instance.GetAll();
}
///
/// 创建新任务
///
///
///
[SsRoute("task/add")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn Add(TaskConfig config)
{
MainTask.AddTask(() =>
{
TaskMng.Instance.Add(config);
});
return true;
}
[SsRoute("task/start")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn Start(int id)
{
MainTask.AddTask(() =>
{
TaskMng.Instance.Start(id);
});
return true;
}
[SsRoute("task/stop")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn Stop(int id)
{
return TaskMng.Instance.Stop(id);
}
[SsRoute("task/remove")]
[SsCallerSource(ECallerSource.Internal)]
public ApiReturn Remove(int id)
{
return TaskMng.Instance.Remove(id);
}
}
}