Example #1
0
func (r *redirector) pgListener() {
	var conn *pgx.Conn
	listen := func() (err error) {
		conn, err = r.DB.Acquire()
		if err != nil {
			return
		}
		if err = conn.Listen("refresh"); err != nil {
			return
		}
		for {
			_, err = conn.WaitForNotification(time.Second)
			if err == pgx.ErrNotificationTimeout {
				continue
			}
			if err != nil {
				return
			}
			r.maybeLoad()
		}
	}
	for {
		err := listen()
		log.Println("listen error:", err)
		if conn != nil {
			conn.Exec("UNLISTEN refresh")
			r.DB.Release(conn)
			conn = nil
		}
		time.Sleep(time.Second)
	}
}