- Platform interface wrapping EventManager (Emit, On, Off, OnMultiple, Reset) - TaskEmit, TaskOn, TaskOff, QueryListeners IPC message types - ActionEventFired broadcast for agent consumption - Service with listener tracking and shutdown cleanup - 17 tests with Good/Bad/Ugly coverage Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
// pkg/events/messages.go
|
|
package events
|
|
|
|
// All IPC message types for the events service.
|
|
// Tasks mutate event state; Queries read it; Actions broadcast fired events.
|
|
|
|
// TaskEmit fires a named custom event with optional data to all registered listeners.
|
|
// Result: bool (true if the event was cancelled by a listener)
|
|
//
|
|
// c.PERFORM(events.TaskEmit{Name: "user:login", Data: userPayload})
|
|
type TaskEmit struct {
|
|
Name string `json:"name"`
|
|
Data any `json:"data,omitempty"`
|
|
}
|
|
|
|
// TaskOn registers a persistent listener for the named custom event via IPC.
|
|
// The listener fires an ActionEventFired action for each matching event.
|
|
// Result: nil (side-effect only; use Off/Reset to remove)
|
|
//
|
|
// c.PERFORM(events.TaskOn{Name: "theme:changed"})
|
|
type TaskOn struct {
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// TaskOff removes all listeners for the named custom event.
|
|
// Result: nil
|
|
//
|
|
// c.PERFORM(events.TaskOff{Name: "theme:changed"})
|
|
type TaskOff struct {
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// QueryListeners returns a snapshot of all registered listener counts per event name.
|
|
// Result: []ListenerInfo
|
|
//
|
|
// result, _, _ := c.QUERY(events.QueryListeners{})
|
|
// for _, info := range result.([]events.ListenerInfo) { ... }
|
|
type QueryListeners struct{}
|
|
|
|
// ActionEventFired is broadcast when a registered IPC listener receives an event.
|
|
// Consumers subscribe via c.RegisterAction to react to platform events.
|
|
//
|
|
// c.RegisterAction(func(_ *core.Core, msg core.Message) error {
|
|
// if fired, ok := msg.(events.ActionEventFired); ok {
|
|
// handleEvent(fired.Event)
|
|
// }
|
|
// return nil
|
|
// })
|
|
type ActionEventFired struct {
|
|
Event CustomEvent `json:"event"`
|
|
}
|