Documentation
¶
Overview ¶
Package runtime 定义运行时级上下文。
Package runtime 表示 Actor 风格的单运行时执行作用域。一个运行时拥有自己的任务 队列、可选帧循环、本地实体管理器、实体树、运行事件和 runtime add-in。
runtime add-in 由 runtime 包内的管理器维护,可在运行协程中安装和卸载。
所有会直接读写实体或组件状态的逻辑,通常都应回到所属 runtime 中执行。需要结果 时使用 Context.Submit,需要无 Future 投递时使用 Context.Post;后台 Future 完成后, 使用根包 core.ContinueOn 把续体调度回运行协程。Delegate 与 DelegateVoid 变体仍然 可用。
Runtime Context 会拒绝对 pending Future 的阻塞等待。同一执行器产生的 Future 返回 ErrRuntimeSelfWait,其他 pending Future 返回 ErrBlockingWaitInRuntime。应使用 ContinueOn 表达非阻塞的 Actor 续体。
用 NewContext 创建上下文后,再交给 core.NewRuntime 绑定和运行。实体实例通常在 runtime.RunningEvent_Started 阶段通过 core.BuildEntity 创建。
Index ¶
- Variables
- func BindEventAddInStateChanged(auto iAutoEventAddInStateChanged, subscriber EventAddInStateChanged, ...) event.Handle
- func BindEventContextRunningEvent(auto iAutoEventContextRunningEvent, subscriber EventContextRunningEvent, ...) event.Handle
- func BindEventEntityManagerAddEntity(auto iAutoEventEntityManagerAddEntity, subscriber EventEntityManagerAddEntity, ...) event.Handle
- func BindEventEntityManagerEntityAddComponents(auto iAutoEventEntityManagerEntityAddComponents, ...) event.Handle
- func BindEventEntityManagerEntityComponentEnableChanged(auto iAutoEventEntityManagerEntityComponentEnableChanged, ...) event.Handle
- func BindEventEntityManagerEntityFirstTouchComponent(auto iAutoEventEntityManagerEntityFirstTouchComponent, ...) event.Handle
- func BindEventEntityManagerEntityRemoveComponent(auto iAutoEventEntityManagerEntityRemoveComponent, ...) event.Handle
- func BindEventEntityManagerRemoveEntity(auto iAutoEventEntityManagerRemoveEntity, ...) event.Handle
- func BindEventEntityTreeAddNode(auto iAutoEventEntityTreeAddNode, subscriber EventEntityTreeAddNode, ...) event.Handle
- func BindEventEntityTreeMoveNode(auto iAutoEventEntityTreeMoveNode, subscriber EventEntityTreeMoveNode, ...) event.Handle
- func BindEventEntityTreeRemoveNode(auto iAutoEventEntityTreeRemoveNode, subscriber EventEntityTreeRemoveNode, ...) event.Handle
- func BindEventInstallAddIn(auto iAutoEventInstallAddIn, subscriber EventInstallAddIn, priority ...int32) event.Handle
- func BindEventUninstallAddIn(auto iAutoEventUninstallAddIn, subscriber EventUninstallAddIn, ...) event.Handle
- func UnsafeAddInManager(mgr AddInManager) _UnsafeAddInManagerdeprecated
- func UnsafeAddInStatus(status AddInStatus) _UnsafeAddInStatusdeprecated
- func UnsafeConcurrentContext(context ConcurrentContext) _UnsafeConcurrentContextdeprecated
- func UnsafeContext(ctx Context) _UnsafeContextdeprecated
- type AddInManager
- type AddInStatus
- type Callee
- type Caller
- type ConcurrentContext
- type ConcurrentContextProvider
- type Context
- type ContextBehavior
- func (ctx *ContextBehavior) AddInManager() extension.AddInManager
- func (ctx *ContextBehavior) AfterFutureWait(futureID uint64)
- func (ctx *ContextBehavior) BeforeFutureWait(futureID uint64, completionExecutorID async.ExecutorID) error
- func (ctx *ContextBehavior) BlockedFutureID() uint64
- func (ctx *ContextBehavior) CollectGC(gc GC)
- func (ctx *ContextBehavior) ConcurrentContextCache() iface.Cache
- func (ctx *ContextBehavior) CurrentContextCache() iface.Cache
- func (ctx *ContextBehavior) EntityManager() EntityManager
- func (ctx *ContextBehavior) EntityTree() EntityTree
- func (ctx *ContextBehavior) EventContextRunningEvent() event.IEvent
- func (ctx *ContextBehavior) ExecutorID() async.ExecutorID
- func (ctx *ContextBehavior) Frame() Frame
- func (ctx *ContextBehavior) Id() uid.Id
- func (ctx *ContextBehavior) InstanceFaceCache() iface.Cache
- func (ctx *ContextBehavior) LastWaitRejectID() uint64
- func (ctx *ContextBehavior) Managed() *event.ManagedHandles
- func (ctx *ContextBehavior) Name() string
- func (ctx *ContextBehavior) Post(fun generic.ActionVar1[Context, any], args ...any) error
- func (ctx *ContextBehavior) PostDelegate(fun generic.DelegateVoidVar1[Context, any], args ...any) error
- func (ctx *ContextBehavior) Reflected() reflect.Value
- func (ctx *ContextBehavior) String() string
- func (ctx *ContextBehavior) Submit(fun generic.FuncVar1[Context, any, async.Result], args ...any) async.Future
- func (ctx *ContextBehavior) SubmitDelegate(fun generic.DelegateVar1[Context, any, async.Result], args ...any) async.Future
- func (ctx *ContextBehavior) SubmitDelegateVoid(fun generic.DelegateVoidVar1[Context, any], args ...any) async.Future
- func (ctx *ContextBehavior) SubmitVoid(fun generic.ActionVar1[Context, any], args ...any) async.Future
- type ContextOptions
- type CurrentContextProvider
- type EntityManager
- type EntityTree
- type EventAddInStateChanged
- type EventAddInStateChangedHandler
- type EventContextRunningEvent
- type EventContextRunningEventHandler
- type EventEntityManagerAddEntity
- type EventEntityManagerAddEntityHandler
- type EventEntityManagerEntityAddComponents
- type EventEntityManagerEntityAddComponentsHandler
- type EventEntityManagerEntityComponentEnableChanged
- type EventEntityManagerEntityComponentEnableChangedHandler
- type EventEntityManagerEntityFirstTouchComponent
- type EventEntityManagerEntityFirstTouchComponentHandler
- type EventEntityManagerEntityRemoveComponent
- type EventEntityManagerEntityRemoveComponentHandler
- type EventEntityManagerRemoveEntity
- type EventEntityManagerRemoveEntityHandler
- type EventEntityTreeAddNode
- type EventEntityTreeAddNodeHandler
- type EventEntityTreeMoveNode
- type EventEntityTreeMoveNodeHandler
- type EventEntityTreeRemoveNode
- type EventEntityTreeRemoveNodeHandler
- type EventInstallAddIn
- type EventInstallAddInHandler
- type EventUninstallAddIn
- type EventUninstallAddInHandler
- type Frame
- type GC
- type GCCollector
- type IAddInManagerEventTab
- type IContextRunningEventTab
- type IEntityManagerEventTab
- type IEntityTreeEventTab
- type RunningEvent
- type RunningEventCB
Constants ¶
This section is empty.
Variables ¶
var ( EventInstallAddInId = event.DeclareEventIdT[addInManagerEventTab](0) EventUninstallAddInId = event.DeclareEventIdT[addInManagerEventTab](1) EventAddInStateChangedId = event.DeclareEventIdT[addInManagerEventTab](2) )
var ( EventEntityManagerAddEntityId = event.DeclareEventIdT[entityManagerEventTab](0) EventEntityManagerRemoveEntityId = event.DeclareEventIdT[entityManagerEventTab](1) EventEntityManagerEntityAddComponentsId = event.DeclareEventIdT[entityManagerEventTab](2) EventEntityManagerEntityRemoveComponentId = event.DeclareEventIdT[entityManagerEventTab](3) EventEntityManagerEntityComponentEnableChangedId = event.DeclareEventIdT[entityManagerEventTab](4) EventEntityManagerEntityFirstTouchComponentId = event.DeclareEventIdT[entityManagerEventTab](5) )
var ( EventEntityTreeAddNodeId = event.DeclareEventIdT[entityTreeEventTab](0) EventEntityTreeRemoveNodeId = event.DeclareEventIdT[entityTreeEventTab](1) EventEntityTreeMoveNodeId = event.DeclareEventIdT[entityTreeEventTab](2) )
var ( ErrContext = fmt.Errorf("%w: runtime-context", exception.ErrCore) // 运行时上下文错误。 ErrEntityTree = fmt.Errorf("%w: entity-tree", ErrContext) // 实体树错误。 ErrEntityManager = fmt.Errorf("%w: entity-manager", ErrContext) // 本地实体管理器错误。 ErrFrame = fmt.Errorf("%w: frame", ErrContext) // 帧循环错误。 ErrRuntimeSelfWait = fmt.Errorf("%w: runtime waits for its own task", ErrContext) // Runtime 等待自身队列结果。 ErrBlockingWaitInRuntime = fmt.Errorf("%w: blocking wait in runtime", ErrContext) // Runtime 内阻塞等待 pending Future。 )
var (
EventContextRunningEventId = event.DeclareEventIdT[contextRunningEventTab](0)
)
var ( // ForestNodeId 是所有根实体共用的虚拟父节点 ID;它是保留哨兵,不应修改。 ForestNodeId = uid.From("d5rh7sbr1n96c63fs3vg") )
var With _ContextOption
With 提供 Runtime 上下文选项构造器。
Functions ¶
func BindEventAddInStateChanged ¶ added in v0.4.27
func BindEventAddInStateChanged(auto iAutoEventAddInStateChanged, subscriber EventAddInStateChanged, priority ...int32) event.Handle
func BindEventContextRunningEvent ¶ added in v0.4.25
func BindEventContextRunningEvent(auto iAutoEventContextRunningEvent, subscriber EventContextRunningEvent, priority ...int32) event.Handle
func BindEventEntityManagerAddEntity ¶ added in v0.3.66
func BindEventEntityManagerAddEntity(auto iAutoEventEntityManagerAddEntity, subscriber EventEntityManagerAddEntity, priority ...int32) event.Handle
func BindEventEntityManagerEntityAddComponents ¶ added in v0.3.66
func BindEventEntityManagerEntityAddComponents(auto iAutoEventEntityManagerEntityAddComponents, subscriber EventEntityManagerEntityAddComponents, priority ...int32) event.Handle
func BindEventEntityManagerEntityComponentEnableChanged ¶ added in v0.4.25
func BindEventEntityManagerEntityComponentEnableChanged(auto iAutoEventEntityManagerEntityComponentEnableChanged, subscriber EventEntityManagerEntityComponentEnableChanged, priority ...int32) event.Handle
func BindEventEntityManagerEntityFirstTouchComponent ¶ added in v0.3.66
func BindEventEntityManagerEntityFirstTouchComponent(auto iAutoEventEntityManagerEntityFirstTouchComponent, subscriber EventEntityManagerEntityFirstTouchComponent, priority ...int32) event.Handle
func BindEventEntityManagerEntityRemoveComponent ¶ added in v0.3.66
func BindEventEntityManagerEntityRemoveComponent(auto iAutoEventEntityManagerEntityRemoveComponent, subscriber EventEntityManagerEntityRemoveComponent, priority ...int32) event.Handle
func BindEventEntityManagerRemoveEntity ¶ added in v0.3.66
func BindEventEntityManagerRemoveEntity(auto iAutoEventEntityManagerRemoveEntity, subscriber EventEntityManagerRemoveEntity, priority ...int32) event.Handle
func BindEventEntityTreeAddNode ¶ added in v0.2.58
func BindEventEntityTreeAddNode(auto iAutoEventEntityTreeAddNode, subscriber EventEntityTreeAddNode, priority ...int32) event.Handle
func BindEventEntityTreeMoveNode ¶ added in v0.4.25
func BindEventEntityTreeMoveNode(auto iAutoEventEntityTreeMoveNode, subscriber EventEntityTreeMoveNode, priority ...int32) event.Handle
func BindEventEntityTreeRemoveNode ¶ added in v0.2.58
func BindEventEntityTreeRemoveNode(auto iAutoEventEntityTreeRemoveNode, subscriber EventEntityTreeRemoveNode, priority ...int32) event.Handle
func BindEventInstallAddIn ¶ added in v0.4.27
func BindEventInstallAddIn(auto iAutoEventInstallAddIn, subscriber EventInstallAddIn, priority ...int32) event.Handle
func BindEventUninstallAddIn ¶ added in v0.4.27
func BindEventUninstallAddIn(auto iAutoEventUninstallAddIn, subscriber EventUninstallAddIn, priority ...int32) event.Handle
func UnsafeAddInManager
deprecated
added in
v0.4.27
func UnsafeAddInManager(mgr AddInManager) _UnsafeAddInManager
Deprecated: UnsafeAddInManager 暴露运行时插件管理器的内部列表,仅供 core 使用。
func UnsafeAddInStatus
deprecated
added in
v0.4.27
func UnsafeAddInStatus(status AddInStatus) _UnsafeAddInStatus
Deprecated: UnsafeAddInStatus 暴露运行时插件状态的生命周期操作,仅供 core 使用。
func UnsafeConcurrentContext
deprecated
added in
v0.3.21
func UnsafeConcurrentContext(context ConcurrentContext) _UnsafeConcurrentContext
Deprecated: UnsafeConcurrentContext 暴露并发上下文的内部能力,仅供框架集成代码使用。
func UnsafeContext
deprecated
func UnsafeContext(ctx Context) _UnsafeContext
Deprecated: UnsafeContext 暴露运行时上下文内部能力,仅供框架集成代码使用。
Types ¶
type AddInManager ¶ added in v0.4.27
type AddInManager interface {
extension.AddInManager
IAddInManagerEventTab
// contains filtered or unexported methods
}
AddInManager 管理可在运行时热插拔的插件及其生命周期事件。
管理器按安装顺序保存插件且不提供并发保护;所有操作应串行执行,通常由所属运行时 goroutine 调用。运行时启动前安装的插件保持 Loaded,启动后安装的插件会由 core 同步激活;卸载和停服时按相反顺序停用。
func NewAddInManager ¶ added in v0.4.27
func NewAddInManager() AddInManager
NewAddInManager 创建一个空的运行时插件管理器。
type AddInStatus ¶ added in v0.4.27
type AddInStatus interface {
extension.AddInStatus
// contains filtered or unexported methods
}
AddInStatus 描述可热插拔运行时插件的状态。
type Callee ¶
type Callee interface {
PushSubmit(fun generic.FuncVar1[Context, any, async.Result], args ...any) async.Future
PushSubmitDelegate(fun generic.DelegateVar1[Context, any, async.Result], args ...any) async.Future
PushSubmitVoid(fun generic.ActionVar1[Context, any], args ...any) async.Future
PushSubmitDelegateVoid(fun generic.DelegateVoidVar1[Context, any], args ...any) async.Future
PushPost(fun generic.ActionVar1[Context, any], args ...any) error
PushPostDelegate(fun generic.DelegateVoidVar1[Context, any], args ...any) error
}
Callee 接收 Caller 的任务并写入实际 Runtime 队列。
type Caller ¶
type Caller interface {
Submit(fun generic.FuncVar1[Context, any, async.Result], args ...any) async.Future
SubmitDelegate(fun generic.DelegateVar1[Context, any, async.Result], args ...any) async.Future
SubmitVoid(fun generic.ActionVar1[Context, any], args ...any) async.Future
SubmitDelegateVoid(fun generic.DelegateVoidVar1[Context, any], args ...any) async.Future
Post(fun generic.ActionVar1[Context, any], args ...any) error
PostDelegate(fun generic.DelegateVoidVar1[Context, any], args ...any) error
}
Caller 将任务投递到 Runtime Actor 邮箱。
Submit 系列返回任务执行结果;Post 系列只报告是否成功入队,不分配 Future。 所有回调都由 Runtime goroutine 串行执行,即使调用者已经位于同一 Runtime 中也 不会内联执行。
type ConcurrentContext ¶
type ConcurrentContext interface {
corectx.Context
corectx.ConcurrentContextProvider
Caller
fmt.Stringer
// Name 返回运行时名称。
Name() string
// Id 返回运行时的持久化 ID。
Id() uid.Id
// ExecutorID 返回进程内 Runtime 执行器 ID。
ExecutorID() async.ExecutorID
// BlockedFutureID 返回当前阻塞等待的 Future ID。
BlockedFutureID() uint64
// LastWaitRejectID 返回最近一次被 Runtime 等待规则拒绝的 Future ID。
LastWaitRejectID() uint64
// contains filtered or unexported methods
}
ConcurrentContext 暴露可跨 goroutine 安全调用的运行时能力。 需要读写实体或其他运行时局部状态时,应通过 Caller 调度回运行时 goroutine。
func Concurrent ¶
func Concurrent(provider corectx.ConcurrentContextProvider) ConcurrentContext
Concurrent 从 provider 获取可跨 goroutine 使用的运行时上下文;provider 为 nil 时会 panic。
type ConcurrentContextProvider ¶
type ConcurrentContextProvider = corectx.ConcurrentContextProvider
ConcurrentContextProvider 提供可跨 goroutine 使用的运行时上下文缓存。
type Context ¶
type Context interface {
ConcurrentContext
corectx.CurrentContextProvider
async.WaitGuard
reinterpret.InstanceProvider
extension.AddInProvider
GCCollector
// Name 返回运行时名称。
Name() string
// Id 返回运行时的持久化 ID。
Id() uid.Id
// Reflected 返回实际运行时上下文实例的反射值。
Reflected() reflect.Value
// Frame 返回帧统计接口;未启用帧循环时返回 nil。
Frame() Frame
// EntityManager 返回当前运行时的本地实体管理器。
EntityManager() EntityManager
// EntityTree 返回当前运行时的实体树。
EntityTree() EntityTree
// Managed 返回随运行时上下文统一解绑的事件句柄集合。
Managed() *event.ManagedHandles
IContextRunningEventTab
// contains filtered or unexported methods
}
Context 表示单个 Actor 风格运行时的当前执行作用域。 实体、实体树、帧和插件的直接操作应在所属运行时 goroutine 中进行。
func Current ¶
func Current(provider corectx.CurrentContextProvider) Context
Current 从 provider 获取当前运行时上下文;provider 为 nil 时会 panic。
func NewContext ¶
NewContext 创建隶属于 svcCtx 的运行时上下文。 未提供父上下文、持久化 ID 或插件管理器时会自动创建默认值。
func UnsafeNewContext
deprecated
func UnsafeNewContext(svcCtx service.Context, options ContextOptions) Context
Deprecated: UnsafeNewContext 仅供框架内部使用,请改用 NewContext。
type ContextBehavior ¶
type ContextBehavior struct {
corectx.ContextBehavior
// contains filtered or unexported fields
}
ContextBehavior 提供 Context 的默认实现。 扩展运行时上下文时应匿名嵌入该类型,并通过 InstanceFace 传入扩展实例。
func (*ContextBehavior) AddInManager ¶ added in v0.4.25
func (ctx *ContextBehavior) AddInManager() extension.AddInManager
AddInManager 返回运行时插件管理器的公共接口。
func (*ContextBehavior) AfterFutureWait ¶ added in v0.4.27
func (ctx *ContextBehavior) AfterFutureWait(futureID uint64)
AfterFutureWait 清除诊断中的等待 Future ID。
func (*ContextBehavior) BeforeFutureWait ¶ added in v0.4.27
func (ctx *ContextBehavior) BeforeFutureWait(futureID uint64, completionExecutorID async.ExecutorID) error
BeforeFutureWait 实现 async.WaitGuard。Runtime Context 只允许读取已经完成的 Future;对 pending Future 的等待会破坏 Actor 串行执行语义。
func (*ContextBehavior) BlockedFutureID ¶ added in v0.4.27
func (ctx *ContextBehavior) BlockedFutureID() uint64
BlockedFutureID 返回当前阻塞等待的 Future ID。
func (*ContextBehavior) CollectGC ¶
func (ctx *ContextBehavior) CollectGC(gc GC)
CollectGC 将需要清理的对象加入本轮运行时 GC 队列。
func (*ContextBehavior) ConcurrentContextCache ¶ added in v0.4.27
func (ctx *ContextBehavior) ConcurrentContextCache() iface.Cache
ConcurrentContextCache 返回可跨 goroutine 使用的上下文接口缓存。
func (*ContextBehavior) CurrentContextCache ¶ added in v0.4.27
func (ctx *ContextBehavior) CurrentContextCache() iface.Cache
CurrentContextCache 返回仅供运行时 goroutine 使用的上下文接口缓存。
func (*ContextBehavior) EntityManager ¶ added in v0.4.25
func (ctx *ContextBehavior) EntityManager() EntityManager
EntityManager 返回当前运行时的本地实体管理器。
func (*ContextBehavior) EntityTree ¶ added in v0.4.25
func (ctx *ContextBehavior) EntityTree() EntityTree
EntityTree 返回当前运行时的实体树。
func (*ContextBehavior) EventContextRunningEvent ¶ added in v0.4.25
func (ctx *ContextBehavior) EventContextRunningEvent() event.IEvent
EventContextRunningEvent 返回运行时运行事件。
func (*ContextBehavior) ExecutorID ¶ added in v0.4.27
func (ctx *ContextBehavior) ExecutorID() async.ExecutorID
ExecutorID 返回用于 Future 完成归属和 Runtime 自等待检测的进程内执行器 ID。
func (*ContextBehavior) Frame ¶ added in v0.4.25
func (ctx *ContextBehavior) Frame() Frame
Frame 返回帧统计接口;未启用帧循环时返回 nil。
func (*ContextBehavior) Id ¶ added in v0.4.25
func (ctx *ContextBehavior) Id() uid.Id
Id 返回运行时的持久化 ID。
func (*ContextBehavior) InstanceFaceCache ¶ added in v0.4.25
func (ctx *ContextBehavior) InstanceFaceCache() iface.Cache
InstanceFaceCache 返回上下文实例的接口缓存,用于 reinterpret.Cast。
func (*ContextBehavior) LastWaitRejectID ¶ added in v0.4.27
func (ctx *ContextBehavior) LastWaitRejectID() uint64
LastWaitRejectID 返回最近一次被 Runtime 等待规则拒绝的 Future ID。
func (*ContextBehavior) Managed ¶ added in v0.4.25
func (ctx *ContextBehavior) Managed() *event.ManagedHandles
Managed 返回随运行时上下文统一解绑的事件句柄集合。
func (*ContextBehavior) Name ¶ added in v0.4.25
func (ctx *ContextBehavior) Name() string
Name 返回运行时名称。
func (*ContextBehavior) Post ¶ added in v0.4.27
func (ctx *ContextBehavior) Post(fun generic.ActionVar1[Context, any], args ...any) error
func (*ContextBehavior) PostDelegate ¶ added in v0.4.27
func (ctx *ContextBehavior) PostDelegate(fun generic.DelegateVoidVar1[Context, any], args ...any) error
func (*ContextBehavior) Reflected ¶ added in v0.4.25
func (ctx *ContextBehavior) Reflected() reflect.Value
Reflected 返回实际运行时上下文实例的反射值。
func (*ContextBehavior) String ¶
func (ctx *ContextBehavior) String() string
String 实现 fmt.Stringer,返回包含运行时 ID 和名称的 JSON 文本。
func (*ContextBehavior) SubmitDelegate ¶ added in v0.4.27
func (ctx *ContextBehavior) SubmitDelegate(fun generic.DelegateVar1[Context, any, async.Result], args ...any) async.Future
func (*ContextBehavior) SubmitDelegateVoid ¶ added in v0.4.27
func (ctx *ContextBehavior) SubmitDelegateVoid(fun generic.DelegateVoidVar1[Context, any], args ...any) async.Future
func (*ContextBehavior) SubmitVoid ¶ added in v0.4.27
func (ctx *ContextBehavior) SubmitVoid(fun generic.ActionVar1[Context, any], args ...any) async.Future
type ContextOptions ¶
type ContextOptions struct {
InstanceFace iface.Face[Context] // 自定义上下文实例及其接口缓存。
Context context.Context // 父上下文;nil 时使用所属服务上下文。
AutoRecover bool // 回调发生 panic 时是否自动恢复。
ReportError chan error // 自动恢复后接收 panic 错误的通道。
Name string // 运行时名称。
PersistId uid.Id // 运行时持久化 ID;为 Nil 时自动生成。
AddInManager AddInManager // 运行时插件管理器;nil 时创建默认管理器。
RunningEventCB RunningEventCB // 运行时运行事件回调。
}
ContextOptions 定义创建运行时上下文时使用的选项。
type CurrentContextProvider ¶
type CurrentContextProvider = corectx.CurrentContextProvider
CurrentContextProvider 提供仅限所属运行时 goroutine 使用的上下文缓存。
type EntityManager ¶ added in v0.3.66
type EntityManager interface {
corectx.CurrentContextProvider
// AddEntity 接管 Born 状态的实体;运行时已启动时会同步推进其生命周期。
AddEntity(entity ec.Entity) error
// RemoveEntity 按 ID 请求销毁实体;实体不存在时不执行任何操作。
RemoveEntity(id uid.Id)
// GetEntity 按 ID 查询本地实体。
GetEntity(id uid.Id) (ec.Entity, bool)
// RangeEntities 按加入顺序遍历实体,回调返回 false 时停止。
RangeEntities(fun generic.Func1[ec.Entity, bool])
// EachEntities 按加入顺序遍历全部实体。
EachEntities(fun generic.Action1[ec.Entity])
// ReversedRangeEntities 按加入顺序逆向遍历实体,回调返回 false 时停止。
ReversedRangeEntities(fun generic.Func1[ec.Entity, bool])
// ReversedEachEntities 按加入顺序逆向遍历全部实体。
ReversedEachEntities(fun generic.Action1[ec.Entity])
// FilterEntities 按加入顺序返回符合条件的实体。
FilterEntities(fun generic.Func1[ec.Entity, bool]) []ec.Entity
// ListEntities 按加入顺序返回实体切片副本。
ListEntities() []ec.Entity
// CountEntities 返回当前实体数。
CountEntities() int
IEntityManagerEventTab
}
EntityManager 管理当前运行时拥有的实体及其加入顺序。 该接口不提供并发保护,应在所属运行时 goroutine 中使用。
type EntityTree ¶ added in v0.2.58
type EntityTree interface {
corectx.CurrentContextProvider
// MakeRoot 将自由实体作为根节点加入实体树。
MakeRoot(entityId uid.Id) error
// AddChild 将自由实体 childId 挂到 parentId 下。
AddChild(parentId, childId uid.Id) error
// RemoveNode 按后序递归移除整个子树的树关系;实体本身不会被销毁。
RemoveNode(childId uid.Id) error
// DetachNode 将节点从当前父实体移到虚拟森林节点下,使其成为根节点。
DetachNode(childId uid.Id) error
// MoveNode 将节点移动到新的父节点下。
MoveNode(childId, parentId uid.Id) error
// IsFree 报告实体是否尚未加入实体树。
IsFree(entityId uid.Id) (bool, error)
// IsRoot 报告实体是否直接挂在虚拟森林节点下。
IsRoot(entityId uid.Id) (bool, error)
// IsLeaf 报告实体是否没有子节点。
IsLeaf(entityId uid.Id) (bool, error)
// GetParent 返回父实体;根节点没有实体父节点,因此返回错误。
GetParent(childId uid.Id) (ec.Entity, error)
// RangeChildren 按加入顺序遍历直接子节点,回调返回 false 时停止。
RangeChildren(parentId uid.Id, fun generic.Func1[ec.Entity, bool]) error
// EachChildren 按加入顺序遍历全部直接子节点。
EachChildren(parentId uid.Id, fun generic.Action1[ec.Entity]) error
// ReversedRangeChildren 按加入顺序逆向遍历直接子节点,回调返回 false 时停止。
ReversedRangeChildren(parentId uid.Id, fun generic.Func1[ec.Entity, bool]) error
// ReversedEachChildren 按加入顺序逆向遍历全部直接子节点。
ReversedEachChildren(parentId uid.Id, fun generic.Action1[ec.Entity]) error
// FilterChildren 按加入顺序返回符合条件的直接子节点。
FilterChildren(parentId uid.Id, fun generic.Func1[ec.Entity, bool]) ([]ec.Entity, error)
// ListChildren 按加入顺序返回直接子节点切片。
ListChildren(parentId uid.Id) ([]ec.Entity, error)
// CountChildren 返回直接子节点数。
CountChildren(parentId uid.Id) (int, error)
IEntityTreeEventTab
}
EntityTree 管理当前运行时实体之间的父子关系。 树操作不提供并发保护,应在所属运行时 goroutine 中执行。
type EventAddInStateChanged ¶ added in v0.4.27
type EventAddInStateChanged interface {
OnAddInStateChanged(status AddInStatus, state extension.AddInState)
}
EventAddInStateChanged 在插件状态完成变更后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventAddInStateChangedHandler ¶ added in v0.4.27
type EventAddInStateChangedHandler func(status AddInStatus, state extension.AddInState)
func HandleEventAddInStateChanged ¶ added in v0.4.27
func HandleEventAddInStateChanged(fun func(status AddInStatus, state extension.AddInState)) EventAddInStateChangedHandler
func (EventAddInStateChangedHandler) OnAddInStateChanged ¶ added in v0.4.27
func (h EventAddInStateChangedHandler) OnAddInStateChanged(status AddInStatus, state extension.AddInState)
type EventContextRunningEvent ¶ added in v0.4.25
type EventContextRunningEvent interface {
OnContextRunningEvent(ctx Context, runningEvent RunningEvent, args ...any)
}
EventContextRunningEvent 在 Runtime 上下文进入各运行阶段时同步派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventContextRunningEventHandler ¶ added in v0.4.25
type EventContextRunningEventHandler func(ctx Context, runningEvent RunningEvent, args ...any)
func HandleEventContextRunningEvent ¶ added in v0.4.25
func HandleEventContextRunningEvent(fun func(ctx Context, runningEvent RunningEvent, args ...any)) EventContextRunningEventHandler
func (EventContextRunningEventHandler) OnContextRunningEvent ¶ added in v0.4.25
func (h EventContextRunningEventHandler) OnContextRunningEvent(ctx Context, runningEvent RunningEvent, args ...any)
type EventEntityManagerAddEntity ¶ added in v0.3.66
type EventEntityManagerAddEntity interface {
OnEntityManagerAddEntity(entityManager EntityManager, entity ec.Entity)
}
EventEntityManagerAddEntity 在实体加入本地管理器后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerAddEntityHandler ¶ added in v0.3.66
type EventEntityManagerAddEntityHandler func(entityManager EntityManager, entity ec.Entity)
func HandleEventEntityManagerAddEntity ¶ added in v0.3.66
func HandleEventEntityManagerAddEntity(fun func(entityManager EntityManager, entity ec.Entity)) EventEntityManagerAddEntityHandler
func (EventEntityManagerAddEntityHandler) OnEntityManagerAddEntity ¶ added in v0.3.66
func (h EventEntityManagerAddEntityHandler) OnEntityManagerAddEntity(entityManager EntityManager, entity ec.Entity)
type EventEntityManagerEntityAddComponents ¶ added in v0.3.66
type EventEntityManagerEntityAddComponents interface {
OnEntityManagerEntityAddComponents(entityManager EntityManager, entity ec.Entity, components []ec.Component)
}
EventEntityManagerEntityAddComponents 在受管实体添加组件后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerEntityAddComponentsHandler ¶ added in v0.3.66
type EventEntityManagerEntityAddComponentsHandler func(entityManager EntityManager, entity ec.Entity, components []ec.Component)
func HandleEventEntityManagerEntityAddComponents ¶ added in v0.3.66
func HandleEventEntityManagerEntityAddComponents(fun func(entityManager EntityManager, entity ec.Entity, components []ec.Component)) EventEntityManagerEntityAddComponentsHandler
func (EventEntityManagerEntityAddComponentsHandler) OnEntityManagerEntityAddComponents ¶ added in v0.3.66
func (h EventEntityManagerEntityAddComponentsHandler) OnEntityManagerEntityAddComponents(entityManager EntityManager, entity ec.Entity, components []ec.Component)
type EventEntityManagerEntityComponentEnableChanged ¶ added in v0.4.25
type EventEntityManagerEntityComponentEnableChanged interface {
OnEntityManagerEntityComponentEnableChanged(entityManager EntityManager, entity ec.Entity, component ec.Component, enable bool)
}
EventEntityManagerEntityComponentEnableChanged 在受管实体的组件启用状态改变后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerEntityComponentEnableChangedHandler ¶ added in v0.4.25
type EventEntityManagerEntityComponentEnableChangedHandler func(entityManager EntityManager, entity ec.Entity, component ec.Component, enable bool)
func HandleEventEntityManagerEntityComponentEnableChanged ¶ added in v0.4.25
func HandleEventEntityManagerEntityComponentEnableChanged(fun func(entityManager EntityManager, entity ec.Entity, component ec.Component, enable bool)) EventEntityManagerEntityComponentEnableChangedHandler
func (EventEntityManagerEntityComponentEnableChangedHandler) OnEntityManagerEntityComponentEnableChanged ¶ added in v0.4.25
func (h EventEntityManagerEntityComponentEnableChangedHandler) OnEntityManagerEntityComponentEnableChanged(entityManager EntityManager, entity ec.Entity, component ec.Component, enable bool)
type EventEntityManagerEntityFirstTouchComponent ¶ added in v0.3.66
type EventEntityManagerEntityFirstTouchComponent interface {
OnEntityManagerEntityFirstTouchComponent(entityManager EntityManager, entity ec.Entity, component ec.Component)
}
EventEntityManagerEntityFirstTouchComponent 在受管实体首次访问延迟唤醒组件时派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerEntityFirstTouchComponentHandler ¶ added in v0.3.66
type EventEntityManagerEntityFirstTouchComponentHandler func(entityManager EntityManager, entity ec.Entity, component ec.Component)
func HandleEventEntityManagerEntityFirstTouchComponent ¶ added in v0.3.66
func HandleEventEntityManagerEntityFirstTouchComponent(fun func(entityManager EntityManager, entity ec.Entity, component ec.Component)) EventEntityManagerEntityFirstTouchComponentHandler
func (EventEntityManagerEntityFirstTouchComponentHandler) OnEntityManagerEntityFirstTouchComponent ¶ added in v0.3.66
func (h EventEntityManagerEntityFirstTouchComponentHandler) OnEntityManagerEntityFirstTouchComponent(entityManager EntityManager, entity ec.Entity, component ec.Component)
type EventEntityManagerEntityRemoveComponent ¶ added in v0.3.66
type EventEntityManagerEntityRemoveComponent interface {
OnEntityManagerEntityRemoveComponent(entityManager EntityManager, entity ec.Entity, component ec.Component)
}
EventEntityManagerEntityRemoveComponent 在受管实体删除组件前派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerEntityRemoveComponentHandler ¶ added in v0.3.66
type EventEntityManagerEntityRemoveComponentHandler func(entityManager EntityManager, entity ec.Entity, component ec.Component)
func HandleEventEntityManagerEntityRemoveComponent ¶ added in v0.3.66
func HandleEventEntityManagerEntityRemoveComponent(fun func(entityManager EntityManager, entity ec.Entity, component ec.Component)) EventEntityManagerEntityRemoveComponentHandler
func (EventEntityManagerEntityRemoveComponentHandler) OnEntityManagerEntityRemoveComponent ¶ added in v0.3.66
func (h EventEntityManagerEntityRemoveComponentHandler) OnEntityManagerEntityRemoveComponent(entityManager EntityManager, entity ec.Entity, component ec.Component)
type EventEntityManagerRemoveEntity ¶ added in v0.3.66
type EventEntityManagerRemoveEntity interface {
OnEntityManagerRemoveEntity(entityManager EntityManager, entity ec.Entity)
}
EventEntityManagerRemoveEntity 在实体离开本地管理器前派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityManagerRemoveEntityHandler ¶ added in v0.3.66
type EventEntityManagerRemoveEntityHandler func(entityManager EntityManager, entity ec.Entity)
func HandleEventEntityManagerRemoveEntity ¶ added in v0.3.66
func HandleEventEntityManagerRemoveEntity(fun func(entityManager EntityManager, entity ec.Entity)) EventEntityManagerRemoveEntityHandler
func (EventEntityManagerRemoveEntityHandler) OnEntityManagerRemoveEntity ¶ added in v0.3.66
func (h EventEntityManagerRemoveEntityHandler) OnEntityManagerRemoveEntity(entityManager EntityManager, entity ec.Entity)
type EventEntityTreeAddNode ¶ added in v0.2.58
type EventEntityTreeAddNode interface {
OnEntityTreeAddNode(entityTree EntityTree, parentId, childId uid.Id)
}
EventEntityTreeAddNode 在节点成功加入实体树后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityTreeAddNodeHandler ¶ added in v0.2.58
type EventEntityTreeAddNodeHandler func(entityTree EntityTree, parentId, childId uid.Id)
func HandleEventEntityTreeAddNode ¶ added in v0.2.58
func HandleEventEntityTreeAddNode(fun func(entityTree EntityTree, parentId, childId uid.Id)) EventEntityTreeAddNodeHandler
func (EventEntityTreeAddNodeHandler) OnEntityTreeAddNode ¶ added in v0.2.58
func (h EventEntityTreeAddNodeHandler) OnEntityTreeAddNode(entityTree EntityTree, parentId, childId uid.Id)
type EventEntityTreeMoveNode ¶ added in v0.4.25
type EventEntityTreeMoveNode interface {
OnEntityTreeMoveNode(entityTree EntityTree, childId, fromParentId, toParentId uid.Id)
}
EventEntityTreeMoveNode 在节点切换父节点后派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityTreeMoveNodeHandler ¶ added in v0.4.25
type EventEntityTreeMoveNodeHandler func(entityTree EntityTree, childId, fromParentId, toParentId uid.Id)
func HandleEventEntityTreeMoveNode ¶ added in v0.4.25
func HandleEventEntityTreeMoveNode(fun func(entityTree EntityTree, childId, fromParentId, toParentId uid.Id)) EventEntityTreeMoveNodeHandler
func (EventEntityTreeMoveNodeHandler) OnEntityTreeMoveNode ¶ added in v0.4.25
func (h EventEntityTreeMoveNodeHandler) OnEntityTreeMoveNode(entityTree EntityTree, childId, fromParentId, toParentId uid.Id)
type EventEntityTreeRemoveNode ¶ added in v0.2.58
type EventEntityTreeRemoveNode interface {
OnEntityTreeRemoveNode(entityTree EntityTree, parentId, childId uid.Id)
}
EventEntityTreeRemoveNode 在节点的树关系移除前派发。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventEntityTreeRemoveNodeHandler ¶ added in v0.2.58
type EventEntityTreeRemoveNodeHandler func(entityTree EntityTree, parentId, childId uid.Id)
func HandleEventEntityTreeRemoveNode ¶ added in v0.2.58
func HandleEventEntityTreeRemoveNode(fun func(entityTree EntityTree, parentId, childId uid.Id)) EventEntityTreeRemoveNodeHandler
func (EventEntityTreeRemoveNodeHandler) OnEntityTreeRemoveNode ¶ added in v0.2.58
func (h EventEntityTreeRemoveNodeHandler) OnEntityTreeRemoveNode(entityTree EntityTree, parentId, childId uid.Id)
type EventInstallAddIn ¶ added in v0.4.27
type EventInstallAddIn interface {
OnInstallAddIn(status AddInStatus)
}
EventInstallAddIn 在插件进入 Loaded 状态后派发,用于执行激活流程。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventInstallAddInHandler ¶ added in v0.4.27
type EventInstallAddInHandler func(status AddInStatus)
func HandleEventInstallAddIn ¶ added in v0.4.27
func HandleEventInstallAddIn(fun func(status AddInStatus)) EventInstallAddInHandler
func (EventInstallAddInHandler) OnInstallAddIn ¶ added in v0.4.27
func (h EventInstallAddInHandler) OnInstallAddIn(status AddInStatus)
type EventUninstallAddIn ¶ added in v0.4.27
type EventUninstallAddIn interface {
OnUninstallAddIn(status AddInStatus)
}
EventUninstallAddIn 在 Running 插件从管理器移除前派发,用于执行停用流程。 +event-gen:export_emit=0 +event-tab-gen:recursion=allow
type EventUninstallAddInHandler ¶ added in v0.4.27
type EventUninstallAddInHandler func(status AddInStatus)
func HandleEventUninstallAddIn ¶ added in v0.4.27
func HandleEventUninstallAddIn(fun func(status AddInStatus)) EventUninstallAddInHandler
func (EventUninstallAddInHandler) OnUninstallAddIn ¶ added in v0.4.27
func (h EventUninstallAddInHandler) OnUninstallAddIn(status AddInStatus)
type Frame ¶
type Frame interface {
// TargetFPS 返回目标 FPS。
TargetFPS() float64
// CurFPS 返回最近一个统计周期内的实际 FPS。
CurFPS() float64
// TotalFrames 返回最大运行帧数;0 表示不限制。
TotalFrames() int64
// CurFrames 返回已经开始执行的帧数。
CurFrames() int64
// RunningBeginTime 返回帧循环的启动时间。
RunningBeginTime() time.Time
// RunningElapseTime 返回已累计的帧循环运行时长。
RunningElapseTime() time.Duration
// LoopBeginTime 返回当前帧循环的开始时间;循环包含异步调用处理。
LoopBeginTime() time.Time
// LastLoopElapseTime 返回上一帧完整循环的耗时,包含异步调用处理。
LastLoopElapseTime() time.Duration
// UpdateBeginTime 返回当前帧更新阶段的开始时间。
UpdateBeginTime() time.Time
// LastUpdateElapseTime 返回上一帧更新阶段的耗时。
LastUpdateElapseTime() time.Duration
}
Frame 提供运行时帧循环的配置值和只读统计信息。
type GC ¶ added in v0.2.53
type GC interface {
// GC 执行实际清理。
GC()
// NeedGC 报告对象当前是否需要清理。
NeedGC() bool
}
GC 表示可由运行时延迟清理的对象。
type GCCollector ¶ added in v0.2.53
type GCCollector interface {
// CollectGC 在 gc 需要清理时将其加入当前运行时的待清理队列。
CollectGC(gc GC)
}
GCCollector 收集需要在后续运行时 GC 阶段清理的对象。
type IAddInManagerEventTab ¶ added in v0.4.27
type IContextRunningEventTab ¶ added in v0.4.25
type IEntityManagerEventTab ¶ added in v0.3.66
type IEntityManagerEventTab interface {
EventEntityManagerAddEntity() event.IEvent
EventEntityManagerRemoveEntity() event.IEvent
EventEntityManagerEntityAddComponents() event.IEvent
EventEntityManagerEntityRemoveComponent() event.IEvent
EventEntityManagerEntityComponentEnableChanged() event.IEvent
EventEntityManagerEntityFirstTouchComponent() event.IEvent
}
type IEntityTreeEventTab ¶ added in v0.3.48
type RunningEvent ¶ added in v0.4.25
type RunningEvent int32
RunningEvent 标识运行时工作循环、插件和实体生命周期事件。
const ( RunningEvent_Birth RunningEvent = iota // 运行时对象创建完成。 RunningEvent_Starting // 运行时开始启动,预装插件在回调前激活。 RunningEvent_Started // 运行时启动完成。 RunningEvent_FrameLoopBegin // 一次完整帧循环开始。 RunningEvent_FrameUpdateBegin // 帧更新阶段开始。 RunningEvent_FrameUpdateEnd // 帧更新阶段结束。 RunningEvent_FrameLoopEnd // 一次完整帧循环结束。 RunningEvent_RunCallBegin // 开始执行一个普通异步调用任务。 RunningEvent_RunCallEnd // 普通异步调用任务执行结束。 RunningEvent_RunGCBegin // 运行时 GC 开始。 RunningEvent_RunGCEnd // 运行时 GC 结束。 RunningEvent_Terminating // 运行时开始停止。 RunningEvent_Terminated // 运行时等待组清空、插件停用完成,主体生命周期结束。 RunningEvent_AddInActivating // 插件开始激活。 RunningEvent_AddInActivationAborted // 插件激活被中止。 RunningEvent_AddInActivated // 插件激活完成。 RunningEvent_AddInDeactivating // 插件开始停用。 RunningEvent_AddInDeactivated // 插件停用完成。 RunningEvent_EntityActivating // 实体开始激活。 RunningEvent_EntityActivationAborted // 实体激活被中止。 RunningEvent_EntityActivated // 实体激活完成。 RunningEvent_EntityDeactivating // 实体开始停用。 RunningEvent_EntityDeactivated // 实体停用完成。 RunningEvent_EntityComponentsActivating // 实体开始激活一批新增组件。 RunningEvent_EntityComponentsActivationAborted // 新增组件的激活流程被中止。 RunningEvent_EntityComponentsActivated // 新增组件激活完成。 RunningEvent_EntityComponentDeactivating // 实体开始停用即将删除的组件。 RunningEvent_EntityComponentDeactivationAborted // 组件的停用回调流程被中止;组件删除仍会完成。 RunningEvent_EntityComponentDeactivated // 组件停用完成,随后将从实体删除。 )
func (RunningEvent) String ¶ added in v0.4.25
func (i RunningEvent) String() string
type RunningEventCB ¶ added in v0.4.25
type RunningEventCB = generic.ActionVar2[Context, RunningEvent, any] // 运行时运行事件回调。
Source Files
¶
- addinmanager.go
- addinmanager_event.gen.go
- addinmanager_event.go
- addinmanager_eventtab.gen.go
- addinstatus.go
- context.go
- context_addin.go
- context_caller.go
- context_concurrent.go
- context_current.go
- context_event.gen.go
- context_event.go
- context_eventtab.gen.go
- context_gc.go
- context_options.go
- doc.go
- entitymanager.go
- entitymanager_event.gen.go
- entitymanager_event.go
- entitymanager_eventtab.gen.go
- entitytree.go
- entitytree_event.gen.go
- entitytree_event.go
- entitytree_eventtab.gen.go
- errors.go
- frame.go
- gc.go
- runningevent.go
- runningevent_string.go
- unsafe_addinmanager.go
- unsafe_addinstatus.go
- unsafe_concurrent_context.go
- unsafe_context.go