diff --git a/context.go b/context.go index eba7cb7..564f4f5 100644 --- a/context.go +++ b/context.go @@ -273,11 +273,21 @@ func (c *Context) SyncElements(elem h.H) { // SyncSignals pushes the current signal changes to the browser immediately // over the live SSE event stream. func (c *Context) SyncSignals() { - patchChan := c.getPatchChan() - c.mutex.RLock() - updatedSigs := c.prepareSignalsForPatch() - defer c.mutex.RUnlock() - + sse := c.getSSE() + if sse == nil { + c.app.logWarn(c, "signals out of sync: no sse stream") + return + } + updatedSigs := make(map[string]any) + for id, sig := range c.signals { + if sig.err != nil { + c.app.logWarn(c, "signal out of sync'%s': %v", sig.id, sig.err) + } + if sig.changed && sig.err == nil { + updatedSigs[id] = fmt.Sprintf("%v", sig.v) + sig.changed = false + } + } if len(updatedSigs) != 0 { outgoingSignals, _ := json.Marshal(updatedSigs) patchChan <- patch{patchTypeSignals, string(outgoingSignals)} diff --git a/internal/examples/chatroom/main.go b/internal/examples/chatroom/main.go index f06af41..acf8540 100644 --- a/internal/examples/chatroom/main.go +++ b/internal/examples/chatroom/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "math/rand" "github.com/go-via/via" @@ -84,6 +83,11 @@ func main() { } `)), ) + // Uncomment for inspector. Plugin candidate. + // v.AppendToFoot( + // h.Script(h.Src("https://cdn.jsdelivr.net/gh/dataSPA/dataSPA-inspector@latest/dataspa-inspector.bundled.js"), h.Type("module")), + // h.Raw(""), + // ) rooms := NewRooms[Chat, UserInfo]("Clojure", "Dotnet", "Go", "Java", "JS", "Kotlin", "Python", "Rust") rooms.Start() @@ -103,9 +107,7 @@ func main() { if !ok { return } - fmt.Println(">> switchRoom to ", newRoom.Name) if currentRoom != nil && currentRoom != newRoom { - fmt.Println("LEAVING old room") currentRoom.Leave(¤tUser) } newRoom.Join(&UserAndSync[Chat, UserInfo]{user: ¤tUser, sync: c}) @@ -136,8 +138,6 @@ func main() { }) }) statement.SetValue("") - // Update the UI right away so feels snappy. - c.Sync() } }) diff --git a/internal/examples/chatroom/rooms.go b/internal/examples/chatroom/rooms.go index dc9e0e2..52d6cd9 100644 --- a/internal/examples/chatroom/rooms.go +++ b/internal/examples/chatroom/rooms.go @@ -129,7 +129,7 @@ func NewRoom[TR any, TU comparable](n string) *Room[TR, TU] { func (r *Room[TR, TU]) run() { defer close(r.done) - publishTicker := time.NewTicker(250 * time.Millisecond) + publishTicker := time.NewTicker(100 * time.Millisecond) defer publishTicker.Stop() for { select {