aboutsummaryrefslogtreecommitdiff
path: root/client/channels.go
diff options
context:
space:
mode:
authorhozan23 <hozan23@karyontech.net>2024-06-13 06:02:24 +0200
committerhozan23 <hozan23@karyontech.net>2024-06-13 06:02:24 +0200
commit8c2d37e093ca64d591fc0aec15a7e2ed424b2e47 (patch)
treefd9bc62e29087a18e7eb4bdd0a1f587ba63e5dd5 /client/channels.go
parenta338905a7f8a2206161cc15f07bda872b9bfc09c (diff)
use message dispatcher to process responses and notifications & spread out comments
Diffstat (limited to 'client/channels.go')
-rw-r--r--client/channels.go78
1 files changed, 0 insertions, 78 deletions
diff --git a/client/channels.go b/client/channels.go
deleted file mode 100644
index 673e366..0000000
--- a/client/channels.go
+++ /dev/null
@@ -1,78 +0,0 @@
-package client
-
-import (
- "fmt"
- "sync"
-)
-
-// channels is a generic structure that holds a map of keys and channels.
-// It is protected by mutex
-type channels[K comparable, V any] struct {
- sync.Mutex
- chans map[K]chan<- V
- bufferSize int
-}
-
-// newChannels creates a new channels
-func newChannels[K comparable, V any](bufferSize int) channels[K, V] {
- chans := make(map[K]chan<- V)
- return channels[K, V]{
- chans: chans,
- bufferSize: bufferSize,
- }
-}
-
-// add adds a new channel and returns the receiving channel
-func (c *channels[K, V]) add(key K) <-chan V {
- c.Lock()
- defer c.Unlock()
-
- ch := make(chan V, c.bufferSize)
- c.chans[key] = ch
- return ch
-}
-
-// length returns the number of channels
-func (c *channels[K, V]) length() int {
- c.Lock()
- defer c.Unlock()
-
- return len(c.chans)
-}
-
-// notify notifies the channel with the given key
-func (c *channels[K, V]) notify(key K, msg V) error {
- c.Lock()
- defer c.Unlock()
-
- if ch, ok := c.chans[key]; ok {
- ch <- msg
- return nil
- }
-
- return fmt.Errorf("Channel not found")
-}
-
-// remove removes and returns the channel.
-func (c *channels[K, V]) remove(key K) chan<- V {
- c.Lock()
- defer c.Unlock()
-
- if ch, ok := c.chans[key]; ok {
- delete(c.chans, key)
- return ch
- }
-
- return nil
-}
-
-// clear close all the channels and remove them from the map
-func (c *channels[K, V]) clear() {
- c.Lock()
- defer c.Unlock()
-
- for k, ch := range c.chans {
- close(ch)
- delete(c.chans, k)
- }
-}