@@ -8,6 +8,7 @@ package layer2
88
99import (
1010 "context"
11+ "sync/atomic"
1112 "time"
1213
1314 "github.com/ethereum/go-ethereum/common"
@@ -41,23 +42,34 @@ func ListeningWs(ctx context.Context, conn *websocket.Conn, options WsOptions, l
4142 err error
4243 )
4344
45+ respMessageType := atomic.Uint32 {} // 1 textbase, 2 bytebase
46+ respMessageType .Store (1 )
47+ protocolListener := func (a swarm.Address , b []byte ) {
48+ if respMessageType .Load () == 1 {
49+ space := byte (' ' )
50+ msg := append ([]byte {byte (atMsg + '0' ), space }, ([]byte (a .String ()))... )
51+ msg = append (msg , append ([]byte {space }, b ... )... )
52+ err := conn .WriteMessage (1 , msg )
53+ if err != nil {
54+ logger .Error (err , "L2 ws write message" )
55+ }
56+ } else {
57+ msg := append ([]byte {byte (atMsg + '0' )}, a .Bytes ()... )
58+ msg = append (msg , b ... )
59+ err := conn .WriteMessage (2 , msg )
60+ if err != nil {
61+ logger .Error (err , "L2 ws write message" )
62+ }
63+ }
64+ }
65+
66+ protocolService .AddHandler (protocolListener )
4467 conn .SetCloseHandler (func (code int , text string ) error {
4568 logger .Debug ("L2 ws: client gone" , "protocol" , protocolService .streamName , "code" , code , "message" , text )
46- // TODO remove handler
69+ protocolService . RemoveHandler ( protocolListener )
4770 return nil
4871 })
4972
50- protocolService .AddHandler (func (a swarm.Address , b []byte ) {
51- space := byte (' ' )
52- msg := append ([]byte {byte (atMsg + '0' ), space }, ([]byte (a .String ()))... )
53- msg = append (msg , append ([]byte {space }, b ... )... )
54- err := conn .WriteMessage (1 , msg )
55- if err != nil {
56- logger .Error (err , "L2 ws write message" )
57- }
58- // TODO messagetype 2
59- })
60-
6173 go func () {
6274 for {
6375 err = conn .SetReadDeadline (time .Now ().Add (readDeadline ))
@@ -70,6 +82,7 @@ func ListeningWs(ctx context.Context, conn *websocket.Conn, options WsOptions, l
7082 logger .Error (err , "L2 ws read message" )
7183 return
7284 }
85+ respMessageType .Store (uint32 (messageType ))
7386 if messageType == 1 {
7487 action := actionType (p [0 ] - '0' )
7588 offset := 2 // + 1 delimeter
0 commit comments