github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/rpc/jsoncodec/conn.go (about) 1 package jsoncodec 2 3 import ( 4 "encoding/json" 5 "net" 6 7 "golang.org/x/net/websocket" 8 ) 9 10 // NewWebsocket returns an rpc codec that uses the given websocket 11 // connection to send and receive messages. 12 func NewWebsocket(conn *websocket.Conn) *Codec { 13 return New(wsJSONConn{conn}) 14 } 15 16 type wsJSONConn struct { 17 conn *websocket.Conn 18 } 19 20 func (conn wsJSONConn) Send(msg interface{}) error { 21 return websocket.JSON.Send(conn.conn, msg) 22 } 23 24 func (conn wsJSONConn) Receive(msg interface{}) error { 25 return websocket.JSON.Receive(conn.conn, msg) 26 } 27 28 func (conn wsJSONConn) Close() error { 29 return conn.conn.Close() 30 } 31 32 // NewNet returns an rpc codec that uses the given net 33 // connection to send and receive messages. 34 func NewNet(conn net.Conn) *Codec { 35 return New(&netConn{ 36 enc: json.NewEncoder(conn), 37 dec: json.NewDecoder(conn), 38 conn: conn, 39 }) 40 } 41 42 type netConn struct { 43 enc *json.Encoder 44 dec *json.Decoder 45 conn net.Conn 46 } 47 48 func (conn *netConn) Send(msg interface{}) error { 49 return conn.enc.Encode(msg) 50 } 51 52 func (conn *netConn) Receive(msg interface{}) error { 53 return conn.dec.Decode(msg) 54 } 55 56 func (conn *netConn) Close() error { 57 return conn.conn.Close() 58 }