void interface::do_login() { connect(&connection, SIGNAL(on_changephase(QJsonObject)), w_gameplay, SLOT(do_changephase(QJsonObject))); connect(&connection, SIGNAL(on_get_clients()), w_gameplay, SLOT(do_populate_players())); connect(&conn_client, SIGNAL(on_accept_prepare_proposal(QJsonObject, QHostAddress, quint16)), w_gameplay, SLOT(do_proposal_prepare(QJsonObject,QHostAddress,quint16))); connect(&conn_client, SIGNAL(on_accept_accept_proposal(QJsonObject, QHostAddress, quint16)), w_gameplay, SLOT(do_proposal_accept(QJsonObject,QHostAddress,quint16))); connect(&connection, SIGNAL(on_kpu_is_selected()), w_gameplay, SLOT(do_set_kpu_selected())); connect(&connection, SIGNAL(on_game_over(QJsonObject)), w_gameplay, SLOT(do_game_over(QJsonObject))); connect(&connection, SIGNAL(on_vote_now()), w_gameplay, SLOT(do_vote_now())); w_login->hide(); w_gameplay->show(); }
void handler_client::readMessage() { while (socket->hasPendingDatagrams()) { QByteArray message; message.resize(socket->pendingDatagramSize()); QHostAddress sender_ip; quint16 sender_port; socket->readDatagram(message.data(), message.size(), &sender_ip, &sender_port); qDebug() << "reading..."; QList<QByteArray> message_list = message.split('\n'); qDebug() << message_list; QJsonDocument json_document; QJsonObject json_object; QJsonValue method, status, description; json_document = QJsonDocument::fromJson(message_list.at(0)); json_object = json_document.object(); if (json_object.contains("status")) { /* Response Proposer->Acceptor */ status = json_object.value("status"); if (status == "fail" || status == "error"){ description = json_object.value("description"); emit on_fail_or_error(description.toString()); } else if (last_sent_method == "prepare_proposal" && status == "ok") { counter_prepare++; qDebug() << "Prepare Counter Sekarang = " << counter_prepare; if (counter_prepare == connection_server.getClients().size()-1) { accept_proposal(); } } } else if (json_object.contains("method")) { /* Request Acceptor->Proposer */ method = json_object.value("method"); // Cek dia nerima method apa if (method == "prepare_proposal"){ emit on_accept_prepare_proposal(json_object,sender_ip,sender_port); } else if (method == "accept_proposal"){ emit on_accept_accept_proposal(json_object,sender_ip,sender_port); } else if (method == "vote_werewolf") { int player_id_ = json_object.value("player_id").toInt(); vote_map[player_id_]++; counter_vote++; sendResponse(sender_ip.toString(),sender_port,"ok",""); if ( counter_vote == ((hardcode_player/3) - connection_server.getDeadWerewolf()) ) { QJsonArray json_array; QJsonArray final_array; for (int i = 0; i < connection_server.getClients().size(); i++) { json_array.insert(0, i); json_array.insert(1, vote_map[i]); final_array.insert(i, QJsonValue::fromVariant(json_array)); json_array.removeFirst(); json_array.removeFirst(); } QJsonObject message; message.insert("method", "vote_result_werewolf"); int pk = getVoteResult(); if ( pk != -1 ) { message.insert("vote_status", 1); message.insert("player_killed", pk); } else { message.insert("vote_status", -1); } message.insert("vote_result", final_array); connection_server.sendMessageJSON(message); counter_vote = 0; } } else if (method == "vote_civilian") { int player_id_ = json_object.value("player_id").toInt(); vote_map[player_id_]++; counter_vote++; sendResponse(sender_ip.toString(),sender_port,"ok",""); if ( counter_vote == (hardcode_player - connection_server.getDeadPlayer()) ) { QJsonArray json_array; QJsonArray final_array; for (int i = 0; i < connection_server.getClients().size(); i++) { json_array.insert(0, i); json_array.insert(1, vote_map[i]); final_array.insert(i, QJsonValue::fromVariant(json_array)); json_array.removeFirst(); json_array.removeFirst(); } QJsonObject message; message.insert("method", "vote_result_civilian"); int pk = getVoteResult(); if ( pk != -1 ) { message.insert("vote_status", 1); message.insert("player_killed", pk); } else { message.insert("vote_status", -1); } message.insert("vote_result", final_array); connection_server.sendMessageJSON(message); counter_vote = 0; } } } } }