parent
b06d1b14bd
commit
971f05c005
11 changed files with 27 additions and 21 deletions
|
|
@ -21,8 +21,8 @@ func EnableExtension(app *h.App, opts opts.ExtensionOpts) {
|
|||
panic("websocket: SessionId func is required")
|
||||
}
|
||||
|
||||
service.Set[ws.SocketManager](app.Opts.ServiceLocator, service.Singleton, func() *ws.SocketManager {
|
||||
manager := ws.NewSocketManager(&opts)
|
||||
service.Set[wsutil.SocketManager](app.Opts.ServiceLocator, service.Singleton, func() *wsutil.SocketManager {
|
||||
manager := wsutil.NewSocketManager(&opts)
|
||||
manager.StartMetrics()
|
||||
return manager
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import (
|
|||
"github.com/gobwas/ws"
|
||||
"github.com/gobwas/ws/wsutil"
|
||||
ws2 "github.com/maddalax/htmgo/extensions/websocket/opts"
|
||||
ws3 "github.com/maddalax/htmgo/extensions/websocket/ws"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
"github.com/maddalax/htmgo/framework/service"
|
||||
"log/slog"
|
||||
|
|
@ -26,7 +25,7 @@ func WsHttpHandler(opts *ws2.ExtensionOpts) http.HandlerFunc {
|
|||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
cc := r.Context().Value(h.RequestContextKey).(*h.RequestContext)
|
||||
locator := cc.ServiceLocator()
|
||||
manager := service.Get[ws3.SocketManager](locator)
|
||||
manager := service.Get[SocketManager](locator)
|
||||
|
||||
sessionId := opts.SessionId(cc)
|
||||
|
||||
|
|
@ -47,7 +46,7 @@ func WsHttpHandler(opts *ws2.ExtensionOpts) http.HandlerFunc {
|
|||
we don't want to block the writer
|
||||
*/
|
||||
done := make(chan bool, 1000)
|
||||
writer := make(ws3.WriterChan, 1000)
|
||||
writer := make(WriterChan, 1000)
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package ws
|
||||
package wsutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package ws
|
||||
package wsutil
|
||||
|
||||
import (
|
||||
ws2 "github.com/maddalax/htmgo/extensions/websocket/opts"
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
)
|
||||
|
||||
func ManagerFromCtx(ctx *h.RequestContext) *SocketManager {
|
||||
return SocketManagerFromCtx(ctx)
|
||||
func ManagerFromCtx(ctx *h.RequestContext) *wsutil.SocketManager {
|
||||
return wsutil.SocketManagerFromCtx(ctx)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/session"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
"github.com/maddalax/htmgo/framework/service"
|
||||
|
|
@ -32,7 +33,7 @@ func PushElement(data HandlerData, el *h.Element) bool {
|
|||
// PushElementCtx sends an element to the current session and swaps it into the page
|
||||
func PushElementCtx(ctx *h.RequestContext, el *h.Element) bool {
|
||||
locator := ctx.ServiceLocator()
|
||||
socketManager := service.Get[SocketManager](locator)
|
||||
socketManager := service.Get[wsutil.SocketManager](locator)
|
||||
socketId := session.GetSessionId(ctx)
|
||||
socket := socketManager.Get(string(socketId))
|
||||
if socket == nil {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/session"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
"github.com/maddalax/htmgo/framework/service"
|
||||
|
|
@ -11,7 +12,7 @@ import (
|
|||
func Every(ctx *h.RequestContext, interval time.Duration, cb func() bool) {
|
||||
socketId := session.GetSessionId(ctx)
|
||||
locator := ctx.ServiceLocator()
|
||||
manager := service.Get[SocketManager](locator)
|
||||
manager := service.Get[wsutil.SocketManager](locator)
|
||||
manager.RunIntervalWithSocket(string(socketId), interval, cb)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,15 +2,16 @@ package ws
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/session"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type MessageHandler struct {
|
||||
manager *SocketManager
|
||||
manager *wsutil.SocketManager
|
||||
}
|
||||
|
||||
func NewMessageHandler(manager *SocketManager) *MessageHandler {
|
||||
func NewMessageHandler(manager *wsutil.SocketManager) *MessageHandler {
|
||||
return &MessageHandler{manager: manager}
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +77,7 @@ func (h *MessageHandler) OnDomElementRemoved(handlerId string) {
|
|||
handlers.Delete(handlerId)
|
||||
}
|
||||
|
||||
func (h *MessageHandler) OnSocketDisconnected(event SocketEvent) {
|
||||
func (h *MessageHandler) OnSocketDisconnected(event wsutil.SocketEvent) {
|
||||
sessionId := session.Id(event.SessionId)
|
||||
hashes, ok := sessionIdToHashes.Load(sessionId)
|
||||
if ok {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/session"
|
||||
"github.com/maddalax/htmgo/framework/service"
|
||||
)
|
||||
|
||||
func StartListener(locator *service.Locator) {
|
||||
manager := service.Get[SocketManager](locator)
|
||||
manager := service.Get[wsutil.SocketManager](locator)
|
||||
manager.Listen(socketMessageListener)
|
||||
handler := NewMessageHandler(manager)
|
||||
go func() {
|
||||
|
|
@ -22,9 +23,9 @@ func handle(handler *MessageHandler) {
|
|||
handler.OnServerSideEvent(event)
|
||||
case event := <-socketMessageListener:
|
||||
switch event.Type {
|
||||
case DisconnectedEvent:
|
||||
case wsutil.DisconnectedEvent:
|
||||
handler.OnSocketDisconnected(event)
|
||||
case MessageEvent:
|
||||
case wsutil.MessageEvent:
|
||||
|
||||
handlerId, ok := event.Payload["id"].(string)
|
||||
eventName, ok2 := event.Payload["event"].(string)
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
)
|
||||
|
||||
type Metrics struct {
|
||||
Manager ManagerMetrics
|
||||
Manager wsutil.ManagerMetrics
|
||||
Handler HandlerMetrics
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ws
|
||||
|
||||
import (
|
||||
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
||||
"github.com/maddalax/htmgo/extensions/websocket/session"
|
||||
"github.com/maddalax/htmgo/framework/h"
|
||||
"github.com/puzpuzpuz/xsync/v3"
|
||||
|
|
@ -10,8 +11,8 @@ import (
|
|||
|
||||
type HandlerData struct {
|
||||
SessionId session.Id
|
||||
Socket *SocketConnection
|
||||
Manager *SocketManager
|
||||
Socket *wsutil.SocketConnection
|
||||
Manager *wsutil.SocketManager
|
||||
}
|
||||
|
||||
type Handler func(data HandlerData)
|
||||
|
|
@ -28,7 +29,7 @@ var sessionIdToHashes = xsync.NewMapOf[session.Id, map[KeyHash]bool]()
|
|||
var hashesToSessionId = xsync.NewMapOf[KeyHash, session.Id]()
|
||||
var serverEventNamesToHash = xsync.NewMapOf[string, map[KeyHash]bool]()
|
||||
|
||||
var socketMessageListener = make(chan SocketEvent, 100)
|
||||
var socketMessageListener = make(chan wsutil.SocketEvent, 100)
|
||||
var serverSideMessageListener = make(chan ServerSideEvent, 100)
|
||||
var lock = sync.Mutex{}
|
||||
var callingHandler = atomic.Bool{}
|
||||
|
|
|
|||
Loading…
Reference in a new issue