uplink/internal/channels/channel.go

55 lines
1.1 KiB
Go

package channels
import (
"context"
"sync"
"git.icedream.tech/icedream/uplink/internal"
)
type Channel struct {
metadataLock sync.RWMutex
metadata map[string]string
metadataChannel chan map[string]string
Name string
Description string
MimeType string
InputStream *internal.Stream
OutputStreams map[string]ChannelOutputStream
}
func (channel *Channel) SetMetadata(data map[string]string) {
channel.metadataLock.Lock()
defer channel.metadataLock.Unlock()
channel.metadata = data
channel.metadataChannel <- data
}
func (channel *Channel) Metadata(ctx context.Context) <-chan map[string]string {
channel.metadataLock.Lock()
defer channel.metadataLock.Unlock()
metadataChan := make(chan map[string]string, 1)
if channel.metadata != nil {
metadataChan <- channel.metadata
}
go func() {
for {
select {
case data := <-channel.metadataChannel:
case <-ctx.Done():
}
}
}()
}
func NewChannel() *Channel {
return &Channel{
metadataChannel: make(chan map[string]string),
OutputStreams: map[string]ChannelOutputStream
}
}
type ChannelOutputStream struct {
*internal.Stream
}