Skip to content

Commit d92d74f

Browse files
committed
Allow for pubs to be non-blocking
1 parent 90d6149 commit d92d74f

File tree

7 files changed

+53
-76
lines changed

7 files changed

+53
-76
lines changed

broker.go

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"io"
66
"iter"
7+
"log/slog"
78
"sync"
89
"time"
910

@@ -24,6 +25,7 @@ type Broker interface {
2425

2526
type BaseBroker struct {
2627
Channels *syncmap.Map[string, *Channel]
28+
Logger *slog.Logger
2729
}
2830

2931
func (b *BaseBroker) Cleanup() {

cmd/authorized_keys/main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func PubSubMiddleware(broker pubsub.PubSub, logger *slog.Logger) wish.Middleware
5858

5959
clientID := uuid.NewString()
6060

61-
err := errors.Join(broker.Sub(sesh.Context(), clientID, sesh, chans, args[len(args)-1] == "keepalive"))
61+
err := errors.Join(broker.Sub(sesh.Context(), clientID, sesh, chans, strings.ToLower(args[len(args)-1]) == "keepalive"))
6262
if err != nil {
6363
logger.Error("error during pub", slog.Any("error", err), slog.String("client", clientID))
6464
}
@@ -71,7 +71,7 @@ func PubSubMiddleware(broker pubsub.PubSub, logger *slog.Logger) wish.Middleware
7171

7272
clientID := uuid.NewString()
7373

74-
err := errors.Join(broker.Pub(sesh.Context(), clientID, sesh, chans))
74+
err := errors.Join(broker.Pub(sesh.Context(), clientID, sesh, chans, strings.ToLower(args[len(args)-1]) == "blockwrite"))
7575
if err != nil {
7676
logger.Error("error during pub", slog.Any("error", err), slog.String("client", clientID))
7777
}
@@ -84,7 +84,7 @@ func PubSubMiddleware(broker pubsub.PubSub, logger *slog.Logger) wish.Middleware
8484

8585
clientID := uuid.NewString()
8686

87-
err := errors.Join(broker.Pipe(sesh.Context(), clientID, sesh, chans, args[len(args)-1] == "replay"))
87+
err := errors.Join(broker.Pipe(sesh.Context(), clientID, sesh, chans, strings.ToLower(args[len(args)-1]) == "replay"))
8888
if err != nil {
8989
logger.Error(
9090
"pipe error",

go.mod

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,36 @@ go 1.23.1
55
require (
66
github.com/antoniomika/syncmap v1.0.0
77
github.com/charmbracelet/ssh v0.0.0-20240725163421-eb71b85b27aa
8-
github.com/charmbracelet/wish v1.4.2
8+
github.com/charmbracelet/wish v1.4.3
99
github.com/google/uuid v1.6.0
1010
)
1111

1212
require (
1313
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
1414
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
15-
github.com/charmbracelet/bubbletea v0.27.0 // indirect
15+
github.com/charmbracelet/bubbletea v1.1.1 // indirect
1616
github.com/charmbracelet/keygen v0.5.1 // indirect
17-
github.com/charmbracelet/lipgloss v0.12.1 // indirect
17+
github.com/charmbracelet/lipgloss v0.13.0 // indirect
1818
github.com/charmbracelet/log v0.4.0 // indirect
19-
github.com/charmbracelet/x/ansi v0.1.4 // indirect
19+
github.com/charmbracelet/x/ansi v0.3.2 // indirect
2020
github.com/charmbracelet/x/conpty v0.1.0 // indirect
21-
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 // indirect
22-
github.com/charmbracelet/x/input v0.1.3 // indirect
23-
github.com/charmbracelet/x/term v0.1.1 // indirect
21+
github.com/charmbracelet/x/errors v0.0.0-20240919170804-a4978c8e603a // indirect
22+
github.com/charmbracelet/x/term v0.2.0 // indirect
2423
github.com/charmbracelet/x/termios v0.1.0 // indirect
25-
github.com/charmbracelet/x/windows v0.1.2 // indirect
26-
github.com/creack/pty v1.1.21 // indirect
24+
github.com/creack/pty v1.1.23 // indirect
2725
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
2826
github.com/go-logfmt/logfmt v0.6.0 // indirect
2927
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
3028
github.com/mattn/go-isatty v0.0.20 // indirect
3129
github.com/mattn/go-localereader v0.0.1 // indirect
32-
github.com/mattn/go-runewidth v0.0.15 // indirect
30+
github.com/mattn/go-runewidth v0.0.16 // indirect
3331
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
3432
github.com/muesli/cancelreader v0.2.2 // indirect
3533
github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5 // indirect
3634
github.com/rivo/uniseg v0.4.7 // indirect
37-
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
38-
golang.org/x/crypto v0.26.0 // indirect
39-
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
35+
golang.org/x/crypto v0.27.0 // indirect
36+
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
4037
golang.org/x/sync v0.8.0 // indirect
41-
golang.org/x/sys v0.24.0 // indirect
42-
golang.org/x/text v0.17.0 // indirect
38+
golang.org/x/sys v0.25.0 // indirect
39+
golang.org/x/text v0.18.0 // indirect
4340
)

go.sum

+26-32
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,30 @@ github.com/antoniomika/syncmap v1.0.0 h1:iFSfbQFQOvHZILFZF+hqWosO0no+W9+uF4y2VEy
44
github.com/antoniomika/syncmap v1.0.0/go.mod h1:fK2829foEYnO4riNfyUn0SHQZt4ue3DStYjGU+sJj38=
55
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
66
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
7-
github.com/charmbracelet/bubbletea v0.27.0 h1:Mznj+vvYuYagD9Pn2mY7fuelGvP0HAXtZYGgRBCbHvU=
8-
github.com/charmbracelet/bubbletea v0.27.0/go.mod h1:5MdP9XH6MbQkgGhnlxUqCNmBXf9I74KRQ8HIidRxV1Y=
7+
github.com/charmbracelet/bubbletea v1.1.1 h1:KJ2/DnmpfqFtDNVTvYZ6zpPFL9iRCRr0qqKOCvppbPY=
8+
github.com/charmbracelet/bubbletea v1.1.1/go.mod h1:9Ogk0HrdbHolIKHdjfFpyXJmiCzGwy+FesYkZr7hYU4=
99
github.com/charmbracelet/keygen v0.5.1 h1:zBkkYPtmKDVTw+cwUyY6ZwGDhRxXkEp0Oxs9sqMLqxI=
1010
github.com/charmbracelet/keygen v0.5.1/go.mod h1:zznJVmK/GWB6dAtjluqn2qsttiCBhA5MZSiwb80fcHw=
11-
github.com/charmbracelet/lipgloss v0.12.1 h1:/gmzszl+pedQpjCOH+wFkZr/N90Snz40J/NR7A0zQcs=
12-
github.com/charmbracelet/lipgloss v0.12.1/go.mod h1:V2CiwIuhx9S1S1ZlADfOj9HmxeMAORuz5izHb0zGbB8=
11+
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
12+
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
1313
github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
1414
github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM=
1515
github.com/charmbracelet/ssh v0.0.0-20240725163421-eb71b85b27aa h1:6rePgmsJguB6Z7Y55stsEVDlWFJoUpQvOX4mdnBjgx4=
1616
github.com/charmbracelet/ssh v0.0.0-20240725163421-eb71b85b27aa/go.mod h1:LmMZag2g7ILMmWtDmU7dIlctUopwmb73KpPzj0ip1uk=
17-
github.com/charmbracelet/wish v1.4.2 h1:H2BKXewugK9Al75wST9h0hpQ95h981RZ5rtimDpygPQ=
18-
github.com/charmbracelet/wish v1.4.2/go.mod h1:3Bzq7qMU2LTvdaM61KrCnhrzGP92D/Ru7CasrpyZmzY=
19-
github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM=
20-
github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
17+
github.com/charmbracelet/wish v1.4.3 h1:7FvNLoPGqiT7EdjQP4+XuvM1Hrnx9DyknilbD+Okx1s=
18+
github.com/charmbracelet/wish v1.4.3/go.mod h1:hVgmhwhd52fLmO6m5AkREUMZYqQ0qmIJQDMe3HsNPmU=
19+
github.com/charmbracelet/x/ansi v0.3.2 h1:wsEwgAN+C9U06l9dCVMX0/L3x7ptvY1qmjMwyfE6USY=
20+
github.com/charmbracelet/x/ansi v0.3.2/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
2121
github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U=
2222
github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ=
23-
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA=
24-
github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
25-
github.com/charmbracelet/x/input v0.1.3 h1:oy4TMhyGQsYs/WWJwu1ELUMFnjiUAXwtDf048fHbCkg=
26-
github.com/charmbracelet/x/input v0.1.3/go.mod h1:1gaCOyw1KI9e2j00j/BBZ4ErzRZqa05w0Ghn83yIhKU=
27-
github.com/charmbracelet/x/term v0.1.1 h1:3cosVAiPOig+EV4X9U+3LDgtwwAoEzJjNdwbXDjF6yI=
28-
github.com/charmbracelet/x/term v0.1.1/go.mod h1:wB1fHt5ECsu3mXYusyzcngVWWlu1KKUmmLhfgr/Flxw=
23+
github.com/charmbracelet/x/errors v0.0.0-20240919170804-a4978c8e603a h1:IlWNrDYRP6lyttqsFHDhmo8NXggMwBuhvvCP+Wmb2a8=
24+
github.com/charmbracelet/x/errors v0.0.0-20240919170804-a4978c8e603a/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
25+
github.com/charmbracelet/x/term v0.2.0 h1:cNB9Ot9q8I711MyZ7myUR5HFWL/lc3OpU8jZ4hwm0x0=
26+
github.com/charmbracelet/x/term v0.2.0/go.mod h1:GVxgxAbjUrmpvIINHIQnJJKpMlHiZ4cktEQCN6GWyF0=
2927
github.com/charmbracelet/x/termios v0.1.0 h1:y4rjAHeFksBAfGbkRDmVinMg7x7DELIGAFbdNvxg97k=
3028
github.com/charmbracelet/x/termios v0.1.0/go.mod h1:H/EVv/KRnrYjz+fCYa9bsKdqF3S8ouDK0AZEbG7r+/U=
31-
github.com/charmbracelet/x/windows v0.1.2 h1:Iumiwq2G+BRmgoayww/qfcvof7W/3uLoelhxojXlRWg=
32-
github.com/charmbracelet/x/windows v0.1.2/go.mod h1:GLEO/l+lizvFDBPLIOk+49gdX49L9YWMB5t+DZd0jkQ=
33-
github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
34-
github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
29+
github.com/creack/pty v1.1.23 h1:4M6+isWdcStXEf15G/RbrMPOQj1dZ7HPZCGwE4kOeP0=
30+
github.com/creack/pty v1.1.23/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
3531
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
3632
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3733
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
@@ -46,8 +42,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
4642
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
4743
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
4844
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
49-
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
50-
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
45+
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
46+
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
5147
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
5248
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
5349
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
@@ -61,21 +57,19 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
6157
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
6258
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
6359
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
64-
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
65-
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
66-
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
67-
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
68-
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
69-
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
60+
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
61+
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
62+
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
63+
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
7064
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
7165
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
7266
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
7367
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
74-
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
75-
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
76-
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
77-
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
78-
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
79-
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
68+
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
69+
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
70+
golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
71+
golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
72+
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
73+
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
8074
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
8175
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

multicast.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func NewMulticast(logger *slog.Logger) *Multicast {
3131
Logger: logger,
3232
Broker: &BaseBroker{
3333
Channels: syncmap.New[string, *Channel](),
34+
Logger: logger.With(slog.Bool("broker", true)),
3435
},
3536
}
3637
}
@@ -72,8 +73,8 @@ func (p *Multicast) Pipe(ctx context.Context, ID string, rw io.ReadWriter, chann
7273
return p.connect(ctx, ID, rw, channels, ChannelDirectionInputOutput, false, replay, false)
7374
}
7475

75-
func (p *Multicast) Pub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel) error {
76-
return errors.Join(p.connect(ctx, ID, rw, channels, ChannelDirectionInput, true, false, false))
76+
func (p *Multicast) Pub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel, blockWrite bool) error {
77+
return errors.Join(p.connect(ctx, ID, rw, channels, ChannelDirectionInput, blockWrite, false, false))
7778
}
7879

7980
func (p *Multicast) Sub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel, keepAlive bool) error {

multicast_test.go

+6-23
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77
"log/slog"
88
"sync"
99
"testing"
10-
11-
"github.com/antoniomika/syncmap"
1210
)
1311

1412
type Buffer struct {
@@ -40,12 +38,7 @@ func TestMulticastSubBlock(t *testing.T) {
4038
name := "test-channel"
4139
syncer := make(chan int)
4240

43-
cast := &Multicast{
44-
Logger: slog.Default(),
45-
Broker: &BaseBroker{
46-
Channels: syncmap.New[string, *Channel](),
47-
},
48-
}
41+
cast := NewMulticast(slog.Default())
4942

5043
var wg sync.WaitGroup
5144
wg.Add(2)
@@ -63,7 +56,7 @@ func TestMulticastSubBlock(t *testing.T) {
6356

6457
go func() {
6558
orderActual += "pub-"
66-
fmt.Println(cast.Pub(context.TODO(), "2", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}))
59+
fmt.Println(cast.Pub(context.TODO(), "2", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}, true))
6760
wg.Done()
6861
}()
6962

@@ -85,12 +78,7 @@ func TestMulticastPubBlock(t *testing.T) {
8578
name := "test-channel"
8679
syncer := make(chan int)
8780

88-
cast := &Multicast{
89-
Logger: slog.Default(),
90-
Broker: &BaseBroker{
91-
Channels: syncmap.New[string, *Channel](),
92-
},
93-
}
81+
cast := NewMulticast(slog.Default())
9482

9583
var wg sync.WaitGroup
9684
wg.Add(2)
@@ -100,7 +88,7 @@ func TestMulticastPubBlock(t *testing.T) {
10088
go func() {
10189
orderActual += "pub-"
10290
syncer <- 0
103-
fmt.Println(cast.Pub(context.TODO(), "1", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}))
91+
fmt.Println(cast.Pub(context.TODO(), "1", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}, true))
10492
wg.Done()
10593
}()
10694

@@ -131,12 +119,7 @@ func TestMulticastMultSubs(t *testing.T) {
131119
name := "test-channel"
132120
syncer := make(chan int)
133121

134-
cast := &Multicast{
135-
Logger: slog.Default(),
136-
Broker: &BaseBroker{
137-
Channels: syncmap.New[string, *Channel](),
138-
},
139-
}
122+
cast := NewMulticast(slog.Default())
140123

141124
var wg sync.WaitGroup
142125
wg.Add(3)
@@ -163,7 +146,7 @@ func TestMulticastMultSubs(t *testing.T) {
163146

164147
go func() {
165148
orderActual += "pub-"
166-
fmt.Println(cast.Pub(context.TODO(), "3", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}))
149+
fmt.Println(cast.Pub(context.TODO(), "3", &Buffer{b: *bytes.NewBufferString(expected)}, []*Channel{channel}, true))
167150
wg.Done()
168151
}()
169152

pubsub.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ type PubSub interface {
2222
GetPipes() iter.Seq2[string, *Client]
2323
Pipe(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel, replay bool) (error, error)
2424
Sub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel, keepAlive bool) error
25-
Pub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel) error
25+
Pub(ctx context.Context, ID string, rw io.ReadWriter, channels []*Channel, blockWrite bool) error
2626
}

0 commit comments

Comments
 (0)