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