1
0
mirror of https://gitlab.crans.org/nounous/ghostream.git synced 2024-12-22 15:02:19 +00:00

Add package comment on transcoder

This commit is contained in:
Alexandre Iooss 2020-10-18 16:14:08 +02:00
parent b9da2ab3a7
commit c42ca78fac
No known key found for this signature in database
GPG Key ID: 6C79278F3FCDCC02
3 changed files with 73 additions and 80 deletions

View File

@ -1,79 +0,0 @@
package telnet
import (
"log"
"net"
"strings"
"time"
"gitlab.crans.org/nounous/ghostream/stream"
)
func handleViewer(s net.Conn, streams map[string]*stream.Stream, cfg *Options) {
// Prompt user about stream name
if _, err := s.Write([]byte("[GHOSTREAM]\nEnter stream name: ")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
s.Close()
return
}
buff := make([]byte, 255)
n, err := s.Read(buff)
if err != nil {
log.Printf("Error while requesting stream ID to telnet client: %s", err)
s.Close()
return
}
name := strings.TrimSpace(string(buff[:n])) + "@text"
if len(name) < 1 {
// Too short, exit
s.Close()
return
}
// Wait a bit
time.Sleep(time.Second)
// Get requested stream
st, ok := streams[name]
if !ok {
log.Println("Stream does not exist, kicking new Telnet viewer")
if _, err := s.Write([]byte("This stream is inactive.\n")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
}
s.Close()
return
}
// Register new client
log.Printf("New Telnet viewer for stream '%s'", name)
c := make(chan []byte, 128)
st.Register(c)
st.IncrementClientCount()
// Hide terminal cursor
if _, err = s.Write([]byte("\033[?25l")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
s.Close()
return
}
// Receive data and send them
for data := range c {
if len(data) < 1 {
log.Print("Remove Telnet viewer because of end of stream")
break
}
// Send data
_, err := s.Write(data)
if err != nil {
log.Printf("Remove Telnet viewer because of sending error, %s", err)
break
}
}
// Close output
st.Unregister(c)
st.DecrementClientCount()
s.Close()
}

View File

@ -1,9 +1,11 @@
// Package telnet provides some fancy tools, like an ASCII-art stream. // Package telnet expose text version of stream.
package telnet package telnet
import ( import (
"log" "log"
"net" "net"
"strings"
"time"
"gitlab.crans.org/nounous/ghostream/stream" "gitlab.crans.org/nounous/ghostream/stream"
) )
@ -39,3 +41,72 @@ func Serve(streams map[string]*stream.Stream, cfg *Options) {
go handleViewer(s, streams, cfg) go handleViewer(s, streams, cfg)
} }
} }
func handleViewer(s net.Conn, streams map[string]*stream.Stream, cfg *Options) {
// Prompt user about stream name
if _, err := s.Write([]byte("[GHOSTREAM]\nEnter stream name: ")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
s.Close()
return
}
buff := make([]byte, 255)
n, err := s.Read(buff)
if err != nil {
log.Printf("Error while requesting stream ID to telnet client: %s", err)
s.Close()
return
}
name := strings.TrimSpace(string(buff[:n])) + "@text"
if len(name) < 1 {
// Too short, exit
s.Close()
return
}
// Wait a bit
time.Sleep(time.Second)
// Get requested stream
st, ok := streams[name]
if !ok {
log.Println("Stream does not exist, kicking new Telnet viewer")
if _, err := s.Write([]byte("This stream is inactive.\n")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
}
s.Close()
return
}
// Register new client
log.Printf("New Telnet viewer for stream '%s'", name)
c := make(chan []byte, 128)
st.Register(c)
st.IncrementClientCount()
// Hide terminal cursor
if _, err = s.Write([]byte("\033[?25l")); err != nil {
log.Printf("Error while writing to TCP socket: %s", err)
s.Close()
return
}
// Receive data and send them
for data := range c {
if len(data) < 1 {
log.Print("Remove Telnet viewer because of end of stream")
break
}
// Send data
_, err := s.Write(data)
if err != nil {
log.Printf("Remove Telnet viewer because of sending error, %s", err)
break
}
}
// Close output
st.Unregister(c)
st.DecrementClientCount()
s.Close()
}

View File

@ -1,3 +1,4 @@
// Package transcoder manages transcoders
package transcoder package transcoder
import ( import (