func NewConnection(nodeID string, reader io.Reader, writer io.Writer, receiver Model) Connection { cr := &countingReader{Reader: reader} cw := &countingWriter{Writer: writer} flrd := flate.NewReader(cr) flwr, err := flate.NewWriter(cw, flate.BestSpeed) if err != nil { panic(err) } wb := bufio.NewWriter(flwr) c := rawConnection{ id: nodeID, receiver: nativeModel{receiver}, reader: flrd, cr: cr, xr: xdr.NewReader(flrd), writer: flwr, cw: cw, wb: wb, xw: xdr.NewWriter(wb), awaiting: make([]chan asyncResult, 0x1000), indexSent: make(map[string]map[string][2]int64), outbox: make(chan []encodable), nextID: make(chan int), closed: make(chan struct{}), } go c.readerLoop() go c.writerLoop() go c.pingerLoop() go c.idGenerator() return wireFormatConnection{&c} }
func NewConnection(nodeID NodeID, reader io.Reader, writer io.Writer, receiver Model, name string) Connection { cr := &countingReader{Reader: reader} cw := &countingWriter{Writer: writer} rb := bufio.NewReader(cr) wb := bufio.NewWriterSize(cw, 65536) c := rawConnection{ id: nodeID, name: name, receiver: nativeModel{receiver}, state: stateInitial, cr: cr, xr: xdr.NewReader(rb), cw: cw, wb: wb, xw: xdr.NewWriter(wb), awaiting: make([]chan asyncResult, 0x1000), outbox: make(chan []encodable), nextID: make(chan int), closed: make(chan struct{}), } go c.readerLoop() go c.writerLoop() go c.pingerLoop() go c.idGenerator() return wireFormatConnection{&c} }
func NewConnection(nodeID string, reader io.Reader, writer io.Writer, receiver Model, options map[string]string) *Connection { flrd := flate.NewReader(reader) flwr, err := flate.NewWriter(writer, flate.BestSpeed) if err != nil { panic(err) } c := Connection{ id: nodeID, receiver: receiver, reader: flrd, xr: xdr.NewReader(flrd), writer: flwr, xw: xdr.NewWriter(flwr), awaiting: make(map[int]chan asyncResult), indexSent: make(map[string]map[string][2]int64), } go c.readerLoop() go c.pingerLoop() if options != nil { c.myOptions = options go func() { c.Lock() header{0, c.nextID, messageTypeOptions}.encodeXDR(c.xw) var om OptionsMessage for k, v := range options { om.Options = append(om.Options, Option{k, v}) } om.encodeXDR(c.xw) err := c.xw.Error() if err == nil { err = c.flush() } if err != nil { log.Println("Warning: Write error during initial handshake:", err) } c.nextID++ c.Unlock() }() } return &c }
func TestTypeErr(t *testing.T) { m0 := newTestModel() m1 := newTestModel() ar, aw := io.Pipe() br, bw := io.Pipe() c0 := NewConnection(c0ID, ar, bw, m0, "name", true).(wireFormatConnection).next.(*rawConnection) NewConnection(c1ID, br, aw, m1, "name", true) w := xdr.NewWriter(c0.cw) w.WriteUint32(encodeHeader(header{ version: 0, msgID: 0, msgType: 42, })) w.WriteUint32(0) if !m1.isClosed() { t.Error("Connection should close due to unknown message type") } }
func (o ClusterConfigMessage) AppendXDR(bs []byte) []byte { var aw = xdr.AppendWriter(bs) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o ClusterConfigMessage) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o ResponseMessage) AppendXDR(bs []byte) []byte { var aw = xdr.AppendWriter(bs) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o AnnounceV1) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o repeatReader) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o AnnounceV2) MarshalXDR() []byte { var buf bytes.Buffer var xw = xdr.NewWriter(&buf) o.encodeXDR(xw) return buf.Bytes() }
func (o FileInfo) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o TestStruct) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o TestStruct) MarshalXDR() []byte { var buf bytes.Buffer var xw = xdr.NewWriter(&buf) o.encodeXDR(xw) return buf.Bytes() }
func (o Repository) MarshalXDR() []byte { var buf bytes.Buffer var xw = xdr.NewWriter(&buf) o.encodeXDR(xw) return buf.Bytes() }
func (o ClusterConfigMessage) MarshalXDR() []byte { var buf bytes.Buffer var xw = xdr.NewWriter(&buf) o.encodeXDR(xw) return buf.Bytes() }
func (o Repository) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o IndexMessage) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o Repository) AppendXDR(bs []byte) []byte { var aw = xdr.AppendWriter(bs) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o repeatReader) MarshalXDR() []byte { var aw = make(xdr.AppendWriter, 0, 128) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o FileInfo) AppendXDR(bs []byte) []byte { var aw = xdr.AppendWriter(bs) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o versionList) AppendXDR(bs []byte) []byte { var aw = xdr.AppendWriter(bs) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }
func (o Address) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o fileVersion) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o QueryV2) EncodeXDR(w io.Writer) (int, error) { var xw = xdr.NewWriter(w) return o.encodeXDR(xw) }
func (o XDRBenchStruct) MarshalXDR() []byte { var aw = make(xdr.AppendWriter, 0, 128) var xw = xdr.NewWriter(&aw) o.encodeXDR(xw) return []byte(aw) }