106 lines
2.5 KiB
Go
106 lines
2.5 KiB
Go
|
|
package core
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"encoding/gob"
|
||
|
|
"net/http"
|
||
|
|
"sync/atomic"
|
||
|
|
"unsafe"
|
||
|
|
|
||
|
|
"repositories.action2quare.com/ayo/gocommon"
|
||
|
|
"repositories.action2quare.com/ayo/gocommon/logger"
|
||
|
|
)
|
||
|
|
|
||
|
|
type joinVoiceChatRequst struct {
|
||
|
|
Gid string
|
||
|
|
Mid string
|
||
|
|
Service string
|
||
|
|
Alias string
|
||
|
|
}
|
||
|
|
|
||
|
|
type leaveVoiceChatRequst struct {
|
||
|
|
Gid string
|
||
|
|
Mid string
|
||
|
|
Service string
|
||
|
|
}
|
||
|
|
|
||
|
|
func init() {
|
||
|
|
gob.Register(joinVoiceChatRequst{})
|
||
|
|
gob.Register(leaveVoiceChatRequst{})
|
||
|
|
}
|
||
|
|
|
||
|
|
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(w http.ResponseWriter, r *http.Request) {
|
||
|
|
var data joinVoiceChatRequst
|
||
|
|
|
||
|
|
if err := gocommon.MakeDecoder(r).Decode(&data); err != nil {
|
||
|
|
logger.Println("JoinVoiceChat failed. DecodeGob returns err :", err)
|
||
|
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
switch data.Service {
|
||
|
|
case "eos":
|
||
|
|
result := gv.eos().joinVoiceChat(data)
|
||
|
|
gocommon.MakeEncoder(w, r).Encode(result)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (gv *VoiceChatService) LeaveVoiceChat(w http.ResponseWriter, r *http.Request) {
|
||
|
|
var data leaveVoiceChatRequst
|
||
|
|
if err := gocommon.MakeDecoder(r).Decode(&data); err != nil {
|
||
|
|
logger.Println("JoinVoiceChat failed. DecodeGob returns err :", err)
|
||
|
|
w.WriteHeader(http.StatusInternalServerError)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
switch data.Service {
|
||
|
|
case "eos":
|
||
|
|
gv.eos().leaveVoiceChat(data)
|
||
|
|
}
|
||
|
|
}
|