1package cluster 2 3import ( 4 "io" 5 "net" 6 "time" 7) 8 9type delayedConn struct { 10 net.Conn 11 dr *delayedReader 12} 13 14func newDelayedConn(conn net.Conn, delay time.Duration) net.Conn { 15 return &delayedConn{ 16 Conn: conn, 17 dr: &delayedReader{ 18 r: conn, 19 delay: delay, 20 }, 21 } 22} 23 24func (conn *delayedConn) Read(data []byte) (int, error) { 25 return conn.dr.Read(data) 26} 27 28func (conn *delayedConn) SetDelay(delay time.Duration) { 29 conn.dr.delay = delay 30} 31 32type delayedReader struct { 33 r io.Reader 34 delay time.Duration 35} 36 37func (dr *delayedReader) Read(data []byte) (int, error) { 38 // Sleep for the delay period prior to reading 39 if dr.delay > 0 { 40 time.Sleep(dr.delay) 41 } 42 43 return dr.r.Read(data) 44} 45