)
const messageBuffer = 5
+const messageTimeout = 5 * time.Second
const reHighlight = `\b(%s)\b`
var ErrUserClosed = errors.New("user closed")
case u.msg <- m:
case <-u.done:
return ErrUserClosed
- default:
- logger.Printf("Msg buffer full, closing: %s", u.Name())
+ case <-time.After(messageTimeout):
+ logger.Printf("Message buffer full, closing: %s", u.Name())
u.Close()
return ErrUserClosed
}
// Enable logging from submodules
chat.SetLogger(os.Stderr)
sshd.SetLogger(os.Stderr)
+ message.SetLogger(os.Stderr)
}
privateKeyPath := options.Identity
}
ratelimit := rateio.NewSimpleLimiter(3, time.Second*3)
+ logger.Debugf("Joined: %s", user.Name())
+
for {
line, err := term.ReadLine()
if err == io.EOF {
logger.Errorf("Failed to leave: %s", err)
return
}
+ logger.Debugf("Leaving: %s", user.Name())
}
// Serve our chat room onto the listener
go func() {
for range time.Tick(keepaliveInterval) {
+ // TODO: Could break out earlier with a select if we want, rather than waiting for an error.
_, err := channel.SendRequest(keepaliveRequest, true, nil)
if err != nil {
// Connection is gone