working again

This commit is contained in:
maddalax 2024-10-15 13:51:26 -05:00
parent a23e1fd78f
commit ef54e274f5
9 changed files with 44 additions and 13 deletions

View file

@ -5,9 +5,12 @@ import (
"github.com/maddalax/htmgo/framework/h" "github.com/maddalax/htmgo/framework/h"
"github.com/maddalax/htmgo/framework/service" "github.com/maddalax/htmgo/framework/service"
"github.com/puzpuzpuz/xsync/v3" "github.com/puzpuzpuz/xsync/v3"
"runtime"
"sse-with-state/internal" "sse-with-state/internal"
"sse-with-state/sse" "sse-with-state/sse"
"sse-with-state/state" "sse-with-state/state"
"strings"
"time"
) )
type HandlerData struct { type HandlerData struct {
@ -174,7 +177,30 @@ var Map = xsync.NewMapOf[state.SessionId, *Events]()
var socketMessageListener = make(chan sse.SocketEvent, 100) var socketMessageListener = make(chan sse.SocketEvent, 100)
var serverSideMessageListener = make(chan ServerSideEvent, 100) var serverSideMessageListener = make(chan ServerSideEvent, 100)
func AddServerSideHandler(ctx *h.RequestContext, id string, event string, handler Handler) { func getCallerHash() string {
now := time.Now()
pc := make([]uintptr, 1000) // Adjust the size if you need a deeper stack trace
n := runtime.Callers(2, pc) // Skip 2: runtime.Callers() and printCallers()
frames := runtime.CallersFrames(pc[:n])
calls := make([]string, 0)
for {
frame, more := frames.Next()
calls = append(calls, fmt.Sprintf("%s:%d", frame.Function, frame.Line))
if !more {
break
}
}
took := time.Since(now)
fmt.Printf("took: %dms\n", took.Milliseconds())
return strings.Join(calls, ",")
}
func AddServerSideHandler(ctx *h.RequestContext, event string, handler Handler) {
hash := getCallerHash()
fmt.Printf("adding server side handler %s\n", hash)
sessionId := state.GetSessionId(ctx) sessionId := state.GetSessionId(ctx)
events, ok := Map.Load(sessionId) events, ok := Map.Load(sessionId)
@ -183,7 +209,7 @@ func AddServerSideHandler(ctx *h.RequestContext, id string, event string, handle
Map.Store(sessionId, events) Map.Store(sessionId, events)
} }
events.AddServerSideHandler(event, id, handler) events.AddServerSideHandler(event, "test", handler)
} }
func AddHandler(ctx *h.RequestContext, event string, handler Handler) *h.AttributeMapOrdered { func AddHandler(ctx *h.RequestContext, event string, handler Handler) *h.AttributeMapOrdered {

View file

@ -2,13 +2,13 @@ package pages
import ( import (
"github.com/maddalax/htmgo/framework/h" "github.com/maddalax/htmgo/framework/h"
"starter-template/state" "sse-with-state/state"
) )
func RootPage(ctx *h.RequestContext, children ...h.Ren) h.Ren { func RootPage(ctx *h.RequestContext, children ...h.Ren) h.Ren {
s := state.NewState(ctx) s := state.NewState(ctx)
return h.Html( return h.Html(
h.Attribute("data-session-id", s.SessionId), h.Attribute("data-session-id", string(s.SessionId)),
h.HxExtension(h.BaseExtensions()), h.HxExtension(h.BaseExtensions()),
h.Head( h.Head(
h.Link("/public/main.css", "stylesheet"), h.Link("/public/main.css", "stylesheet"),

View file

@ -3,7 +3,6 @@ package partials
import ( import (
"github.com/maddalax/htmgo/framework/h" "github.com/maddalax/htmgo/framework/h"
"sse-with-state/event" "sse-with-state/event"
"sse-with-state/internal"
) )
func OnClick(ctx *h.RequestContext, handler event.Handler) *h.AttributeMapOrdered { func OnClick(ctx *h.RequestContext, handler event.Handler) *h.AttributeMapOrdered {
@ -11,9 +10,8 @@ func OnClick(ctx *h.RequestContext, handler event.Handler) *h.AttributeMapOrdere
} }
func OnServerSideEvent(ctx *h.RequestContext, eventName string, handler event.Handler) h.Ren { func OnServerSideEvent(ctx *h.RequestContext, eventName string, handler event.Handler) h.Ren {
id := internal.RandSeq(30) event.AddServerSideHandler(ctx, eventName, handler)
event.AddServerSideHandler(ctx, id, eventName, handler) return h.Attribute("data-handler-id", "")
return h.Attribute("data-handler-id", id)
} }
func OnMouseOver(ctx *h.RequestContext, handler event.Handler) *h.AttributeMapOrdered { func OnMouseOver(ctx *h.RequestContext, handler event.Handler) *h.AttributeMapOrdered {

View file

@ -40,7 +40,7 @@ type CounterProps struct {
func CounterForm(ctx *h.RequestContext, props CounterProps) *h.Element { func CounterForm(ctx *h.RequestContext, props CounterProps) *h.Element {
if props.Id == "" { if props.Id == "" {
props.Id = h.GenId() props.Id = h.GenId(6)
} }
counter := UseCounter(state.GetSessionId(ctx), props.Id) counter := UseCounter(state.GetSessionId(ctx), props.Id)
return h.Div( return h.Div(

View file

@ -47,7 +47,7 @@ func repeaterItem(ctx *h.RequestContext, item *h.Element, index int, props *Repe
func Repeater(ctx *h.RequestContext, props RepeaterProps) *h.Element { func Repeater(ctx *h.RequestContext, props RepeaterProps) *h.Element {
if props.Id == "" { if props.Id == "" {
props.Id = h.GenId() props.Id = h.GenId(6)
} }
return h.Div( return h.Div(
h.Class("flex flex-col gap-2"), h.Class("flex flex-col gap-2"),

File diff suppressed because one or more lines are too long

View file

@ -7,6 +7,8 @@ import "./htmxextensions/mutation-error";
import "./htmxextensions/livereload" import "./htmxextensions/livereload"
import "./htmxextensions/htmgo"; import "./htmxextensions/htmgo";
import "./htmxextensions/sse" import "./htmxextensions/sse"
import "./htmxextensions/ws"
import "./htmxextensions/ws-event-handler"
// @ts-ignore // @ts-ignore
window.htmx = htmx; window.htmx = htmx;

View file

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"github.com/maddalax/htmgo/framework/hx" "github.com/maddalax/htmgo/framework/hx"
"github.com/maddalax/htmgo/framework/internal/datastructure" "github.com/maddalax/htmgo/framework/internal/datastructure"
"github.com/maddalax/htmgo/framework/internal/util"
"strings" "strings"
) )
@ -337,3 +338,7 @@ func AriaHidden(value bool) *AttributeR {
func TabIndex(value int) *AttributeR { func TabIndex(value int) *AttributeR {
return Attribute("tabindex", fmt.Sprintf("%d", value)) return Attribute("tabindex", fmt.Sprintf("%d", value))
} }
func GenId(len int) string {
return util.RandSeq(len)
}

View file

@ -3,7 +3,7 @@ package h
import "strings" import "strings"
func BaseExtensions() string { func BaseExtensions() string {
extensions := []string{"path-deps", "response-targets", "mutation-error", "htmgo", "sse"} extensions := []string{"path-deps", "response-targets", "mutation-error", "htmgo", "sse", "ws"}
if IsDevelopment() { if IsDevelopment() {
extensions = append(extensions, "livereload") extensions = append(extensions, "livereload")
} }