]> Sergey Matveev's repositories - vors.git/blobdiff - cmd/client/main.go
Notification about peer mute toggling
[vors.git] / cmd / client / main.go
index a07c75e6c5064a78a14c28c42a9b6385d888d4b999b857e0aac9285beebb4f01..81db880b3b2842e51d74fe60344f32898d6f73b4000eece8188f3e127a8ad566 100644 (file)
@@ -55,6 +55,7 @@ var (
        Name     = flag.String("name", "test", "username")
        Room     = flag.String("room", "/", "room name")
        Muted    bool
+       Ctrl     = make(chan []byte)
 )
 
 func incr(data []byte) {
@@ -67,6 +68,20 @@ func incr(data []byte) {
        panic("overflow")
 }
 
+func muteToggle() (muted bool) {
+       Muted = !Muted
+       if Ctrl != nil {
+               var cmd string
+               if Muted {
+                       cmd = vors.CmdMuted
+               } else {
+                       cmd = vors.CmdUnmuted
+               }
+               Ctrl <- vors.ArgsEncode([]byte(cmd))
+       }
+       return Muted
+}
+
 func main() {
        srvAddr := flag.String("srv", "vors.home.arpa:"+strconv.Itoa(vors.DefaultPort),
                "host:TCP/UDP port to connect to")
@@ -75,7 +90,8 @@ func main() {
        playCmd := flag.String("play", "play "+vors.SoxParams, "play command")
        vadRaw := flag.Uint("vad", 0, "VAD threshold")
        passwd := flag.String("passwd", "", "protected room's password")
-       muteToggle := flag.String("mute-toggle", "", "path to FIFO to toggle mute")
+       muteTogglePth := flag.String("mute-toggle", "",
+               "path to FIFO to toggle mute")
        prefer4 := flag.Bool("4", false,
                "Prefer obsolete legacy IPv4 address during name resolution")
        version := flag.Bool("version", false, "print version")
@@ -105,17 +121,16 @@ func main() {
        *Name = strings.ReplaceAll(*Name, " ", "-")
 
        go func() {
-               if *muteToggle == "" {
+               if *muteTogglePth == "" {
                        return
                }
                for {
-                       fd, err := os.OpenFile(*muteToggle, os.O_WRONLY, os.FileMode(0666))
+                       fd, err := os.OpenFile(*muteTogglePth, os.O_WRONLY, os.FileMode(0666))
                        if err != nil {
                                log.Fatalln(err)
                        }
-                       Muted = !Muted
                        var reply string
-                       if Muted {
+                       if muteToggle() {
                                reply = "muted"
                        } else {
                                reply = "unmuted"
@@ -328,11 +343,8 @@ func main() {
        }()
 
        go func() {
-               for {
-                       time.Sleep(vors.PingTime)
-                       buf, err := txCS.Encrypt(nil, nil, vors.ArgsEncode(
-                               []byte(vors.CmdPing),
-                       ))
+               for buf := range Ctrl {
+                       buf, err = txCS.Encrypt(nil, nil, buf)
                        if err != nil {
                                log.Fatalln("tx encrypt:", err)
                        }
@@ -342,6 +354,13 @@ func main() {
                }
        }()
 
+       go func() {
+               for {
+                       time.Sleep(vors.PingTime)
+                       Ctrl <- vors.ArgsEncode([]byte(vors.CmdPing))
+               }
+       }()
+
        go func(seen *time.Time) {
                var now time.Time
                for buf := range rx {
@@ -502,6 +521,22 @@ func main() {
                                delete(Streams, sid)
                                close(s.in)
                                close(s.stats.dead)
+                       case vors.CmdMuted:
+                               sid := args[1][0]
+                               s := Streams[sid]
+                               if s == nil {
+                                       log.Println("unknown sid:", sid)
+                                       continue
+                               }
+                               s.stats.muted = true
+                       case vors.CmdUnmuted:
+                               sid := args[1][0]
+                               s := Streams[sid]
+                               if s == nil {
+                                       log.Println("unknown sid:", sid)
+                                       continue
+                               }
+                               s.stats.muted = false
                        default:
                                log.Fatal("unexpected cmd:", cmd)
                        }