Newer
Older
package codecs
import (
"context"
"net"
"net/url"
"gfx.cafe/open/jrpc/contrib/codecs/http"
"gfx.cafe/open/jrpc/contrib/codecs/rdwr"
"gfx.cafe/open/jrpc/contrib/codecs/websocket"
"gfx.cafe/open/jrpc/pkg/codec"
)
func DialContext(ctx context.Context, u string) (codec.Conn, error) {
pu, err := url.Parse(u)
if err != nil {
return nil, err
}
switch pu.Scheme {
case "http", "https":
return http.Dial(ctx, nil, u)
case "ws", "wss":
return websocket.DialWebsocket(ctx, u, "")
// case "redis":
// domain := pu.Query().Get("domain")
// if domain == "" {
// domain = "jrpc"
// }
// return redis.Dial(pu.Host, domain), nil
case "tcp":
tcpAddr, err := net.ResolveTCPAddr("tcp", u)
if err != nil {
return nil, err
}
conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
return nil, err
}