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  }