SZ
func (session *Session) Push(data []byte) error {
if !session.isReady {
return errors.New("failed to push push: not connected")
}
for {
err := session.UnsafePush(data)
if err != nil {
session.logger.Println("Push failed. Retrying...")
select {
case <-session.done:
return errShutdown
case <-time.After(resendDelay):
}
continue
}
select {
case confirm := <-session.notifyConfirm:
if confirm.Ack {
session.logger.Println("Push confirmed!")
return nil
}
case <-time.After(resendDelay):
}
session.logger.Println("Push didn't confirm. Retrying...")
}
}