Implement pubsub for channel events.
parent
92ca29cfac
commit
a7394217d5
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue