diff --git a/plugin/wshub/events.go b/plugin/wshub/events.go index 02552bc..1f3b813 100644 --- a/plugin/wshub/events.go +++ b/plugin/wshub/events.go @@ -14,3 +14,9 @@ type EventDataReceived struct { EventID event.EventId Data json.RawMessage } + +var eventCache []*EventData + +func init() { + eventCache = make([]*EventData, 0) +} diff --git a/plugin/wshub/server.go b/plugin/wshub/server.go index 2976601..3697acd 100644 --- a/plugin/wshub/server.go +++ b/plugin/wshub/server.go @@ -112,6 +112,20 @@ func (s *wsServer) handleWsInfo(w http.ResponseWriter, r *http.Request) { s.register(client) defer s.unregister(client) 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 { select { case data := <-client.Data: diff --git a/plugin/wshub/wshub.go b/plugin/wshub/wshub.go index 7037b48..a0cb482 100644 --- a/plugin/wshub/wshub.go +++ b/plugin/wshub/wshub.go @@ -162,19 +162,25 @@ func (w *WsHub) CreatePanel() fyne.CanvasObject { } func (w *WsHub) registerEvents() { + i := 0 for eid, _ := range events.EventsMapping { + eventCache = append(eventCache, &EventData{}) + currentIdx := i global.EventManager.RegisterA(eid, "plugin.wshub.event."+string(eid), func(e *event.Event) { - val, err := json.Marshal(EventData{ + ed := EventData{ EventID: e.Id, Data: e.Data, - }) + } + val, err := json.Marshal(ed) if err != nil { w.log.Errorf("failed to marshal event data %v", err) return } + eventCache[currentIdx] = &ed w.server.broadcast(val) }) + i++ } }