5
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2024-11-26 18:01:36 +00:00
matterbridge/vendor/layeh.com/gumble/gumble/voicetarget.go
2020-10-01 22:50:56 +02:00

77 lines
2.0 KiB
Go

package gumble
import (
"layeh.com/gumble/gumble/MumbleProto"
)
// VoiceTargetLoopback is a special voice target which causes any audio sent to
// the server to be returned to the client.
//
// Its ID should not be modified, and it does not have to to be sent to the
// server before use.
var VoiceTargetLoopback *VoiceTarget = &VoiceTarget{
ID: 31,
}
type voiceTargetChannel struct {
channel *Channel
links, recursive bool
group string
}
// VoiceTarget represents a set of users and/or channels that the client can
// whisper to.
type VoiceTarget struct {
// The voice target ID. This value must be in the range [1, 30].
ID uint32
users []*User
channels []*voiceTargetChannel
}
// Clear removes all users and channels from the voice target.
func (v *VoiceTarget) Clear() {
v.users = nil
v.channels = nil
}
// AddUser adds a user to the voice target.
func (v *VoiceTarget) AddUser(user *User) {
v.users = append(v.users, user)
}
// AddChannel adds a user to the voice target. If group is non-empty, only
// users belonging to that ACL group will be targeted.
func (v *VoiceTarget) AddChannel(channel *Channel, recursive, links bool, group string) {
v.channels = append(v.channels, &voiceTargetChannel{
channel: channel,
links: links,
recursive: recursive,
group: group,
})
}
func (v *VoiceTarget) writeMessage(client *Client) error {
packet := MumbleProto.VoiceTarget{
Id: &v.ID,
Targets: make([]*MumbleProto.VoiceTarget_Target, 0, len(v.users)+len(v.channels)),
}
for _, user := range v.users {
packet.Targets = append(packet.Targets, &MumbleProto.VoiceTarget_Target{
Session: []uint32{user.Session},
})
}
for _, vtChannel := range v.channels {
target := &MumbleProto.VoiceTarget_Target{
ChannelId: &vtChannel.channel.ID,
Links: &vtChannel.links,
Children: &vtChannel.recursive,
}
if vtChannel.group != "" {
target.Group = &vtChannel.group
}
packet.Targets = append(packet.Targets, target)
}
return client.Conn.WriteProto(&packet)
}