implem,ent state.rate()
This commit is contained in:
parent
43495a17ef
commit
af631a82f2
26
state.go
26
state.go
@ -26,14 +26,16 @@ type state struct {
|
|||||||
// conn is a net.Conn reference to the IRC server.
|
// conn is a net.Conn reference to the IRC server.
|
||||||
conn net.Conn
|
conn net.Conn
|
||||||
|
|
||||||
|
// lastWrite is used ot keep track of when we last wrote to the server.
|
||||||
|
lastWrite time.Time
|
||||||
|
// writeDelay is used to keep track of rate limiting of events sent to
|
||||||
|
// the server.
|
||||||
|
writeDelay time.Duration
|
||||||
|
|
||||||
// connected is true if we're actively connected to a server.
|
// connected is true if we're actively connected to a server.
|
||||||
connected bool
|
connected bool
|
||||||
// connTime is the time at which the client has connected to a server.
|
// connTime is the time at which the client has connected to a server.
|
||||||
connTime *time.Time
|
connTime *time.Time
|
||||||
// quitting is used to determine if we've finished quitting/cleaning up.
|
|
||||||
quitting bool
|
|
||||||
// reconnecting lets the internal state know a reconnect is occurring.
|
|
||||||
reconnecting bool
|
|
||||||
// nick is the tracker for our nickname on the server.
|
// nick is the tracker for our nickname on the server.
|
||||||
nick string
|
nick string
|
||||||
// channels represents all channels we're active in.
|
// channels represents all channels we're active in.
|
||||||
@ -341,3 +343,19 @@ func (s *state) lookupUsers(matchType, toMatch string) []*User {
|
|||||||
|
|
||||||
return users
|
return users
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rate allows limiting events based on how frequent the event is being sent,
|
||||||
|
// as well as how many characters each event has.
|
||||||
|
func (s *state) rate(chars int) time.Duration {
|
||||||
|
_time := time.Second + ((time.Duration(chars) * time.Second) / 100)
|
||||||
|
elapsed := time.Now().Sub(s.lastWrite)
|
||||||
|
if s.writeDelay += _time - elapsed; s.writeDelay < 0 {
|
||||||
|
s.writeDelay = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.writeDelay > (8 * time.Second) {
|
||||||
|
return _time
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user