Major bugfix in server

This commit is contained in:
AlexandreRouma
2022-01-22 02:30:08 +01:00
parent 34fc32dcf7
commit 4c1b50a3ac
10 changed files with 104 additions and 29 deletions

View File

@@ -35,11 +35,10 @@ namespace server {
// Start readers
client->readAsync(sizeof(PacketHeader), rbuffer, tcpHandler, this);
// Default configuration
stop();
// Ask for a UI
getUI();
int res = getUI();
if (res == -1) { throw std::runtime_error("Timed out"); }
else if (res == -2) { throw std::runtime_error("Server busy"); }
}
ClientClass::~ClientClass() {
@@ -153,6 +152,23 @@ namespace server {
_this->currentSampleRate = *(double*)_this->r_cmd_data;
core::setInputSampleRate(_this->currentSampleRate);
}
else if (_this->r_cmd_hdr->cmd == COMMAND_DISCONNECT) {
spdlog::error("Asked to disconnect by the server");
_this->serverBusy = true;
// Cancel waiters
std::vector<PacketWaiter*> toBeRemoved;
for (auto& [waiter, cmd] : _this->commandAckWaiters) {
waiter->cancel();
toBeRemoved.push_back(waiter);
}
// Remove handled waiters
for (auto& waiter : toBeRemoved) {
_this->commandAckWaiters.erase(waiter);
delete waiter;
}
}
}
else if (_this->r_pkt_hdr->type == PACKET_TYPE_COMMAND_ACK) {
// Notify waiters
@@ -184,7 +200,7 @@ namespace server {
_this->client->readAsync(sizeof(PacketHeader), _this->rbuffer, tcpHandler, _this);
}
void ClientClass::getUI() {
int ClientClass::getUI() {
auto waiter = awaitCommandAck(COMMAND_GET_UI);
sendCommand(COMMAND_GET_UI, 0);
if (waiter->await(PROTOCOL_TIMEOUT_MS)) {
@@ -192,9 +208,12 @@ namespace server {
dl.load(r_cmd_data, r_pkt_hdr->size - sizeof(PacketHeader) - sizeof(CommandHeader));
}
else {
spdlog::error("Timeout out after asking for UI");
if (!serverBusy) { spdlog::error("Timeout out after asking for UI"); };
waiter->handled();
return serverBusy ? -2 : -1;
}
waiter->handled();
return 0;
}
void ClientClass::sendPacket(PacketType type, int len) {