diff --git a/internal/common/module.go b/internal/common/module.go new file mode 100644 index 0000000..7737317 --- /dev/null +++ b/internal/common/module.go @@ -0,0 +1,13 @@ +package common + +import ( + "context" +) + +type Module interface { + Id() string + Type() string + Start(context.Context) error + Stop() + Output(context.Context, any) error +} diff --git a/internal/module/http-server.go b/internal/module/http-server.go index b80083a..51c3c8d 100644 --- a/internal/module/http-server.go +++ b/internal/module/http-server.go @@ -56,7 +56,7 @@ func (hsrw *HTTPServerResponseWriter) Write(data []byte) (int, error) { func init() { RegisterModule(ModuleRegistration{ Type: "http.server", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params portNum, err := params.GetInt("port") if err != nil { diff --git a/internal/module/midi-input.go b/internal/module/midi-input.go index 690faee..beda65c 100644 --- a/internal/module/midi-input.go +++ b/internal/module/midi-input.go @@ -27,7 +27,7 @@ type MIDIInput struct { func init() { RegisterModule(ModuleRegistration{ Type: "midi.input", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params portString, err := params.GetString("port") if err != nil { diff --git a/internal/module/midi-output.go b/internal/module/midi-output.go index ce8ce50..0e8d3d7 100644 --- a/internal/module/midi-output.go +++ b/internal/module/midi-output.go @@ -27,7 +27,7 @@ type MIDIOutput struct { func init() { RegisterModule(ModuleRegistration{ Type: "midi.output", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params portString, err := params.GetString("port") diff --git a/internal/module/module.go b/internal/module/module.go index 730c84f..5ed9571 100644 --- a/internal/module/module.go +++ b/internal/module/module.go @@ -1,11 +1,11 @@ package module import ( - "context" "fmt" "log/slog" "sync" + "github.com/jwetzell/showbridge-go/internal/common" "github.com/jwetzell/showbridge-go/internal/config" ) @@ -15,18 +15,9 @@ type ModuleError struct { Error string `json:"error"` } -type Module interface { - Id() string - Type() string - Start(context.Context) error - Stop() - Output(context.Context, any) error - Get(key string) (any, error) -} - type ModuleRegistration struct { Type string `json:"type"` - New func(config.ModuleConfig) (Module, error) + New func(config.ModuleConfig) (common.Module, error) } func RegisterModule(mod ModuleRegistration) { diff --git a/internal/module/mqtt-client.go b/internal/module/mqtt-client.go index 2e6bac1..553c8fc 100644 --- a/internal/module/mqtt-client.go +++ b/internal/module/mqtt-client.go @@ -26,7 +26,7 @@ type MQTTClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "mqtt.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params brokerString, err := params.GetString("broker") diff --git a/internal/module/nats-client.go b/internal/module/nats-client.go index fc7cfcd..a5c50b2 100644 --- a/internal/module/nats-client.go +++ b/internal/module/nats-client.go @@ -25,7 +25,7 @@ type NATSClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "nats.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params urlString, err := params.GetString("url") if err != nil { diff --git a/internal/module/nats-server.go b/internal/module/nats-server.go index eee10ad..ad015bf 100644 --- a/internal/module/nats-server.go +++ b/internal/module/nats-server.go @@ -27,7 +27,7 @@ type NATSServer struct { func init() { RegisterModule(ModuleRegistration{ Type: "nats.server", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params portNum, err := params.GetInt("port") if err != nil { diff --git a/internal/module/psn-client.go b/internal/module/psn-client.go index 822a1d2..eb6b283 100644 --- a/internal/module/psn-client.go +++ b/internal/module/psn-client.go @@ -26,7 +26,7 @@ type PSNClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "psn.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { return &PSNClient{config: config, decoder: psn.NewDecoder(), logger: CreateLogger(config)}, nil }, diff --git a/internal/module/redis-client.go b/internal/module/redis-client.go index d099922..dc79ff3 100644 --- a/internal/module/redis-client.go +++ b/internal/module/redis-client.go @@ -25,7 +25,7 @@ type RedisClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "redis.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params hostString, err := params.GetString("host") if err != nil { diff --git a/internal/module/serial-client.go b/internal/module/serial-client.go index e4c38b0..14b3277 100644 --- a/internal/module/serial-client.go +++ b/internal/module/serial-client.go @@ -30,7 +30,7 @@ type SerialClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "serial.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params portString, err := params.GetString("port") if err != nil { diff --git a/internal/module/sip-call-server.go b/internal/module/sip-call-server.go index 05b1e68..2ec6784 100644 --- a/internal/module/sip-call-server.go +++ b/internal/module/sip-call-server.go @@ -46,7 +46,7 @@ type sipCallContextKey string func init() { RegisterModule(ModuleRegistration{ Type: "sip.call.server", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params portNum, err := params.GetInt("port") if err != nil { diff --git a/internal/module/sip-dtmf-server.go b/internal/module/sip-dtmf-server.go index f2b71e2..44e8969 100644 --- a/internal/module/sip-dtmf-server.go +++ b/internal/module/sip-dtmf-server.go @@ -46,7 +46,7 @@ type SIPDTMFCall struct { func init() { RegisterModule(ModuleRegistration{ Type: "sip.dtmf.server", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params portNum, err := params.GetInt("port") diff --git a/internal/module/tcp-client.go b/internal/module/tcp-client.go index 2bd1b26..f2e29ee 100644 --- a/internal/module/tcp-client.go +++ b/internal/module/tcp-client.go @@ -27,7 +27,7 @@ type TCPClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "net.tcp.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params hostString, err := params.GetString("host") if err != nil { diff --git a/internal/module/tcp-server.go b/internal/module/tcp-server.go index fdd19eb..98166ce 100644 --- a/internal/module/tcp-server.go +++ b/internal/module/tcp-server.go @@ -33,7 +33,7 @@ type TCPServer struct { func init() { RegisterModule(ModuleRegistration{ Type: "net.tcp.server", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params portNum, err := params.GetInt("port") if err != nil { diff --git a/internal/module/test/module_test.go b/internal/module/test/module_test.go index de1b70e..a9bfe13 100644 --- a/internal/module/test/module_test.go +++ b/internal/module/test/module_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "github.com/jwetzell/showbridge-go/internal/common" "github.com/jwetzell/showbridge-go/internal/config" "github.com/jwetzell/showbridge-go/internal/module" ) @@ -43,7 +44,7 @@ func TestModuleBadRegistrationNoType(t *testing.T) { module.RegisterModule(module.ModuleRegistration{ Type: "", - New: func(config config.ModuleConfig) (module.Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { return &TestModule{}, nil }, }) @@ -71,14 +72,14 @@ func TestModuleBadRegistrationExistingType(t *testing.T) { module.RegisterModule(module.ModuleRegistration{ Type: "module.test", - New: func(config config.ModuleConfig) (module.Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { return &TestModule{}, nil }, }) module.RegisterModule(module.ModuleRegistration{ Type: "module.test", - New: func(config config.ModuleConfig) (module.Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { return &TestModule{}, nil }, }) diff --git a/internal/module/time-interval.go b/internal/module/time-interval.go index ac76e72..151d1b6 100644 --- a/internal/module/time-interval.go +++ b/internal/module/time-interval.go @@ -24,7 +24,7 @@ type TimeInterval struct { func init() { RegisterModule(ModuleRegistration{ Type: "time.interval", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params durationInt, err := params.GetInt("duration") diff --git a/internal/module/time-timer.go b/internal/module/time-timer.go index be0c556..274fa8a 100644 --- a/internal/module/time-timer.go +++ b/internal/module/time-timer.go @@ -24,7 +24,7 @@ type TimeTimer struct { func init() { RegisterModule(ModuleRegistration{ Type: "time.timer", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params durationNum, err := params.GetInt("duration") diff --git a/internal/module/udp-client.go b/internal/module/udp-client.go index 891f712..5e65863 100644 --- a/internal/module/udp-client.go +++ b/internal/module/udp-client.go @@ -25,7 +25,7 @@ type UDPClient struct { func init() { RegisterModule(ModuleRegistration{ Type: "net.udp.client", - New: func(config config.ModuleConfig) (Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { params := config.Params hostString, err := params.GetString("host") if err != nil { diff --git a/internal/module/udp-multicast.go b/internal/module/udp-multicast.go index f06887c..67850fa 100644 --- a/internal/module/udp-multicast.go +++ b/internal/module/udp-multicast.go @@ -25,7 +25,7 @@ type UDPMulticast struct { func init() { RegisterModule(ModuleRegistration{ Type: "net.udp.multicast", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params ipString, err := params.GetString("ip") if err != nil { diff --git a/internal/module/udp-server.go b/internal/module/udp-server.go index 1bf257c..74ee355 100644 --- a/internal/module/udp-server.go +++ b/internal/module/udp-server.go @@ -25,7 +25,7 @@ type UDPServer struct { func init() { RegisterModule(ModuleRegistration{ Type: "net.udp.server", - New: func(moduleConfig config.ModuleConfig) (Module, error) { + New: func(moduleConfig config.ModuleConfig) (common.Module, error) { params := moduleConfig.Params portNum, err := params.GetInt("port") if err != nil { diff --git a/router.go b/router.go index b6b3dc5..d0a3bc1 100644 --- a/router.go +++ b/router.go @@ -25,7 +25,7 @@ type Router struct { contextCancel context.CancelFunc Context context.Context // TODO(jwetzell): do these need to be guarded against concurrency? - ModuleInstances map[string]module.Module + ModuleInstances map[string]common.Module // TODO(jwetzell): change to something easier to lookup RouteInstances []*route.Route ConfigChange chan config.Config @@ -106,7 +106,7 @@ func (r *Router) addRoute(routeDecl config.RouteConfig) error { return nil } -func (r *Router) getModule(moduleId string) module.Module { +func (r *Router) getModule(moduleId string) common.Module { moduleInstance, ok := r.ModuleInstances[moduleId] if !ok { return nil @@ -117,7 +117,7 @@ func (r *Router) getModule(moduleId string) module.Module { func NewRouter(routerConfig config.Config) (*Router, []module.ModuleError, []route.RouteError) { router := Router{ - ModuleInstances: make(map[string]module.Module), + ModuleInstances: make(map[string]common.Module), RouteInstances: []*route.Route{}, ConfigChange: make(chan config.Config, 1), logger: slog.Default().With("component", "router"), @@ -324,7 +324,7 @@ func (r *Router) UpdateConfig(newConfig config.Config) ([]module.ModuleError, [] r.logger.Debug("waiting for modules to exit") r.moduleWait.Wait() - r.ModuleInstances = make(map[string]module.Module) + r.ModuleInstances = make(map[string]common.Module) r.RouteInstances = []*route.Route{} var moduleErrors []module.ModuleError diff --git a/router_test.go b/router_test.go index 2926c81..1f3abc2 100644 --- a/router_test.go +++ b/router_test.go @@ -65,7 +65,7 @@ func (mcm *MockCounterModule) Stop() { func init() { module.RegisterModule(module.ModuleRegistration{ Type: "mock.counter", - New: func(config config.ModuleConfig) (module.Module, error) { + New: func(config config.ModuleConfig) (common.Module, error) { return &MockCounterModule{config: config, logger: slog.Default()}, nil }, })