func (c *Client) WriteAt(buf []byte, offset int64) (int, error) {
	return c.operation(TypeWrite, buf, offset)
}
WriteAt replica client
package dataconn
import (
	"errors"
	"io"
	"net"
	"time"
	"github.com/sirupsen/logrus"
	journal "github.com/longhorn/sparse-tools/stats"
)
var (
	ErrRWTimeout = errors.New("r/w timeout")
)
const (
	OPTimeout = 8 * time.Second
)
type Client struct {
	end       chan struct{}
	requests  chan *Message
	send      chan *Message
	responses chan *Message
	seq       uint32
	messages  map[uint32]*Message
	wire      *Wire
	peerAddr  string
}
func NewClient(conn net.Conn) *Client {
	c := &Client{
		wire:      NewWire(conn),
		peerAddr:  conn.RemoteAddr().String(),
		end:       make(chan struct{}, 1024),
		requests:  make(chan *Message, 1024),
		send:      make(chan *Message, 1024),
		responses: make(chan *Message, 1024),
		messages:  map[uint32]*Message{},
	}
	go c.loop()
	go c.write()
	go c.read()
	return c
}
func (c *Client) TargetID() string {
	return c.peerAddr
}