websocket
websocket copied to clipboard
Example to implement json rpc 2 with net/rpc/jsonrpc
I tried to adapt this example for go fiber v2 websockets https://gist.github.com/mowings/dad4917b6fc21e6e5ffe2da3b16e7ef9
func main() {
rpc.Register(new(Arith))
http.Handle("/ws", websocket.Handler(serve))
http.ListenAndServe("localhost:7000", nil)
}
func serve(ws *websocket.Conn) {
log.Printf("Handler starting")
jsonrpc.ServeConn(ws)
log.Printf("Handler exiting")
}
I get this error: cannot use c (variable of type *"github.com/gofiber/websocket/v2".Conn) as io.ReadWriteCloser value in argument to jsonrpc.NewClient: *"github.com/gofiber/websocket/v2".Conn does not implement io.ReadWriteCloser (missing method Read)
Is there a way to adapt golang.org/x/net/websocket to be used with go fiber websockets?
I know this is late, but in case it's useful for others, something like this should do the trick. Disclaimer: untested.
jsonrpc.ServeConn(&WebSocketWrapper{conn})
type WebSocketWrapper struct {
*websocket.Conn
}
func (w *WebSocketWrapper) Read(p []byte) (n int, err error) {
_, msg, err := w.ReadMessage()
if err != nil {
return 0, err
}
if len(msg) > len(p) {
return 0, io.ErrShortBuffer
}
copy(p, msg)
return len(msg), err
}
func (w *WebSocketWrapper) Write(p []byte) (n int, err error) {
return len(p), w.WriteMessage(websocket.BinaryMessage, p)
}
func (w *WebSocketWrapper) Close() error {
return w.Conn.Close()
}