gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/util/io/io.go (about)

     1  // Package io is for io management
     2  package io
     3  
     4  import (
     5  	"io"
     6  
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/transport"
     8  )
     9  
    10  type rwc struct {
    11  	socket transport.Socket
    12  }
    13  
    14  func (r *rwc) Read(p []byte) (n int, err error) {
    15  	m := new(transport.Message)
    16  	if err := r.socket.Recv(m); err != nil {
    17  		return 0, err
    18  	}
    19  	copy(p, m.Body)
    20  	return len(m.Body), nil
    21  }
    22  
    23  func (r *rwc) Write(p []byte) (n int, err error) {
    24  	err = r.socket.Send(&transport.Message{
    25  		Body: p,
    26  	})
    27  	if err != nil {
    28  		return 0, err
    29  	}
    30  	return len(p), nil
    31  }
    32  
    33  func (r *rwc) Close() error {
    34  	return r.socket.Close()
    35  }
    36  
    37  // NewRWC returns a new ReadWriteCloser
    38  func NewRWC(sock transport.Socket) io.ReadWriteCloser {
    39  	return &rwc{sock}
    40  }