Skip to content

Commit

Permalink
Merge ctest (#423)
Browse files Browse the repository at this point in the history
test合成为1个程序,并做出其他些微修改

---------

Co-authored-by: YoumuKon <[email protected]>
  • Loading branch information
Notify-ctrl and YoumuKon authored Nov 23, 2024
1 parent 9c0830b commit 2292d57
Show file tree
Hide file tree
Showing 41 changed files with 530 additions and 327 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/run-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ jobs:
sudo apt-get install -y qt6-base-dev qt6-tools-dev qt6-tools-dev-tools
- name: Install freekill-core
run: git clone https://github.com/Qsgs-Fans/freekill-core.git packages/freekill-core
run: |
git clone https://github.com/Qsgs-Fans/freekill-core.git packages/freekill-core
- name: Build
run: |
Expand Down
2 changes: 2 additions & 0 deletions Fk/Pages/RoomLogic.js
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,7 @@ function checkAllReady() {
}

callbacks["ReadyChanged"] = (data) => {
console.log("ReadyChanged", JSON.stringify(data));
const id = data[0];
const ready = data[1];

Expand All @@ -657,6 +658,7 @@ callbacks["NetStateChanged"] = (data) => {
let state = data[1];

const model = getPhotoModel(id);
if (!model) return;
if (state === "run" && model.dead) {
state = "leave";
}
Expand Down
28 changes: 19 additions & 9 deletions src/client/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,17 @@
#include "network/client_socket.h"
#include "network/router.h"

#include <openssl/aes.h>
#include <openssl/pem.h>

Client *ClientInstance = nullptr;

struct ClientPrivate {
RSA *rsa;
ClientPrivate() { rsa = RSA_new(); }
~ClientPrivate() { RSA_free(rsa); }
};

Client::Client(QObject *parent) : QObject(parent) {
ClientInstance = this;
self = new ClientPlayer(0, this);
Expand All @@ -24,7 +33,7 @@ Client::Client(QObject *parent) : QObject(parent) {
callLua(c, j, true);
});

rsa = RSA_new();
p_ptr = new ClientPrivate;

L = new Lua;
if (QFile::exists("packages/freekill-core") &&
Expand All @@ -35,14 +44,15 @@ Client::Client(QObject *parent) : QObject(parent) {

L->dofile("lua/freekill.lua");
L->dofile("lua/client/client.lua");
L->call("CreateLuaClient", { QVariant::fromValue(this) });
}

Client::~Client() {
ClientInstance = nullptr;
delete L;
delete p_ptr;
router->getSocket()->disconnectFromHost();
router->getSocket()->deleteLater();
RSA_free(rsa);
}

void Client::connectToHost(const QString &server, ushort port) {
Expand All @@ -55,8 +65,8 @@ QString Client::pubEncrypt(const QString &key, const QString &data) {
// AES密钥和IV都是固定16字节的,所以可以放在开头
auto key_bytes = key.toLatin1();
BIO *keyio = BIO_new_mem_buf(key_bytes.constData(), -1);
RSA_free(rsa);
rsa = PEM_read_bio_RSAPublicKey(keyio, NULL, NULL, NULL);
RSA_free(p_ptr->rsa);
p_ptr->rsa = PEM_read_bio_RSAPublicKey(keyio, NULL, NULL, NULL);
BIO_free_all(keyio);

auto data_bytes = data.toUtf8();
Expand All @@ -73,11 +83,11 @@ QString Client::pubEncrypt(const QString &key, const QString &data) {

data_bytes.prepend(aes_key_);

unsigned char buf[RSA_size(rsa)];
unsigned char buf[RSA_size(p_ptr->rsa)];
RSA_public_encrypt(data.length() + 32,
(const unsigned char *)data_bytes.constData(), buf, rsa,
(const unsigned char *)data_bytes.constData(), buf, p_ptr->rsa,
RSA_PKCS1_PADDING);
return QByteArray::fromRawData((const char *)buf, RSA_size(rsa)).toBase64();
return QByteArray::fromRawData((const char *)buf, RSA_size(p_ptr->rsa)).toBase64();
}

void Client::sendSetupPacket(const QString &pubkey) {
Expand Down Expand Up @@ -146,7 +156,7 @@ Lua *Client::getLua() { return L; }

void Client::installAESKey(const QByteArray &key) {
startWatchFiles();
router->installAESKey(key);
router->getSocket()->installAESKey(key);
}

void Client::saveRecord(const QString &json, const QString &fname) {
Expand Down Expand Up @@ -176,7 +186,7 @@ void Client::startWatchFiles() {
fsWatcher.addPath("fk_ver"); // dummy
}
auto md5pairs = flist.readAll().split(';');
foreach (auto md5, md5pairs) {
for (auto md5 : md5pairs) {
if (md5.isEmpty()) continue;
auto fname = md5.split('=')[0];
if (fname.startsWith("packages") && fname.endsWith(".lua")) {
Expand Down
5 changes: 2 additions & 3 deletions src/client/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
#ifndef _CLIENT_H
#define _CLIENT_H

#include <openssl/rsa.h>
#include <openssl/pem.h>
struct ClientPrivate;

class Lua;
class ClientPlayer;
Expand Down Expand Up @@ -62,7 +61,7 @@ private slots:
// 仅在登录时使用
QString screenName;
QString password;
RSA *rsa;
ClientPrivate *p_ptr;
QString aes_key;
QString pubEncrypt(const QString &key, const QString &data);

Expand Down
6 changes: 3 additions & 3 deletions src/client/replayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Replayer::Replayer(QObject *parent, const QString &filename) :

roomSettings = arr[2].toString();

foreach (auto v, arr) {
for (auto v : arr) {
if (!v.isArray()) {
continue;
}
Expand Down Expand Up @@ -68,7 +68,7 @@ Replayer::~Replayer() {
if (origPlayerInfo != "") {
emit command_parsed("Setup", origPlayerInfo);
}
foreach (auto e, pairs) {
for (auto e : pairs) {
delete e;
}
}
Expand Down Expand Up @@ -144,7 +144,7 @@ void Replayer::run() {
emit speed_changed(getSpeed());
emit duration_set(getDuration());

foreach (auto pair, pairs) {
for (auto pair : pairs) {
if (killed) {
break;
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/c-wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ QVariant Lua::call(const QString &func_name, QVariantList params) {

lua_getglobal(L, func_name.toLatin1().data());

foreach (QVariant v, params) {
for (auto v : params) {
pushValue(L, v);
}

Expand Down
8 changes: 4 additions & 4 deletions src/core/packman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ PackMan::PackMan(QObject *parent) : QObject(parent) {
QDir d("packages");

// For old version
foreach (auto e, QmlBackend::ls("packages")) {
for (auto e : QmlBackend::ls("packages")) {
if (e.endsWith(".disabled") && d.exists(e) && !d.exists(e.chopped(9))) {
d.rename(e, e.chopped(9));
}
}

foreach (auto e, db->select("SELECT name, enabled FROM packages;")) {
for (auto e : db->select("SELECT name : enabled FROM packages;")) {
auto obj = e.toObject();
auto pack = obj["name"].toString();
auto enabled = obj["enabled"].toString().toInt() == 1;
Expand Down Expand Up @@ -52,7 +52,7 @@ QString PackMan::getPackSummary() {
void PackMan::loadSummary(const QString &jsonData, bool useThread) {
auto f = [=]() {
// First, disable all packages
foreach (auto e, db->select("SELECT name FROM packages;")) {
for (auto e : db->select("SELECT name FROM packages;")) {
disablePack(e.toObject()["name"].toString());
}

Expand All @@ -64,7 +64,7 @@ void PackMan::loadSummary(const QString &jsonData, bool useThread) {
auto doc = QJsonDocument::fromJson(jsonData.toUtf8());
auto arr = doc.array();
int i = 0;
foreach (auto e, arr) {
for (auto e : arr) {
i++;
auto obj = e.toObject();
auto name = obj["name"].toString();
Expand Down
2 changes: 1 addition & 1 deletion src/core/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ static void writeDirMD5(QFile &dest, const QString &dir,
QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
auto re = QRegularExpression::fromWildcard(filter);
const auto disabled = Pacman->getDisabledPacks();
foreach (QFileInfo info, entries) {
for (QFileInfo info : entries) {
if (info.isDir() && !info.fileName().endsWith(".disabled") && !disabled.contains(info.fileName())) {
writeDirMD5(dest, info.filePath(), filter);
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/freekill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ static bool copyPath(const QString &srcFilePath, const QString &tgtFilePath) {
QStringList fileNames =
sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot |
QDir::Hidden | QDir::System);
foreach (const QString &fileName, fileNames) {
for (const QString &fileName : fileNames) {
const QString newSrcFilePath = srcFilePath + QLatin1Char('/') + fileName;
const QString newTgtFilePath = tgtFilePath + QLatin1Char('/') + fileName;
if (!copyPath(newSrcFilePath, newTgtFilePath))
Expand Down
5 changes: 5 additions & 0 deletions src/network/client_socket.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ ClientSocket::ClientSocket(QTcpSocket *socket) {
void ClientSocket::init() {
connect(socket, &QTcpSocket::connected, this, &ClientSocket::connected);
connect(socket, &QTcpSocket::disconnected, this, &ClientSocket::disconnected);
connect(socket, &QTcpSocket::disconnected, this, &ClientSocket::removeAESKey);
connect(socket, &QTcpSocket::readyRead, this, &ClientSocket::getMessage);
connect(socket, &QTcpSocket::errorOccurred, this, &ClientSocket::raiseError);
socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
Expand Down Expand Up @@ -162,6 +163,10 @@ void ClientSocket::installAESKey(const QByteArray &key) {
aes_ready = true;
}

void ClientSocket::removeAESKey() {
aes_ready = false;
}

QByteArray ClientSocket::aesEnc(const QByteArray &in) {
if (!aes_ready) {
return in;
Expand Down
1 change: 1 addition & 0 deletions src/network/client_socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class ClientSocket : public QObject {
void disconnectFromHost();
/// 设置AES密钥,同时启用加密传输。
void installAESKey(const QByteArray &key);
void removeAESKey();
bool aesReady() const { return aes_ready; }
/// 发送消息。参见加密传输与压缩传输
void send(const QByteArray& msg);
Expand Down
4 changes: 0 additions & 4 deletions src/network/router.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,6 @@ void Router::removeSocket() {
socket = nullptr;
}

void Router::installAESKey(const QByteArray &key) {
socket->installAESKey(key);
}

bool Router::isConsoleStart() const {
return socket->peerAddress() == "127.0.0.1";
}
Expand Down
1 change: 0 additions & 1 deletion src/network/router.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ class Router : public QObject {
ClientSocket *getSocket() const;
void setSocket(ClientSocket *socket);
void removeSocket();
void installAESKey(const QByteArray &key);
bool isConsoleStart() const;

void setReplyReadySemaphore(QSemaphore *semaphore);
Expand Down
2 changes: 2 additions & 0 deletions src/pch.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
// other libraries
#define OPENSSL_API_COMPAT 0x10101000L

#define QT_ENABLE_STRICT_MODE_UP_TO 0x060200

#if !defined (Q_OS_ANDROID)
#define DESKTOP_BUILD
#endif
Expand Down
16 changes: 7 additions & 9 deletions src/server/room.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ bool Room::isAbandoned() const {
if (players.isEmpty())
return true;

foreach (ServerPlayer *p, players) {
for (ServerPlayer *p : players) {
if (p->getState() == Player::Online)
return false;
}
Expand Down Expand Up @@ -153,7 +153,7 @@ void Room::addPlayer(ServerPlayer *player) {
jsonData << QJsonDocument::fromJson(this->settings).object();
player->doNotify("EnterRoom", JsonArray2Bytes(jsonData));

foreach (ServerPlayer *p, getOtherPlayers(player)) {
for (ServerPlayer *p : getOtherPlayers(player)) {
jsonData = QJsonArray();
jsonData << p->getId();
jsonData << p->getScreenName();
Expand All @@ -164,7 +164,7 @@ void Room::addPlayer(ServerPlayer *player) {

jsonData = QJsonArray();
jsonData << p->getId();
foreach (int i, p->getGameData()) {
for (int i : p->getGameData()) {
jsonData << i;
}
player->doNotify("UpdateGameData", JsonArray2Bytes(jsonData));
Expand All @@ -182,7 +182,7 @@ void Room::addPlayer(ServerPlayer *player) {
} else {
auto jsonData = QJsonArray();
jsonData << player->getId();
foreach (int i, player->getGameData()) {
for (int i : player->getGameData()) {
jsonData << i;
}
doBroadcastNotify(getPlayers(), "UpdateGameData", JsonArray2Bytes(jsonData));
Expand Down Expand Up @@ -473,7 +473,7 @@ void Room::gameOver() {
auto settings = QJsonDocument::fromJson(this->settings);
auto mode = settings["gameMode"].toString();
server->beginTransaction();
foreach (ServerPlayer *p, players) {
for (ServerPlayer *p : players) {
auto pid = p->getId();

if (pid > 0) {
Expand Down Expand Up @@ -508,7 +508,7 @@ void Room::gameOver() {

void Room::manuallyStart() {
if (isFull() && !gameStarted) {
foreach (auto p, players) {
for (auto p : players) {
p->setReady(false);
p->setDied(false);
p->startGameTimer();
Expand Down Expand Up @@ -559,13 +559,11 @@ void Room::kickPlayer(ServerPlayer *player, const QString &jsonData) {

void Room::ready(ServerPlayer *player, const QString &) {
player->setReady(!player->isReady());
doBroadcastNotify(getPlayers(), "ReadyChanged",
QString("[%1,%2]").arg(player->getId()).arg(player->isReady()));
}

void Room::startGame(ServerPlayer *player, const QString &) {
if (isOutdated()) {
foreach (auto p, getPlayers()) {
for (auto p : getPlayers()) {
p->doNotify("ErrorMsg", "room is outdated");
p->kicked();
}
Expand Down
4 changes: 2 additions & 2 deletions src/server/roombase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ QList<ServerPlayer *> RoomBase::getOtherPlayers(ServerPlayer *expect) const {
}

ServerPlayer *RoomBase::findPlayer(int id) const {
foreach (ServerPlayer *p, players) {
for (auto p : players) {
if (p->getId() == id)
return p;
}
Expand All @@ -27,7 +27,7 @@ ServerPlayer *RoomBase::findPlayer(int id) const {

void RoomBase::doBroadcastNotify(const QList<ServerPlayer *> targets,
const QString &command, const QString &jsonData) {
foreach (ServerPlayer *p, targets) {
for (auto p : targets) {
p->doNotify(command, jsonData);
}
}
Expand Down
1 change: 1 addition & 0 deletions src/server/roomthread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ void RoomThread::run() {
connect(this, &RoomThread::pushRequest, m_scheduler, &Scheduler::handleRequest);
connect(this, &RoomThread::delay, m_scheduler, &Scheduler::doDelay);
connect(this, &RoomThread::wakeUp, m_scheduler, &Scheduler::resumeRoom);
emit scheduler_ready();
exec();
}

Expand Down
1 change: 1 addition & 0 deletions src/server/roomthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class RoomThread : public QThread {
bool isOutdated();

signals:
void scheduler_ready(); // 测试专用
void pushRequest(const QString &req);
void delay(int roomId, int ms);
void wakeUp(int roomId, const char *);
Expand Down
Loading

0 comments on commit 2292d57

Please sign in to comment.