mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
refactor(channels): add factory registry and export SetRunning on BaseChannel
This commit is contained in:
@@ -101,3 +101,7 @@ func (c *BaseChannel) HandleMessage(senderID, chatID, content string, media []st
|
||||
func (c *BaseChannel) setRunning(running bool) {
|
||||
c.running = running
|
||||
}
|
||||
|
||||
func (c *BaseChannel) SetRunning(running bool) {
|
||||
c.running = running
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package channels
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/sipeed/picoclaw/pkg/bus"
|
||||
"github.com/sipeed/picoclaw/pkg/config"
|
||||
)
|
||||
|
||||
// ChannelFactory is a constructor function that creates a Channel from config and message bus.
|
||||
// Each channel subpackage registers one or more factories via init().
|
||||
type ChannelFactory func(cfg *config.Config, bus *bus.MessageBus) (Channel, error)
|
||||
|
||||
var (
|
||||
factoriesMu sync.RWMutex
|
||||
factories = map[string]ChannelFactory{}
|
||||
)
|
||||
|
||||
// RegisterFactory registers a named channel factory. Called from subpackage init() functions.
|
||||
func RegisterFactory(name string, f ChannelFactory) {
|
||||
factoriesMu.Lock()
|
||||
defer factoriesMu.Unlock()
|
||||
factories[name] = f
|
||||
}
|
||||
|
||||
// getFactory looks up a channel factory by name.
|
||||
func getFactory(name string) (ChannelFactory, bool) {
|
||||
factoriesMu.RLock()
|
||||
defer factoriesMu.RUnlock()
|
||||
f, ok := factories[name]
|
||||
return f, ok
|
||||
}
|
||||
Reference in New Issue
Block a user