Documentation
¶
Index ¶
- Constants
- func ErrorMessage(err error) string
- func ErrorMessagef(err error, format string, args ...any) string
- func GetArg[T EventArgValue](arg *EventArg, key any) T
- func IsAdminContext(ctx context.Context) bool
- func IsAdminID(id int64) bool
- func IsAdminStatus(status intrav1.OnlineStatus) bool
- func IsDevContext(ctx context.Context) bool
- func IsDevStatus(status intrav1.OnlineStatus) bool
- func IsGateContext(ctx context.Context) bool
- func IsGateStatus(status intrav1.OnlineStatus) bool
- func IsInnerContext(ctx context.Context) bool
- func IsInnerStatus(status intrav1.OnlineStatus) bool
- func IsSvcContext(ctx context.Context) bool
- func IsSvcStatus(status intrav1.OnlineStatus) bool
- func Message(format string, args ...any) string
- func OnlineStatus(status int64) intrav1.OnlineStatus
- func PutEventArg(e *EventArg)
- type BroadcastMessage
- type Broadcastable
- type BuildTunnelResponseFunc
- type BuiltinEventFuncs
- func (tf *BuiltinEventFuncs) RegisterCustomEvent(e WorkerEventType, f eventFunc)
- func (tf *BuiltinEventFuncs) RegisterMinuteTick(f func(ctx Context) error)
- func (tf *BuiltinEventFuncs) RegisterOnCreatedEvent(f func(ctx Context) error)
- func (tf *BuiltinEventFuncs) RegisterOnLoadEvent(f func(ctx Context) error)
- func (tf *BuiltinEventFuncs) RegisterSecondTick(f func(ctx Context) error)
- type ChangedModules
- type Context
- type EventArg
- type EventArgValue
- type EventFunc
- type EventManageable
- type Manager
- type Module
- type ModuleCodec
- type ModuleKey
- type NewModuleFunc
- type ObjectHolder
- type Option
- type PersistManager
- func (s *PersistManager) Change(ctx context.Context, modules []ModuleKey, immediately bool)
- func (s *PersistManager) ID() int64
- func (s *PersistManager) Immediately() chan struct{}
- func (s *PersistManager) Persist(ctx context.Context, proto VersionProto) error
- func (s *PersistManager) Persister() Persistent
- func (s *PersistManager) PrepareToPersist(ctx context.Context) error
- func (s *PersistManager) SaveChan() chan VersionProto
- func (s *PersistManager) Stop(ctx context.Context) (err error)
- type Persistent
- type Responser
- func (w *Responser) ConsumeTunnelResponse() <-chan xnet.TunnelMessage
- func (w *Responser) ExecuteSend(out xnet.TunnelMessage) error
- func (w *Responser) Push(mod int32, seq int32, obj int64, sc proto.Message) error
- func (w *Responser) PushImmediately(mod int32, seq int32, obj int64, sc proto.Message) error
- func (w *Responser) Reply(msg xnet.TunnelMessage)
- func (w *Responser) SCIndex() int32
- func (w *Responser) SendFunc() SendFunc
- func (w *Responser) SetSCIndexFunc(scIndexFunc func() int32)
- func (w *Responser) UpdateSendFunc(sendFunc SendFunc)
- type Responsive
- type SendFunc
- type Tickers
- type Tuple
- type VersionProto
- type WithArg
- type Workable
- type Worker
- func (w *Worker) ClientIP() string
- func (w *Worker) ConsumeEvent() <-chan EventFunc
- func (w *Worker) EmitEvent(t WorkerEventType, args ...WithArg) error
- func (w *Worker) EmitEventFunc(f EventFunc) error
- func (w *Worker) ExecuteEvent(wctx Context, f EventFunc) error
- func (w *Worker) ID() int64
- func (w *Worker) IsAdminID() bool
- func (w *Worker) LogInfo() string
- func (w *Worker) Referer() string
- func (w *Worker) Status() intrav1.OnlineStatus
- func (w *Worker) Stop(ctx context.Context) (err error)
- func (w *Worker) Unique() uint64
- type WorkerBroadcaster
- func (w *WorkerBroadcaster) Broadcast(wctx Context, mod climod.ModuleID, seq int32, obj int64, body proto.Message) (err error)
- func (w *WorkerBroadcaster) Consume() <-chan *BroadcastMessage
- func (w *WorkerBroadcaster) ExecuteBroadcast(msg *BroadcastMessage) error
- func (w *WorkerBroadcaster) Multicast(wctx Context, mod climod.ModuleID, seq int32, obj int64, body proto.Message, ...) (err error)
- type WorkerEventType
- type WorkerMap
Constants ¶
View Source
const ( EventTypeSecondTick = WorkerEventType(iota + 10_000) EventTypeMinuteTick )
Start from 10_000. The previous numbers are reserved for custom event types: v1.WorkerEventType
Variables ¶
This section is empty.
Functions ¶
func ErrorMessage ¶
func GetArg ¶
func GetArg[T EventArgValue](arg *EventArg, key any) T
func IsAdminContext ¶
func IsAdminStatus ¶
func IsAdminStatus(status intrav1.OnlineStatus) bool
func IsDevContext ¶
func IsDevStatus ¶
func IsDevStatus(status intrav1.OnlineStatus) bool
func IsGateContext ¶
func IsGateStatus ¶
func IsGateStatus(status intrav1.OnlineStatus) bool
func IsInnerContext ¶
func IsInnerStatus ¶
func IsInnerStatus(status intrav1.OnlineStatus) bool
func IsSvcContext ¶
func IsSvcStatus ¶
func IsSvcStatus(status intrav1.OnlineStatus) bool
func OnlineStatus ¶
func OnlineStatus(status int64) intrav1.OnlineStatus
func PutEventArg ¶
func PutEventArg(e *EventArg)
Types ¶
type BroadcastMessage ¶
type BroadcastMessage struct {
// contains filtered or unexported fields
}
type Broadcastable ¶
type Broadcastable interface {
Broadcast(wctx Context, mod climod.ModuleID, seq int32, obj int64, body proto.Message) error
Multicast(wctx Context, mod climod.ModuleID, seq int32, obj int64, body proto.Message, uids ...int64) error
Consume() <-chan *BroadcastMessage
ExecuteBroadcast(msg *BroadcastMessage) error
}
func NewBroadcaster ¶
func NewBroadcaster(pusher *data.PushRepo) Broadcastable
type BuildTunnelResponseFunc ¶
type BuiltinEventFuncs ¶
type BuiltinEventFuncs struct {
// contains filtered or unexported fields
}
func (*BuiltinEventFuncs) RegisterCustomEvent ¶
func (tf *BuiltinEventFuncs) RegisterCustomEvent(e WorkerEventType, f eventFunc)
func (*BuiltinEventFuncs) RegisterMinuteTick ¶
func (tf *BuiltinEventFuncs) RegisterMinuteTick(f func(ctx Context) error)
func (*BuiltinEventFuncs) RegisterOnCreatedEvent ¶
func (tf *BuiltinEventFuncs) RegisterOnCreatedEvent(f func(ctx Context) error)
func (*BuiltinEventFuncs) RegisterOnLoadEvent ¶
func (tf *BuiltinEventFuncs) RegisterOnLoadEvent(f func(ctx Context) error)
func (*BuiltinEventFuncs) RegisterSecondTick ¶
func (tf *BuiltinEventFuncs) RegisterSecondTick(f func(ctx Context) error)
type ChangedModules ¶
type ChangedModules struct {
// contains filtered or unexported fields
}
func NewChangedModules ¶
func NewChangedModules(cp int) *ChangedModules
func (*ChangedModules) Add ¶
func (c *ChangedModules) Add(modules []ModuleKey)
func (*ChangedModules) Move ¶
func (c *ChangedModules) Move() []ModuleKey
type Context ¶
type Context interface {
context.Context
EventManageable
Responsive
Now() time.Time
ClientIP() string
UID() int64
OID() int64
SID() int64
UnsafeObject() any
Snapshot() VersionProto
Changed(modules ...ModuleKey)
ChangedImmediately(modules ...ModuleKey)
ChangedModules() (modules []ModuleKey, immediately bool)
}
type EventArg ¶
type EventArg struct {
// contains filtered or unexported fields
}
func GetEventArg ¶
func GetEventArg() *EventArg
type EventArgValue ¶
type EventManageable ¶
type Manager ¶
type Manager struct {
xsync.Stoppable
*BuiltinEventFuncs
// contains filtered or unexported fields
}
func NewManager ¶
func NewManager(logger log.Logger, rt routetable.ReNewalRouteTable, pusher *data.PushRepo, newContext newContextFunc, newPersister newPersisterFunc) (m *Manager, stopFunc func() error)
type Module ¶
type Module interface {
ModuleCodec
IsLifeModule()
}
type ModuleCodec ¶
type NewModuleFunc ¶
type NewModuleFunc func() Module
type ObjectHolder ¶
type ObjectHolder interface {
ID() int64
Version() int64
UnsafeObject() any
Snapshot() VersionProto
}
type PersistManager ¶
func (*PersistManager) Change ¶
func (s *PersistManager) Change(ctx context.Context, modules []ModuleKey, immediately bool)
func (*PersistManager) ID ¶
func (s *PersistManager) ID() int64
func (*PersistManager) Immediately ¶
func (s *PersistManager) Immediately() chan struct{}
func (*PersistManager) Persist ¶
func (s *PersistManager) Persist(ctx context.Context, proto VersionProto) error
func (*PersistManager) Persister ¶
func (s *PersistManager) Persister() Persistent
func (*PersistManager) PrepareToPersist ¶
func (s *PersistManager) PrepareToPersist(ctx context.Context) error
func (*PersistManager) SaveChan ¶
func (s *PersistManager) SaveChan() chan VersionProto
type Persistent ¶
type Persistent interface {
ObjectHolder
AllModuleKeys() []ModuleKey
Lock(f func() error) error
Refresh(ctx context.Context) (err error)
PrepareToPersist(ctx context.Context, modules []ModuleKey) (VersionProto, error)
Persist(ctx context.Context, id int64, proto VersionProto) (err error)
IncVersion(ctx context.Context, id int64) (err error)
OnStop(ctx context.Context, id int64, proto VersionProto) (err error)
}
type Responser ¶
type Responser struct {
// contains filtered or unexported fields
}
func NewResponser ¶
func NewResponser(sendFunc SendFunc, buildPushMessageFunc BuildTunnelResponseFunc) *Responser
func (*Responser) ConsumeTunnelResponse ¶
func (w *Responser) ConsumeTunnelResponse() <-chan xnet.TunnelMessage
func (*Responser) ExecuteSend ¶
func (w *Responser) ExecuteSend(out xnet.TunnelMessage) error
func (*Responser) PushImmediately ¶
func (*Responser) Reply ¶
func (w *Responser) Reply(msg xnet.TunnelMessage)
func (*Responser) SetSCIndexFunc ¶
func (*Responser) UpdateSendFunc ¶
type Responsive ¶
type Responsive interface {
Push(mod int32, seq int32, obj int64, sc proto.Message) error
PushImmediately(mod int32, seq int32, obj int64, sc proto.Message) error
Reply(msg xnet.TunnelMessage)
ConsumeTunnelResponse() <-chan xnet.TunnelMessage
ExecuteSend(msg xnet.TunnelMessage) error
SendFunc() SendFunc
UpdateSendFunc(sendFunc SendFunc)
SCIndex() int32
}
type SendFunc ¶
type SendFunc = func(msg xnet.TunnelMessage) error
type Tickers ¶
type Tickers struct {
*BuiltinEventFuncs
// contains filtered or unexported fields
}
type VersionProto ¶
type WithArg ¶
type WithArg func(arg *EventArg)
func With ¶
func With[T EventArgValue](key any, value T) WithArg
type Worker ¶
type Worker struct {
xsync.Stoppable
Broadcastable
Responsive
*BuiltinEventFuncs
*Tickers
// contains filtered or unexported fields
}
func (*Worker) ConsumeEvent ¶
func (*Worker) EmitEventFunc ¶
func (*Worker) Status ¶
func (w *Worker) Status() intrav1.OnlineStatus
type WorkerBroadcaster ¶
type WorkerBroadcaster struct {
// contains filtered or unexported fields
}
WorkerBroadcaster TODO
func (*WorkerBroadcaster) Consume ¶
func (w *WorkerBroadcaster) Consume() <-chan *BroadcastMessage
func (*WorkerBroadcaster) ExecuteBroadcast ¶
func (w *WorkerBroadcaster) ExecuteBroadcast(msg *BroadcastMessage) error
type WorkerEventType ¶
type WorkerEventType int32
WorkerEventType worker event type. Custom event types should be less than 10_000
type WorkerMap ¶
type WorkerMap struct {
// contains filtered or unexported fields
}
WorkerMap is a thread-safe map implementation that uses sharding to reduce lock contention. It divides the map into multiple shards, each protected by its own RWMutex. This allows for better concurrent access compared to a single map protected by a single lock.
func NewWorkerMap ¶
func (WorkerMap) SimilarCount ¶
Click to show internal directories.
Click to hide internal directories.