mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-12 05:08:12 +08:00
add event cache. sending all cached event when new websocket connection establish
This commit is contained in:
@@ -14,3 +14,9 @@ type EventDataReceived struct {
|
|||||||
EventID event.EventId
|
EventID event.EventId
|
||||||
Data json.RawMessage
|
Data json.RawMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var eventCache []*EventData
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
eventCache = make([]*EventData, 0)
|
||||||
|
}
|
||||||
|
|||||||
@@ -112,6 +112,20 @@ func (s *wsServer) handleWsInfo(w http.ResponseWriter, r *http.Request) {
|
|||||||
s.register(client)
|
s.register(client)
|
||||||
defer s.unregister(client)
|
defer s.unregister(client)
|
||||||
go client.start()
|
go client.start()
|
||||||
|
// send initial data
|
||||||
|
for _, data := range eventCache {
|
||||||
|
// ignore empty
|
||||||
|
if data.EventID == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
eventCacheData, _ := json.Marshal(data)
|
||||||
|
err := client.conn.WriteMessage(websocket.TextMessage, eventCacheData)
|
||||||
|
if err != nil {
|
||||||
|
s.log.Warn("write message failed", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// start message loop
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case data := <-client.Data:
|
case data := <-client.Data:
|
||||||
|
|||||||
@@ -162,19 +162,25 @@ func (w *WsHub) CreatePanel() fyne.CanvasObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *WsHub) registerEvents() {
|
func (w *WsHub) registerEvents() {
|
||||||
|
i := 0
|
||||||
for eid, _ := range events.EventsMapping {
|
for eid, _ := range events.EventsMapping {
|
||||||
|
eventCache = append(eventCache, &EventData{})
|
||||||
|
currentIdx := i
|
||||||
global.EventManager.RegisterA(eid,
|
global.EventManager.RegisterA(eid,
|
||||||
"plugin.wshub.event."+string(eid),
|
"plugin.wshub.event."+string(eid),
|
||||||
func(e *event.Event) {
|
func(e *event.Event) {
|
||||||
val, err := json.Marshal(EventData{
|
ed := EventData{
|
||||||
EventID: e.Id,
|
EventID: e.Id,
|
||||||
Data: e.Data,
|
Data: e.Data,
|
||||||
})
|
}
|
||||||
|
val, err := json.Marshal(ed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.log.Errorf("failed to marshal event data %v", err)
|
w.log.Errorf("failed to marshal event data %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
eventCache[currentIdx] = &ed
|
||||||
w.server.broadcast(val)
|
w.server.broadcast(val)
|
||||||
})
|
})
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user