From 72505a21c0b8e4693d92f623b740fd73a8f72500 Mon Sep 17 00:00:00 2001 From: Matthew Rich Date: Sun, 5 May 2024 00:33:44 -0700 Subject: [PATCH] add subjects --- subjects/selector.go | 32 ++++++++++++++++++++++++++++++ subjects/selector_test.go | 15 ++++++++++++++ subjects/subjects.go | 41 +++++++++++++++++++++++++++++++++++++++ subjects/subjects_test.go | 20 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 subjects/selector.go create mode 100644 subjects/selector_test.go create mode 100644 subjects/subjects.go create mode 100644 subjects/subjects_test.go diff --git a/subjects/selector.go b/subjects/selector.go new file mode 100644 index 0000000..a528ab7 --- /dev/null +++ b/subjects/selector.go @@ -0,0 +1,32 @@ +package subjects + +import ( + "feudal/message" + "feudal/feudal" +) + +type Selector interface { + Select(path string) + Workers() WorkerCollection + Send(m message.Envelope) +} + +type Selection struct { + workers feudal.Subjects +} + +func NewSelector() Selector { + return &Selection{ workers: New() } +} + +func (s *Selection) Select(path string) { + +} + +func (s *Selection) Send(m message.Envelope) { + s.workers.Send(m) +} + +func (s *Selection) Workers() WorkerCollection { + return *s.workers.(*WorkerCollection) +} diff --git a/subjects/selector_test.go b/subjects/selector_test.go new file mode 100644 index 0000000..bdb44f1 --- /dev/null +++ b/subjects/selector_test.go @@ -0,0 +1,15 @@ +package subjects + +import ( + "testing" +) + +func setupSelector() Selector { + s := NewSelector() + return s +} + +func TestSelectorPath(t *testing.T) { + s := setupSelector() + s.Select("feudal://") +} diff --git a/subjects/subjects.go b/subjects/subjects.go new file mode 100644 index 0000000..4639a23 --- /dev/null +++ b/subjects/subjects.go @@ -0,0 +1,41 @@ +package subjects + +import ( + "feudal/feudal" + "feudal/message" +) + +type WorkerCollection map[string]feudal.WorkerRouter + +func New() feudal.Subjects { + var c WorkerCollection = make(map[string]feudal.WorkerRouter) + return &c +} + +func (c *WorkerCollection) Send(m message.Envelope) { + for _, w := range *c { + w.Send(m) + } +} + +func (c *WorkerCollection) Add(name string, worker feudal.WorkerRouter) { + (*c)[name] = worker +} + +func (c *WorkerCollection) Remove(name string) { + +} + +func (c *WorkerCollection) Disolve() { + for _, w := range *c { + w.Stop() + } +} + +func (c *WorkerCollection) Address() string { + return "" +} + +func (c *WorkerCollection) Get(name string) feudal.WorkerRouter { + return (*c)[name] +} diff --git a/subjects/subjects_test.go b/subjects/subjects_test.go new file mode 100644 index 0000000..a3637b2 --- /dev/null +++ b/subjects/subjects_test.go @@ -0,0 +1,20 @@ +package subjects + +import ( + "log" + "testing" + "feudal/feudal" +) + +func setupSubjects() feudal.Subjects { + s := New() + if s == nil { + log.Fatal("Failed creating new Subjects") + } + return s +} + +func TestSubjectsSend(t *testing.T) { + s := setupSubjects() + s.Send(nil) +}