voice chat을 gocommon으로 옮김
This commit is contained in:
105
voicechat/voice_chat.go
Normal file
105
voicechat/voice_chat.go
Normal file
@ -0,0 +1,105 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user