in internal/fake/net_conn.go [192:226]
func (n *NetConn) write() {
for {
select {
case <-n.close:
return
case resp := <-n.writeResp:
// any write delay MUST happen outside of NetConn.Write
// else all we do is stall Conn.connWriter() which doesn't
// actually simulate a delayed response to a frame.
time.Sleep(resp.WriteDelay)
if resp.ChunkSize < 1 {
// no chunk size for this response, fall back to options
resp.ChunkSize = n.opts.ChunkSize
}
if resp.ChunkSize < 1 {
// send in one chunk
resp.ChunkSize = len(resp.Payload)
}
remaining := resp.Payload
for {
if l := len(remaining); l < resp.ChunkSize {
resp.ChunkSize = l
}
chunk := remaining[:resp.ChunkSize]
n.readData <- chunk
remaining = remaining[resp.ChunkSize:]
if len(remaining) == 0 {
break
}
}
}
}
}