X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=client%2Fmainwindow.cpp;h=62096e5a1c25806c71a9ba2a0e864e0b82cc4f3f;hb=dfe38fbc0bda6e470d200e2a5d3865a446163303;hp=228fe6b2044435d4de924645e6dc6593e524af69;hpb=a64de5e1112be71ac6bcca755912c669f6d531f8;p=ultimatescore diff --git a/client/mainwindow.cpp b/client/mainwindow.cpp index 228fe6b..62096e5 100644 --- a/client/mainwindow.cpp +++ b/client/mainwindow.cpp @@ -8,6 +8,7 @@ #include #include #include +#include using namespace std; @@ -89,6 +90,24 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { ui->setupUi(this); + for (QComboBox *team_combo : { ui->initials_1_edit, ui->initials_2_edit, ui->match_2_initials_1_edit, ui->match_2_initials_2_edit, ui->match_3_initials_1_edit, ui->match_3_initials_2_edit }) { + // team_combo->addItem("BFK", "navy"); + team_combo->addItem("BRI", "navy"); + team_combo->addItem("BSI1", "white"); + team_combo->addItem("BSI2", "yellow"); + team_combo->addItem("ESK", "white"); + team_combo->addItem("FRA", "navy"); + team_combo->addItem("NHHI", "navy"); + team_combo->addItem("NMBUI", "cyan"); + team_combo->addItem("OSI", "black"); + team_combo->addItem("PCL", "red"); + team_combo->addItem("STO", ""); + team_combo->addItem("TFK1", "yellow"); + team_combo->addItem("TFK2", "yellow"); + team_combo->addItem("TFK3", "yellow"); + team_combo->addItem("TSI", "orange"); + } + ws = new WSServer("127.0.0.1", 5250); ws->set_connection_callback([this](bool connected) { string msg = connected ? "Connected" : "Not connected"; @@ -99,10 +118,12 @@ MainWindow::MainWindow(QWidget *parent) : udp_thread = std::thread(&MainWindow::udp_thread_func, this, 6000); udp_thread2 = std::thread(&MainWindow::udp_thread_func, this, 6001); + udp_thread3 = std::thread(&MainWindow::udp_thread_func, this, 6002); connect(ui->ws_disconnect_btn, &QPushButton::clicked, this, &MainWindow::ws_disconnect_clicked); connect(ui->set_initials_btn, &QPushButton::clicked, this, &MainWindow::set_initials_clicked); connect(ui->set_match_2_initials_btn, &QPushButton::clicked, this, &MainWindow::set_match_2_initials_clicked); + connect(ui->set_match_3_initials_btn, &QPushButton::clicked, this, &MainWindow::set_match_3_initials_clicked); connect(ui->set_color_btn, &QPushButton::clicked, this, &MainWindow::set_color_clicked); connect(ui->set_score_btn, &QPushButton::clicked, this, &MainWindow::set_score_clicked); connect(ui->set_all_scorebug_btn, &QPushButton::clicked, this, &MainWindow::set_all_scorebug_clicked); @@ -119,11 +140,14 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->hide_clock_btn, &QPushButton::clicked, this, &MainWindow::hide_clock_clicked); connect(ui->show_match_2_btn, &QPushButton::clicked, this, &MainWindow::show_match_2_clicked); connect(ui->hide_match_2_btn, &QPushButton::clicked, this, &MainWindow::hide_match_2_clicked); + connect(ui->show_match_3_btn, &QPushButton::clicked, this, &MainWindow::show_match_3_clicked); + connect(ui->hide_match_3_btn, &QPushButton::clicked, this, &MainWindow::hide_match_3_clicked); connect(ui->set_comment_btn, &QPushButton::clicked, this, &MainWindow::set_comment_clicked); connect(ui->set_and_show_comment_btn, &QPushButton::clicked, this, &MainWindow::set_and_show_comment_clicked); connect(ui->hide_comment_btn, &QPushButton::clicked, this, &MainWindow::hide_comment_clicked); connect(ui->set_and_show_autocomment_btn, &QPushButton::clicked, this, &MainWindow::set_and_show_autocomment_clicked); + connect(ui->autoshow_autocomment, &QCheckBox::stateChanged, this, &MainWindow::autocomment_update); connect(ui->show_lower_third_btn, &QPushButton::clicked, this, &MainWindow::show_lower_third_clicked); connect(ui->hide_lower_third_btn, &QPushButton::clicked, this, &MainWindow::hide_lower_third_clicked); @@ -134,13 +158,21 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->show_scorebug_btn, &QPushButton::clicked, this, &MainWindow::show_scorebug_clicked); connect(ui->show_group_a_btn, &QPushButton::clicked, this, [this]() { show_group_clicked("Group A"); }); connect(ui->show_group_b_btn, &QPushButton::clicked, this, [this]() { show_group_clicked("Group B"); }); + connect(ui->show_group_c_btn, &QPushButton::clicked, this, [this]() { show_group_clicked("Group C"); }); connect(ui->show_schedule_btn, &QPushButton::clicked, this, &MainWindow::show_schedule_clicked); connect(ui->show_carousel_btn, &QPushButton::clicked, this, &MainWindow::show_carousel_clicked); connect(ui->show_nothing_btn, &QPushButton::clicked, this, &MainWindow::show_nothing_clicked); - connect(ui->show_roster_1_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_1_edit->text().toStdString()); }); - connect(ui->show_roster_2_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_2_edit->text().toStdString()); }); + connect(ui->show_roster_1_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_1_edit->currentText().toStdString()); }); + connect(ui->show_roster_2_btn, &QPushButton::clicked, this, [this]() { show_roster_clicked(ui->initials_2_edit->currentText().toStdString()); }); connect(ui->show_roster_carousel_btn, &QPushButton::clicked, this, &MainWindow::show_roster_carousel_clicked); + connect(ui->initials_1_edit, QOverload::of(&QComboBox::currentIndexChanged), [=](int index) { + ui->color_1_edit->setText(ui->initials_1_edit->itemData(index).toString()); + }); + connect(ui->initials_2_edit, QOverload::of(&QComboBox::currentIndexChanged), [=](int index) { + ui->color_2_edit->setText(ui->initials_2_edit->itemData(index).toString()); + }); + autocomment_update(); const set> usb{{ 0x0e8f, 0x0041 }}; @@ -161,8 +193,8 @@ void MainWindow::ws_disconnect_clicked() void MainWindow::set_initials_clicked() { map param; - param["team1"] = escape_html(ui->initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->initials_2_edit->currentText().toStdString()); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval setteams()"); } @@ -170,12 +202,21 @@ void MainWindow::set_initials_clicked() void MainWindow::set_match_2_initials_clicked() { map param; - param["team1"] = escape_html(ui->match_2_initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->match_2_initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->match_2_initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->match_2_initials_2_edit->currentText().toStdString()); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval setteams2()"); } +void MainWindow::set_match_3_initials_clicked() +{ + map param; + param["team1"] = escape_html(ui->match_3_initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->match_3_initials_2_edit->currentText().toStdString()); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setteams3()"); +} + void MainWindow::set_color_clicked() { map param; @@ -228,12 +269,12 @@ void MainWindow::set_clock_limit_clicked() void MainWindow::start_and_show_clock_clicked() { - ws->send_command("eval startclock()"); // Also shows. + ws->send_command("eval startclock(0)"); // Also shows. } void MainWindow::stop_clock_clicked() { - ws->send_command("eval stopclock()"); + ws->send_command("eval stopclock(0)"); } void MainWindow::show_clock_clicked() @@ -256,6 +297,16 @@ void MainWindow::hide_match_2_clicked() ws->send_command("eval hidematch2()"); } +void MainWindow::show_match_3_clicked() +{ + ws->send_command("eval showmatch3()"); +} + +void MainWindow::hide_match_3_clicked() +{ + ws->send_command("eval hidematch3()"); +} + void MainWindow::set_comment_clicked() { map param; @@ -333,6 +384,11 @@ void MainWindow::autocomment_update() } } ui->autocomment_edit->setText(QString::fromStdString(msg)); + + map param; + param["autocomment_on_clock_limit"] = ui->autoshow_autocomment->isChecked() ? "1" : "0"; + param["autocomment"] = msg; + ws->send_command("update " + serialize_as_json(param)); } void MainWindow::show_scorebug_clicked() @@ -375,8 +431,8 @@ void MainWindow::show_carousel_clicked() void MainWindow::show_roster_carousel_clicked() { map param; - param["team1"] = escape_html(ui->initials_1_edit->text().toStdString()); - param["team2"] = escape_html(ui->initials_2_edit->text().toStdString()); + param["team1"] = escape_html(ui->initials_1_edit->currentText().toStdString()); + param["team2"] = escape_html(ui->initials_2_edit->currentText().toStdString()); ws->send_command("eval stopcarousel()"); ws->send_command("update " + serialize_as_json(param)); ws->send_command("eval showrostercarousel_from_state()"); @@ -389,6 +445,21 @@ void MainWindow::show_nothing_clicked() ws->send_command("eval hidetable()"); } +void udp_thread_nat_func(int sock, int port) +{ + sockaddr_in6 saddr6; + memset(&saddr6, 0, sizeof(saddr6)); + saddr6.sin6_family = AF_INET6; + inet_pton(AF_INET6, "::ffff:193.35.52.50", &saddr6.sin6_addr); + saddr6.sin6_port = htons(port); + + for ( ;; ) { + char buf[] = "ping"; + sendto(sock, buf, 4, 0, (sockaddr *)&saddr6, sizeof(saddr6)); + sleep(1); + } +} + void MainWindow::udp_thread_func(int port) { int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); @@ -413,6 +484,8 @@ void MainWindow::udp_thread_func(int port) exit(1); } + std::thread(&udp_thread_nat_func, sock, port + 1000).detach(); + for ( ;; ) { char buf[4096]; int err = recv(sock, buf, sizeof(buf), 0); @@ -453,7 +526,11 @@ int parse_score(char ch1, char ch2, char ch3) void MainWindow::bt6000_message_received(const string &msg, int port) { fprintf(stderr, "BT6000 message: '%s' (port %d)\n", msg.c_str(), port); - if (port == 6001) { + if (port == 6002) { + if (!ui->bt6000_3_enable->isChecked()) { + return; + } + } else if (port == 6001) { if (!ui->bt6000_2_enable->isChecked()) { return; } @@ -475,26 +552,39 @@ void MainWindow::bt6000_message_received(const string &msg, int port) param["clock_sec"] = to_string(seconds); ws->send_command("update " + serialize_as_json(param)); - if (port == 6001) { - ws->send_command("eval adjustclock2fromstate()"); + if (port == 6002) { + ws->send_command("eval adjustclockfromstate(2)"); + if (clock_running) { + ws->send_command("eval startclock(2)"); + } else { + ws->send_command("eval stopclock(2)"); + } + } else if (port == 6001) { + ws->send_command("eval adjustclockfromstate(1)"); if (clock_running) { - ws->send_command("eval startclock2()"); + ws->send_command("eval startclock(1)"); } else { - ws->send_command("eval stopclock2()"); + ws->send_command("eval stopclock(1)"); } } else { - ws->send_command("eval adjustclockfromstate()"); + ws->send_command("eval adjustclockfromstate(0)"); if (clock_running) { - ws->send_command("eval startclock()"); + ws->send_command("eval startclock(0)"); } else { - ws->send_command("eval stopclock()"); + ws->send_command("eval stopclock(0)"); } } } if (msg.size() >= 10 && msg[0] == 'G' && msg[1] == '0' && msg[2] == '2') { int score1 = parse_score(msg[4], msg[5], msg[6]); int score2 = parse_score(msg[7], msg[8], msg[9]); - if (port == 6001) { + if (port == 6002) { + map param; + param["score1"] = to_string(score1); + param["score2"] = to_string(score2); + ws->send_command("update " + serialize_as_json(param)); + ws->send_command("eval setscore3()"); + } else if (port == 6001) { map param; param["score1"] = to_string(score1); param["score2"] = to_string(score2);