* wip * merge * working again * refactor/make it a bit cleaner * fix to only call cb for session id who initiated the event * support broadcasting events to all clients * refactor * refactor into ws extension * add go mod * rename module * fix naming * refactor * rename * merge * fix manager ws delete, add manager tests * add metric page * fixes, add k6 script * fixes, add k6 script * deploy docker image * cleanup * cleanup * cleanup
31 lines
899 B
Go
31 lines
899 B
Go
package websocket
|
|
|
|
import (
|
|
"github.com/maddalax/htmgo/extensions/websocket/internal/wsutil"
|
|
"github.com/maddalax/htmgo/extensions/websocket/opts"
|
|
"github.com/maddalax/htmgo/extensions/websocket/ws"
|
|
"github.com/maddalax/htmgo/framework/h"
|
|
"github.com/maddalax/htmgo/framework/service"
|
|
)
|
|
|
|
func EnableExtension(app *h.App, opts opts.ExtensionOpts) {
|
|
if app.Opts.ServiceLocator == nil {
|
|
app.Opts.ServiceLocator = service.NewLocator()
|
|
}
|
|
|
|
if opts.WsPath == "" {
|
|
panic("websocket: WsPath is required")
|
|
}
|
|
|
|
if opts.SessionId == nil {
|
|
panic("websocket: SessionId func is required")
|
|
}
|
|
|
|
service.Set[wsutil.SocketManager](app.Opts.ServiceLocator, service.Singleton, func() *wsutil.SocketManager {
|
|
manager := wsutil.NewSocketManager(&opts)
|
|
manager.StartMetrics()
|
|
return manager
|
|
})
|
|
ws.StartListener(app.Opts.ServiceLocator)
|
|
app.Router.Handle(opts.WsPath, wsutil.WsHttpHandler(&opts))
|
|
}
|