engine

package
v0.0.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2026 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func StartEngine

func StartEngine(ctx context.Context, cfg EngineConfig) (string, error)

StartEngine starts the Hydris engine and returns the server address. If worldFile is provided, it loads entities from that file on startup and periodically flushes the current state back to the file.

func StartMetricsUpdater

func StartMetricsUpdater(server *WorldServer)

Types

type Bus

type Bus struct {
	// contains filtered or unexported fields
}

func NewBus

func NewBus() *Bus

func (*Bus) Dirty

func (b *Bus) Dirty(entityID string, entity *pb.Entity, change pb.EntityChange)

func (*Bus) Register

func (b *Bus) Register(c *Consumer)

func (*Bus) Unregister

func (b *Bus) Unregister(c *Consumer)

type Consumer

type Consumer struct {
	// contains filtered or unexported fields
}

func NewConsumer

func NewConsumer(world *WorldServer, limiter *pb.WatchBehavior, filter *pb.EntityFilter) *Consumer

func (*Consumer) SenderLoop

func (c *Consumer) SenderLoop(ctx context.Context, send func(*pb.EntityChangeEvent) error) error

type EngineConfig

type EngineConfig struct {
	WorldFile  string
	PolicyFile string
	NoDefaults bool
}

EngineConfig holds configuration for starting the engine

type Event

type Event struct {
	Entity *pb.Entity
}

type Store

type Store struct {
	// contains filtered or unexported fields
}

remember to design this to sync over nats AND into kv

func NewStore

func NewStore() *Store

func (*Store) GetEventsInTimeRange

func (s *Store) GetEventsInTimeRange(targetTime time.Time) []*pb.Entity

func (*Store) GetTimeline

func (s *Store) GetTimeline() (time.Time, time.Time)

func (*Store) Push

func (s *Store) Push(ctx context.Context, e Event) error

type WorldServer

type WorldServer struct {
	// contains filtered or unexported fields
}

func NewWorldServer

func NewWorldServer() *WorldServer

func (*WorldServer) EntityCount

func (s *WorldServer) EntityCount() int

func (*WorldServer) FlushToFile

func (s *WorldServer) FlushToFile() error

FlushToFile writes the current head state to the world file atomically. Only local entities (controller.node == this node) are persisted, and only the config and device components are kept. Entities with lifetime.until (expiring/temporary) are skipped entirely.

func (*WorldServer) GetEntity

func (*WorldServer) GetHead

func (s *WorldServer) GetHead(id string) *pb.Entity

func (*WorldServer) GetTimeline

func (*WorldServer) InitNodeIdentity

func (s *WorldServer) InitNodeIdentity()

InitNodeIdentity finds or creates a stable node identity. It looks for an existing entity with a DeviceComponent containing a NodeDevice. If none is found, it derives one from hardware MAC addresses.

func (*WorldServer) LoadDefaults added in v0.0.19

func (s *WorldServer) LoadDefaults(b []byte) error

LoadDefaults loads default entities, hard-setting lifetime.from to a very old timestamp so that any entity written with a real timestamp wins via LWW. Entities that don't yet exist in head are inserted; existing ones are only overwritten if they have an older timestamp (which in practice won't happen).

func (*WorldServer) LoadFromFile

func (s *WorldServer) LoadFromFile(path string) error

func (*WorldServer) RunTask

func (*WorldServer) SetWorldFile

func (s *WorldServer) SetWorldFile(path string)

SetWorldFile sets the path for world state persistence

func (*WorldServer) StartPeriodicFlush

func (s *WorldServer) StartPeriodicFlush(interval time.Duration)

StartPeriodicFlush starts a goroutine that periodically flushes the head to the world file. It also starts a debounce goroutine that flushes shortly after config changes.

func (*WorldServer) WatchEntities

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL