44 "bytes"
55 "context"
66 "crypto/rand"
7+ "encoding/json"
78 "errors"
89 "flag"
910 "fmt"
@@ -138,14 +139,12 @@ func main() {
138139
139140 case backendTypeDudirekta :
140141 ready := make (chan struct {})
141- registry := rpc .NewRegistry (
142- & struct {}{},
143- services.BackendRemote {},
142+ registry := rpc .NewRegistry [services.BackendRemote , json.RawMessage ](
143+ struct {}{},
144144
145145 time .Second * 10 ,
146146 ctx ,
147147 & rpc.Options {
148- ResponseBufferLen : rpc .DefaultResponseBufferLen ,
149148 OnClientConnect : func (remoteID string ) {
150149 ready <- struct {}{}
151150 },
@@ -159,7 +158,29 @@ func main() {
159158 defer conn .Close ()
160159
161160 go func () {
162- if err := registry .Link (conn ); err != nil {
161+ encoder := json .NewEncoder (conn )
162+ decoder := json .NewDecoder (conn )
163+
164+ if err := registry .LinkStream (
165+ func (v rpc.Message [json.RawMessage ]) error {
166+ return encoder .Encode (v )
167+ },
168+ func (v * rpc.Message [json.RawMessage ]) error {
169+ return decoder .Decode (v )
170+ },
171+
172+ func (v any ) (json.RawMessage , error ) {
173+ b , err := json .Marshal (v )
174+ if err != nil {
175+ return nil , err
176+ }
177+
178+ return json .RawMessage (b ), nil
179+ },
180+ func (data json.RawMessage , v any ) error {
181+ return json .Unmarshal ([]byte (data ), v )
182+ },
183+ ); err != nil {
163184 if ! utils .IsClosedErr (err ) {
164185 panic (err )
165186 }
@@ -169,11 +190,12 @@ func main() {
169190 <- ready
170191
171192 var peer * services.BackendRemote
172- for _ , candidate := range registry .Peers () {
173- peer = & candidate
174193
175- break
176- }
194+ _ = registry .ForRemotes (func (remoteID string , remote services.BackendRemote ) error {
195+ peer = & remote
196+
197+ return nil
198+ })
177199
178200 if peer == nil {
179201 panic (errNoPeerFound )
0 commit comments