fixed query select bug
This commit is contained in:
parent
942ea44e90
commit
bd43c53db2
@ -186,7 +186,7 @@ target_link_libraries(PermHelper
|
||||
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "3")
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "22")
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH "23")
|
||||
if(BUILD_TYPE_NAME EQUAL OFF)
|
||||
SET(CPACK_PACKAGE_VERSION_DATA "beta")
|
||||
elseif(BUILD_TYPE_NAME STREQUAL "")
|
||||
|
@ -125,11 +125,6 @@ CommandResult QueryClient::handleCommandExit(Command &) {
|
||||
return CommandResult::Success;
|
||||
}
|
||||
|
||||
struct QuerySqlData {
|
||||
std::string username;
|
||||
std::string password;
|
||||
std::string uniqueId;
|
||||
};
|
||||
//login client_login_name=andreas client_login_password=meinPW
|
||||
CommandResult QueryClient::handleCommandLogin(Command& cmd) {
|
||||
CMD_RESET_IDLE;
|
||||
@ -174,11 +169,11 @@ CommandResult QueryClient::handleCommandLogin(Command& cmd) {
|
||||
|
||||
this->query_account = account;
|
||||
|
||||
auto joined = this->currentChannel;
|
||||
auto joined_channel = this->currentChannel;
|
||||
if(this->server) {
|
||||
{
|
||||
unique_lock tree_lock(this->server->channel_tree_lock);
|
||||
if(joined)
|
||||
if(joined_channel)
|
||||
this->server->client_move(this->ref(), nullptr, nullptr, "", ViewReasonId::VREASON_USER_ACTION, false, tree_lock);
|
||||
this->server->unregisterClient(_this.lock(), "login", tree_lock);
|
||||
}
|
||||
@ -194,6 +189,8 @@ CommandResult QueryClient::handleCommandLogin(Command& cmd) {
|
||||
auto target_server = this->server; /* keep the server alive 'ill we've joined the server */
|
||||
if(account->bound_server) {
|
||||
target_server = serverInstance->getVoiceServerManager()->findServerById(account->bound_server);
|
||||
if(target_server != this->server)
|
||||
joined_channel = nullptr;
|
||||
if(!target_server)
|
||||
return {findError("server_invalid_id"), "server does not exists anymore"};
|
||||
}
|
||||
@ -204,22 +201,30 @@ CommandResult QueryClient::handleCommandLogin(Command& cmd) {
|
||||
target_server->groups->enableCache(_this.lock());
|
||||
target_server->registerClient(_this.lock());
|
||||
|
||||
{
|
||||
shared_lock server_tree_lock(target_server->channel_tree_lock);
|
||||
if(joined_channel) /* needs only notify if we were already on that server within a channel */
|
||||
target_server->notifyClientPropertyUpdates(_this.lock(), deque<property::ClientProperties>{property::CLIENT_NICKNAME, property::CLIENT_UNIQUE_IDENTIFIER});
|
||||
|
||||
shared_lock client_tree_lock(this->channel_lock);
|
||||
unique_lock client_tree_lock(this->channel_lock);
|
||||
this->channels->reset();
|
||||
this->channels->insert_channels(target_server->channelTree->tree_head(), true, false);
|
||||
this->subscribeChannel(this->server->channelTree->channels(), false, false);
|
||||
}
|
||||
|
||||
if(joined_channel) {
|
||||
unique_lock tree_lock(this->server->channel_tree_lock);
|
||||
if(joined_channel)
|
||||
this->server->client_move(this->ref(), joined_channel, nullptr, "", ViewReasonId::VREASON_USER_ACTION, false, tree_lock);
|
||||
} else if(!this->permissionGranted(permission::PERMTEST_ORDERED, permission::b_virtualserver_select_godmode, 1))
|
||||
this->server->assignDefaultChannel(this->ref(), true);
|
||||
else
|
||||
this->update_cached_permissions();
|
||||
} else {
|
||||
serverInstance->getGroupManager()->enableCache(_this.lock());
|
||||
this->update_cached_permissions();
|
||||
}
|
||||
|
||||
if(target_server) {
|
||||
unique_lock tree_lock(target_server->channel_tree_lock);
|
||||
if(joined)
|
||||
this->server->client_move(this->ref(), joined, nullptr, "", ViewReasonId::VREASON_USER_ACTION, false, tree_lock);
|
||||
}
|
||||
this->properties()[property::CLIENT_TOTALCONNECTIONS]++;
|
||||
this->updateChannelClientProperties(true, true);
|
||||
|
||||
@ -251,19 +256,26 @@ CommandResult QueryClient::handleCommandLogout(Command &) {
|
||||
this->server->groups->enableCache(_this.lock());
|
||||
this->server->registerClient(this->ref());
|
||||
|
||||
{
|
||||
shared_lock server_channel_r_lock(this->server->channel_tree_lock);
|
||||
unique_lock client_channel_lock(this->channel_lock);
|
||||
|
||||
this->channels->reset();
|
||||
this->channels->insert_channels(this->server->channelTree->tree_head(), true, false);
|
||||
client_channel_lock.unlock();
|
||||
server_channel_r_lock.unlock();
|
||||
this->subscribeChannel(this->server->channelTree->channels(), false, false);
|
||||
}
|
||||
|
||||
if(joined) {
|
||||
unique_lock server_channel_w_lock(this->server->channel_tree_lock, defer_lock);
|
||||
this->server->client_move(this->ref(), joined, nullptr, "", ViewReasonId::VREASON_USER_ACTION, false, server_channel_w_lock);
|
||||
} else if(!this->permissionGranted(permission::PERMTEST_ORDERED, permission::b_virtualserver_select_godmode, 1)) {
|
||||
this->server->assignDefaultChannel(this->ref(), true);
|
||||
} else {
|
||||
this->update_cached_permissions();
|
||||
}
|
||||
} else {
|
||||
serverInstance->getGroupManager()->enableCache(_this.lock());
|
||||
this->update_cached_permissions();
|
||||
}
|
||||
|
||||
this->updateChannelClientProperties(true, true);
|
||||
@ -312,7 +324,8 @@ CommandResult QueryClient::handleCommandServerSelect(Command &cmd) {
|
||||
}
|
||||
server_locked->groups->disableCache(_this.lock());
|
||||
this->channels->reset();
|
||||
} else serverInstance->getGroupManager()->disableCache(_this.lock());
|
||||
} else
|
||||
serverInstance->getGroupManager()->disableCache(_this.lock());
|
||||
}
|
||||
this->resetEventMask();
|
||||
|
||||
@ -333,11 +346,11 @@ CommandResult QueryClient::handleCommandServerSelect(Command &cmd) {
|
||||
|
||||
{
|
||||
shared_lock server_channel_lock(target->channel_tree_lock);
|
||||
|
||||
unique_lock client_channel_lock(this->channel_lock);
|
||||
|
||||
this->subscribeToAll = true;
|
||||
this->channels->insert_channels(this->server->channelTree->tree_head(), true, false);
|
||||
this->subscribeChannel(this->server->channelTree->channels(), false, true);
|
||||
this->subscribeChannel(this->server->channelTree->channels(), false, false);
|
||||
}
|
||||
|
||||
auto negated_enforce_join = this->permissionGranted(permission::PERMTEST_ORDERED, permission::b_virtualserver_select_godmode, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user