summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2017-07-29 17:12:30 -0400
committerNathan Perry <avaglir@gmail.com>2017-07-29 17:12:30 -0400
commitb892dd48234dcbed539ddb982af4a76e81d2e8a1 (patch)
treea2fd9d347c575d85d2bb95020d592eb9c0d0a73f
parent4cd4870a85ed3b3d69d8455faeb7ca466dc42b7b (diff)
simplify further
-rw-r--r--downloader/download_manager.go75
1 files changed, 25 insertions, 50 deletions
diff --git a/downloader/download_manager.go b/downloader/download_manager.go
index 8f9e8a3..c0ceecb 100644
--- a/downloader/download_manager.go
+++ b/downloader/download_manager.go
@@ -25,15 +25,9 @@ type DownloadManager struct {
voiceID string
dls chan *downloader
- PlayState chan DlMessage
- playStateChan chan DlMessage
- proxyStateChan chan DlMessage
-
- proxyChan chan playBundle
+ PlayState chan DlMessage
}
-const proxyBufSize = 512
-
func NewManager(s *discordgo.Session, guildID string, voiceChanID string) *DownloadManager {
dm := &DownloadManager{
session: s,
@@ -41,55 +35,54 @@ func NewManager(s *discordgo.Session, guildID string, voiceChanID string) *Downl
PlayState: make(chan DlMessage),
guildID: guildID,
voiceID: voiceChanID,
-
- playStateChan: make(chan DlMessage),
-
- proxyStateChan: make(chan DlMessage),
- proxyChan: make(chan playBundle),
}
- go dm.teeStateMessages()
- go dm.proxyOpusPackets()
go dm.playFromQueue()
return dm
}
-func (m *DownloadManager) teeStateMessages() {
- for msg := range m.PlayState {
- m.playStateChan <- msg
- m.proxyStateChan <- msg
- }
-}
+func (m *DownloadManager) playFromQueue() {
+ for dl := range m.dls {
+ conn, err := m.session.ChannelVoiceJoin(m.guildID, m.voiceID, false, false)
+ if err != nil {
+ log.Errorf("unable to connect to the voice channel: %q", err)
+ time.Sleep(1 * time.Second)
+ break
+ }
+
+ out, _ := dl.Start()
-func (m *DownloadManager) proxyOpusPackets() {
-loop:
- for bundle := range m.proxyChan {
playState := Play
- bundle.conn.Speaking(true)
+ conn.Speaking(true)
cleanup := func() {
- bundle.conn.Speaking(false)
- bundle.conn.Disconnect()
+ conn.Speaking(false)
+ conn.Disconnect()
}
+ inner:
for {
switch playState {
case Clear:
for {
select {
- case <-m.proxyChan:
+ case <-m.PlayState:
default:
}
}
- cleanup()
- continue loop
+ break inner
case Pause:
- playState = <-m.proxyStateChan
+ playState = <-m.PlayState
case Play:
select { // first check if we have a state update message coming in
- case playState = <-m.proxyStateChan:
- case bundle.conn.OpusSend <- <-bundle.data:
+ case playState = <-m.PlayState:
+ case elem, ok := <-out:
+ if !ok {
+ break inner
+ }
+
+ conn.OpusSend <- elem
}
}
}
@@ -97,24 +90,6 @@ loop:
}
}
-func (m *DownloadManager) playFromQueue() {
- for dl := range m.dls {
- ch, err := m.session.ChannelVoiceJoin(m.guildID, m.voiceID, false, false)
- if err != nil {
- log.Errorf("unable to connect to the voice channel: %q", err)
- time.Sleep(1 * time.Second)
- break
- }
-
- out, done := dl.Start()
- m.proxyChan <- playBundle{
- data: out,
- conn: ch,
- }
- <-done
- }
-}
-
func (m *DownloadManager) Enqueue(url string, startTime, duration time.Duration) error {
dl, err := newDownload(url, startTime, duration)
if err != nil {