rxLock *os.File
txLock *os.File
xxOnly TRxTx
+ rxRate int
+ txRate int
isDead bool
sync.RWMutex
}
return payloadsSplit(payloads)
}
-func (ctx *Ctx) StartI(conn net.Conn, nodeId *NodeId, nice uint8, xxOnly TRxTx, onlineDeadline, maxOnlineTime uint) (*SPState, error) {
+func (ctx *Ctx) StartI(conn net.Conn, nodeId *NodeId, nice uint8, xxOnly TRxTx, rxRate, txRate int, onlineDeadline, maxOnlineTime uint) (*SPState, error) {
err := ctx.ensureRxDir(nodeId)
if err != nil {
return nil, err
rxLock: rxLock,
txLock: txLock,
xxOnly: xxOnly,
+ rxRate: rxRate,
+ txRate: txRate,
}
var infosPayloads [][]byte
return nil, errors.New("Unknown peer: " + peerId)
}
state.Node = node
+ state.rxRate = node.RxRate
+ state.txRate = node.TxRate
state.onlineDeadline = node.OnlineDeadline
state.maxOnlineTime = node.MaxOnlineTime
sds := SDS{"node": node.Id, "nice": strconv.Itoa(int(nice))}
}
freq := state.queueTheir[0].freq
state.RUnlock()
+
+ if state.txRate > 0 {
+ time.Sleep(time.Second / time.Duration(state.txRate))
+ }
+
sdsp := SdsAdd(sds, SDS{
"xx": string(TTx),
"hash": ToBase32(freq.Hash[:]),
state.payloads <- reply
}
}()
+ if state.rxRate > 0 {
+ time.Sleep(time.Second / time.Duration(state.rxRate))
+ }
}
}()