From 83154ad6b02c868b284b08f8f32fd9e2d2a601e6 Mon Sep 17 00:00:00 2001 From: aynakeya Date: Tue, 9 Apr 2024 20:07:48 -0700 Subject: [PATCH] update interface --- example/openblive/openblive.go | 2 +- example/webdm/webdm.go | 2 +- liveroom.go | 28 ++++++++++++++++++++++++++- provider/openblive/openblive.go | 22 ++++++++++++--------- provider/webdm/web.go | 34 ++++++++++++++++++--------------- registry.go | 6 +++--- 6 files changed, 64 insertions(+), 30 deletions(-) diff --git a/example/openblive/openblive.go b/example/openblive/openblive.go index e6c5bc1..1f43235 100644 --- a/example/openblive/openblive.go +++ b/example/openblive/openblive.go @@ -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, }) diff --git a/example/webdm/webdm.go b/example/webdm/webdm.go index a38287f..5ec958c 100644 --- a/example/webdm/webdm.go +++ b/example/webdm/webdm.go @@ -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, }) diff --git a/liveroom.go b/liveroom.go index fb4b9bf..b7eea29 100644 --- a/liveroom.go +++ b/liveroom.go @@ -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"` diff --git a/provider/openblive/openblive.go b/provider/openblive/openblive.go index f4b6c9a..2a6010d 100644 --- a/provider/openblive/openblive.go +++ b/provider/openblive/openblive.go @@ -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 + }, } } diff --git a/provider/webdm/web.go b/provider/webdm/web.go index 09ae0e5..d99a042 100644 --- a/provider/webdm/web.go +++ b/provider/webdm/web.go @@ -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 + }, } } diff --git a/registry.go b/registry.go index 42c2fe0..d213f59 100644 --- a/registry.go +++ b/registry.go @@ -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 }