Concept plugin layout
This commit is contained in:
committed by
ncthompson
parent
d02de285d9
commit
47e73a4eff
57
mk2core/core.go
Normal file
57
mk2core/core.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package mk2core
|
||||
|
||||
import (
|
||||
"github.com/diebietse/invertergui/mk2driver"
|
||||
)
|
||||
|
||||
type Core struct {
|
||||
mk2driver.Mk2
|
||||
plugins map[*subscription]bool
|
||||
register chan *subscription
|
||||
}
|
||||
|
||||
func NewCore(m mk2driver.Mk2) *Core {
|
||||
core := &Core{
|
||||
Mk2: m,
|
||||
register: make(chan *subscription, 255),
|
||||
plugins: map[*subscription]bool{},
|
||||
}
|
||||
go core.run()
|
||||
return core
|
||||
}
|
||||
|
||||
func (c *Core) NewSubscription() mk2driver.Mk2 {
|
||||
sub := &subscription{
|
||||
send: make(chan *mk2driver.Mk2Info),
|
||||
}
|
||||
c.register <- sub
|
||||
return sub
|
||||
}
|
||||
|
||||
func (c *Core) run() {
|
||||
for {
|
||||
select {
|
||||
case r := <-c.register:
|
||||
c.plugins[r] = true
|
||||
case e := <-c.C():
|
||||
for plugin := range c.plugins {
|
||||
select {
|
||||
case plugin.send <- e:
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type subscription struct {
|
||||
send chan *mk2driver.Mk2Info
|
||||
}
|
||||
|
||||
func (s *subscription) C() chan *mk2driver.Mk2Info {
|
||||
return s.send
|
||||
}
|
||||
|
||||
func (s *subscription) Close() {
|
||||
close(s.send)
|
||||
}
|
||||
Reference in New Issue
Block a user