Implement pubsub for channel events.

burst
Icedream 2018-04-11 09:33:22 +02:00
parent 92ca29cfac
commit a7394217d5
Signed by: icedream
GPG Key ID: 1573F6D8EFE4D0CF
2 changed files with 14 additions and 2 deletions

View File

@ -11,6 +11,7 @@ type Channel struct {
metadataLock sync.RWMutex metadataLock sync.RWMutex
metadata map[string]string metadata map[string]string
metadataChannel chan map[string]string metadataChannel chan map[string]string
Id string
Name string Name string
Description string Description string
MimeType string MimeType string

View File

@ -3,15 +3,19 @@ package channels
import ( import (
"errors" "errors"
"sync" "sync"
"github.com/cskr/pubsub"
) )
type ChannelManager struct { type ChannelManager struct {
channels map[string]*Channel channels map[string]*Channel
channelsLock sync.RWMutex channelsLock sync.RWMutex
pubsub *pubsub.PubSub
} }
func NewChannelManager() *ChannelManager { func NewChannelManager() *ChannelManager {
return &ChannelManager{ mgr := &ChannelManager{
pubsub: pubsub.New(1),
channels: map[string]*Channel{}, channels: map[string]*Channel{},
} }
} }
@ -38,6 +42,7 @@ func (manager *ChannelManager) Close(uuid string) (err error) {
return return
} }
pubsub.PubSub.Pub("close", manager.channels[uuid])
delete(manager.channels, uuid) delete(manager.channels, uuid)
return return
@ -52,8 +57,14 @@ func (manager *ChannelManager) Open(uuid string) (channel *Channel, err error) {
return return
} }
channel = new(Channel) channel = &Channel{Id: uuid}
manager.channels[uuid] = channel manager.channels[uuid] = channel
pubsub.PubSub.Pub("open", channel)
return return
} }
func (manager *ChannelManager) Shutdown() {
manager.pubsub.Shutdown()
}