update interface

This commit is contained in:
aynakeya
2024-04-09 20:07:48 -07:00
parent abd4e6895a
commit 83154ad6b0
6 changed files with 64 additions and 30 deletions

View File

@@ -13,7 +13,7 @@ const apiServer = "http://0.0.0.0:9090"
func main() {
provider := openblive.NewOpenBLiveClientProvider(apiServer, 1661006726438)
room, _ := provider(liveroom.LiveRoomConfig{
room, _ := provider.CreateLiveRoom(liveroom.LiveRoomConfig{
Room: "YOUR_CLIENT_KEY",
Provider: openblive.ProviderName,
})

View File

@@ -13,7 +13,7 @@ const apiServer = "http://0.0.0.0:9090"
func main() {
provider := webdm.NewWebDanmuClientProvider(apiServer)
room, _ := provider(liveroom.LiveRoomConfig{
room, _ := provider.CreateLiveRoom(liveroom.LiveRoomConfig{
Room: "7777",
Provider: webdm.ProviderName,
})

View File

@@ -5,7 +5,33 @@ type LiveRoomConfig struct {
Room string `json:"room"` // RoomID is the unique identifier of the live room
}
type LiveRoomProvider func(cfg LiveRoomConfig) (LiveRoom, error)
func (l *LiveRoomConfig) Identifier() string {
return l.Provider + "_" + l.Room
}
type ILiveRoomProvider interface {
GetName() string
GetDescription() string
CreateLiveRoom(cfg LiveRoomConfig) (LiveRoom, error)
}
type LiveRoomProvider struct {
Name string
Description string
Func func(cfg LiveRoomConfig) (LiveRoom, error)
}
func (l *LiveRoomProvider) GetName() string {
return l.Name
}
func (l *LiveRoomProvider) GetDescription() string {
return l.Name
}
func (l *LiveRoomProvider) CreateLiveRoom(cfg LiveRoomConfig) (LiveRoom, error) {
return l.Func(cfg)
}
type UserMedal struct {
Name string `json:"name"`

View File

@@ -20,15 +20,19 @@ type OpenBLiveClient struct {
onStatusChange func(connected bool)
}
func NewOpenBLiveClientProvider(apiServer string, appId int64) liveroom.LiveRoomProvider {
return func(cfg liveroom.LiveRoomConfig) (liveroom.LiveRoom, error) {
if cfg.Provider != ProviderName {
return nil, errors.New("invalid provider name")
}
return &OpenBLiveClient{
cfg: cfg,
openbliveClient: openblive.NewBliveClient(appId, cfg.Room, newRemoteApiClient(apiServer)),
}, nil
func NewOpenBLiveClientProvider(apiServer string, appId int64) liveroom.ILiveRoomProvider {
return &liveroom.LiveRoomProvider{
Name: ProviderName,
Description: "open bilibili live protocol. enter client key to connect.",
Func: func(cfg liveroom.LiveRoomConfig) (liveroom.LiveRoom, error) {
if cfg.Provider != ProviderName {
return nil, errors.New("invalid provider name")
}
return &OpenBLiveClient{
cfg: cfg,
openbliveClient: openblive.NewBliveClient(appId, cfg.Room, newRemoteApiClient(apiServer)),
}, nil
},
}
}

View File

@@ -20,21 +20,25 @@ type WebDanmuClient struct {
onStatusChange func(connected bool)
}
func NewWebDanmuClientProvider(apiServer string) liveroom.LiveRoomProvider {
return func(cfg liveroom.LiveRoomConfig) (liveroom.LiveRoom, error) {
if cfg.Provider != ProviderName {
return nil, errors.New("invalid provider name")
}
roomId, err := cast.ToIntE(cfg.Room)
if err != nil {
return nil, errors.New("invalid room id, should be integer")
}
room := &WebDanmuClient{
cfg: cfg,
webDmClient: client.NewClientWithApi(roomId, &remoteApi{client: resty.New().SetBaseURL(apiServer)}),
}
room.webDmClient.OnDanmaku(room.danmuHandler)
return room, nil
func NewWebDanmuClientProvider(apiServer string) liveroom.ILiveRoomProvider {
return &liveroom.LiveRoomProvider{
Name: ProviderName,
Description: "default web protocol. enter room id to connect.",
Func: func(cfg liveroom.LiveRoomConfig) (liveroom.LiveRoom, error) {
if cfg.Provider != ProviderName {
return nil, errors.New("invalid provider name")
}
roomId, err := cast.ToIntE(cfg.Room)
if err != nil {
return nil, errors.New("invalid room id, should be integer")
}
room := &WebDanmuClient{
cfg: cfg,
webDmClient: client.NewClientWithApi(roomId, &remoteApi{client: resty.New().SetBaseURL(apiServer)}),
}
room.webDmClient.OnDanmaku(room.danmuHandler)
return room, nil
},
}
}

View File

@@ -1,8 +1,8 @@
package liveroom
var _providers map[string]LiveRoomProvider = make(map[string]LiveRoomProvider)
var _providers map[string]ILiveRoomProvider = make(map[string]ILiveRoomProvider)
func RegisterProvider(name string, provider LiveRoomProvider) {
func RegisterProvider(name string, provider ILiveRoomProvider) {
if _, ok := _providers[name]; ok {
panic("provider " + name + " already exists")
return
@@ -10,7 +10,7 @@ func RegisterProvider(name string, provider LiveRoomProvider) {
_providers[name] = provider
}
func GetProvider(name string) (LiveRoomProvider, bool) {
func GetProvider(name string) (ILiveRoomProvider, bool) {
provider, ok := _providers[name]
return provider, ok
}