Files
gocommon/voicechat/voice_chat.go

84 lines
1.8 KiB
Go

package voicechat
import (
"context"
"sync/atomic"
"unsafe"
"repositories.action2quare.com/ayo/gocommon"
"repositories.action2quare.com/ayo/gocommon/logger"
)
type JoinVoiceChatRequst struct {
Gid string
Alias string
Service string
}
type LeaveVoiceChatRequst struct {
Gid string
Alias string
Service string
}
type voiceChatConfig struct {
EosClientId string `json:"eos_client_id"`
EosClientSecret string `json:"eos_client_secret"`
EosDeploymentId string `json:"eos_deployment_id"`
}
type voiceServiceImpl interface {
joinVoiceChat(JoinVoiceChatRequst) map[string]any
leaveVoiceChat(LeaveVoiceChatRequst)
}
var config voiceChatConfig
type VoiceChatService struct {
eosptr unsafe.Pointer
}
func (gv *VoiceChatService) Initialize(ctx context.Context) error {
if err := gocommon.LoadConfig(&config); err != nil {
return logger.ErrorWithCallStack(err)
}
if len(config.EosClientId) == 0 {
logger.Println("eos voice chat is disabled. 'eos_client_id' is empty")
}
if len(config.EosClientSecret) == 0 {
logger.Println("eos voice chat is disabled. 'eos_client_secret' is empty")
}
if len(config.EosDeploymentId) == 0 {
logger.Println("eos voice chat is disabled. 'eos_deployment_id' is empty")
}
gv.eosptr = unsafe.Pointer(&eosauth{})
if len(config.EosClientId) > 0 && len(config.EosClientSecret) > 0 && len(config.EosDeploymentId) > 0 {
go eosTokenRefresh(&gv.eosptr, ctx)
}
return nil
}
func (gv *VoiceChatService) eos() voiceServiceImpl {
ptr := atomic.LoadPointer(&gv.eosptr)
return (*eosauth)(ptr)
}
func (gv *VoiceChatService) JoinVoiceChat(req JoinVoiceChatRequst) map[string]any {
switch req.Service {
case "eos":
return gv.eos().joinVoiceChat(req)
}
return nil
}
func (gv *VoiceChatService) LeaveVoiceChat(req LeaveVoiceChatRequst) {
switch req.Service {
case "eos":
gv.eos().leaveVoiceChat(req)
}
}