Try to listen on a NOTIFY trigger.
[ccbs] / bigscreen / ccbs_bigscreen.cpp
1 #include <cstdio>
2 #include <unistd.h>
3 #include <pqxx/pqxx>
4 #include "glwindow.h"
5
6 /*
7  * A trigger that exits whenever it's trigged (used when we change big things
8  * such as starting a new tournament, and it's not really worth doing a clean
9  * change).
10  */
11 class ExitTrigger : pqxx::trigger {
12 public:
13         ExitTrigger(pqxx::connection_base &conn, const PGSTD::string &name)
14                 : pqxx::trigger(conn, name) {}
15         
16         virtual void operator() (int pid)
17         {
18                 std::fprintf(stderr, "Received an exit trigger from pid %u\n", pid);
19                 exit(0);
20         }
21 };
22
23 int main(int argc, char **argv)
24 {
25         GLWindow glw("CCBS bigscreen", 800, 600, 32, false, 16, -1);
26         try {
27                 pqxx::connection conn("dbname=ccbs host=sql.samfundet.no user=ccbs password=GeT|>>B_");
28                 ExitTrigger et(conn, "bs_tournament_changed");
29                 
30                 sleep(1);
31
32                 pqxx::work t(conn, "trx");
33
34                 // fetch all songs
35                 pqxx::result res( t.exec("SELECT * FROM songs") );
36                 for (pqxx::result::const_iterator i = res.begin(); i != res.end(); ++i) {
37                         std::fprintf(stderr, "%s\n", i["title"].c_str());
38                 }
39                 t.commit();
40
41                 sleep(1);
42         } catch (const std::exception &e) {
43                 std::fprintf(stderr, "Exception: %s\n", e.what());
44                 exit(1);
45         }
46         
47         return 0;
48 }