diff --git a/app/channels/channel.go b/app/channels/channel.go index dd68e9c..c1f5ba3 100644 --- a/app/channels/channel.go +++ b/app/channels/channel.go @@ -11,6 +11,7 @@ type Channel struct { metadataLock sync.RWMutex metadata map[string]string metadataChannel chan map[string]string + Id string Name string Description string MimeType string diff --git a/app/channels/channel_manager.go b/app/channels/channel_manager.go index 8ad31eb..58e5801 100644 --- a/app/channels/channel_manager.go +++ b/app/channels/channel_manager.go @@ -3,15 +3,19 @@ package channels import ( "errors" "sync" + + "github.com/cskr/pubsub" ) type ChannelManager struct { channels map[string]*Channel channelsLock sync.RWMutex + pubsub *pubsub.PubSub } func NewChannelManager() *ChannelManager { - return &ChannelManager{ + mgr := &ChannelManager{ + pubsub: pubsub.New(1), channels: map[string]*Channel{}, } } @@ -38,6 +42,7 @@ func (manager *ChannelManager) Close(uuid string) (err error) { return } + pubsub.PubSub.Pub("close", manager.channels[uuid]) delete(manager.channels, uuid) return @@ -52,8 +57,14 @@ func (manager *ChannelManager) Open(uuid string) (channel *Channel, err error) { return } - channel = new(Channel) + channel = &Channel{Id: uuid} manager.channels[uuid] = channel + pubsub.PubSub.Pub("open", channel) + return } + +func (manager *ChannelManager) Shutdown() { + manager.pubsub.Shutdown() +}