Revert some IPC changes and add some logging.

This commit is contained in:
fanlusky committed 2026-07-06 10:17:45 +08:00
1 parent 61571a4867
commit dd2ccfcf8c
2 files changed
+32 -20

No files matched your search

+20 -20
View File
@@ -196,6 +196,18 @@ void LogPipeEvent(const wchar_t *pipe_name, UINT event_type, UINT keycode, WCHAR
keycode, static_cast<unsigned int>(wch), modifiers_down);
}
void LogClientLifecycle(const wchar_t *phase, uint64_t client_id, UINT event_type)
{
FANY_IPC_LOGF(L"[msime]: [ipc] client lifecycle: phase={}, client_id={}, event_type={}", phase, client_id,
event_type);
}
void LogClientRouting(uint64_t client_id, UINT event_type, bool is_active)
{
FANY_IPC_LOGF(L"[msime]: [ipc] client routing: client_id={}, event_type={}, is_active={}", client_id, event_type,
is_active);
}
bool WaitForPipeClient(HANDLE pipe)
{
BOOL connected = ConnectNamedPipe(pipe, NULL);
@@ -409,6 +421,7 @@ void EnqueuePinCandidateTask(const std::string &pinyin, const std::string &word)
void SendCurrentDataToActiveTsf()
{
const UINT msg_type = Global::MsgTypeToTsf;
FANY_IPC_LOGF(L"[msime]: [ipc] send-current-data: msg_type={}, text={}", msg_type, ::Global::candidate_ui.selected_text);
SendToTsfViaNamedpipe(msg_type, ::Global::candidate_ui.selected_text);
if (msg_type == Global::DataFromServerMsgType::Normal)
{
@@ -470,17 +483,20 @@ void MainPipeClientThread(HANDLE clientPipe)
clientId = pipeData.client_id;
if (pipeData.event_type == FanyImePipeEventType::ClientHello)
{
LogClientLifecycle(L"hello", clientId, pipeData.event_type);
RegisterMainPipeClient(clientId, clientPipe);
continue;
}
if (pipeData.event_type == FanyImePipeEventType::ClientActivated)
{
LogClientLifecycle(L"activated", clientId, pipeData.event_type);
RegisterMainPipeClient(clientId, clientPipe);
ActivatePipeClient(clientId);
continue;
}
if (pipeData.event_type == FanyImePipeEventType::ClientDeactivated)
{
LogClientLifecycle(L"deactivated", clientId, pipeData.event_type);
if (IsActivePipeClient(clientId))
{
EnqueueTask(TaskType::ClientDeactivated, pipeData);
@@ -489,7 +505,9 @@ void MainPipeClientThread(HANDLE clientPipe)
continue;
}
if (!IsActivePipeClient(clientId))
const bool isActiveClient = IsActivePipeClient(clientId);
LogClientRouting(clientId, pipeData.event_type, isActiveClient);
if (!isActiveClient)
{
FANY_IPC_LOGF(L"[msime]: [ipc] ignored inactive main-pipe event: client_id={}, type={}", clientId,
pipeData.event_type);
@@ -628,11 +646,10 @@ void ToTsfWorkerThreadPipeEventListenerLoopThread()
void RegisteredPipeMonitorThread(HANDLE clientPipe, UINT pipeRole)
{
const wchar_t *pipeName = pipeRole == FanyImePipeRole::ToTsf ? L"to-tsf-pipe" : L"to-tsf-worker-pipe";
FanyImePipeHello hello = {};
if (!ReadPipeHello(clientPipe, hello))
{
LogPipeReadFailure(pipeName, 0);
LogPipeReadFailure(pipeRole == FanyImePipeRole::ToTsf ? L"to-tsf-pipe" : L"to-tsf-worker-pipe", 0);
DisconnectNamedPipe(clientPipe);
CloseHandle(clientPipe);
return;
@@ -646,23 +663,6 @@ void RegisteredPipeMonitorThread(HANDLE clientPipe, UINT pipeRole)
{
RegisterToTsfWorkerThreadPipeClient(hello.client_id, clientPipe);
}
while (true)
{
BYTE buffer = 0;
DWORD bytesRead = 0;
BOOL readResult = ReadFile(clientPipe, &buffer, sizeof(buffer), &bytesRead, NULL);
if (!readResult || bytesRead == 0)
{
LogPipeReadFailure(pipeName, bytesRead);
break;
}
}
UnregisterPipeClientHandle(hello.client_id, pipeRole, clientPipe);
LogPipeDisconnect(pipeName);
DisconnectNamedPipe(clientPipe);
CloseHandle(clientPipe);
}
void AuxPipeEventListenerLoopThread()
+12
View File
@@ -110,6 +110,12 @@ void LogPipeDisconnected(const wchar_t *pipe_name, UINT msg_type)
FANY_IPC_LOGF(L"[msime]: [ipc] Attempted to write to disconnected pipe {}: msg_type={}", pipe_name, msg_type);
}
void LogPipeWriteTarget(const wchar_t *pipe_name, uint64_t client_id, UINT msg_type, const std::wstring &payload)
{
FANY_IPC_LOGF(L"[msime]: [ipc] write target: pipe={}, client_id={}, msg_type={}, payload={}", pipe_name, client_id,
msg_type, payload);
}
HANDLE CreateNamedPipeInstance(const wchar_t *pipe_name, DWORD out_buffer_size, DWORD in_buffer_size)
{
PSECURITY_DESCRIPTOR pd = nullptr;
@@ -547,11 +553,13 @@ void UnregisterPipeClientHandle(uint64_t client_id, UINT pipe_role, HANDLE pipe)
if (it->second.to_tsf_pipe != INVALID_HANDLE_VALUE)
{
DisconnectNamedPipe(it->second.to_tsf_pipe);
CloseHandle(it->second.to_tsf_pipe);
it->second.to_tsf_pipe = INVALID_HANDLE_VALUE;
}
if (it->second.to_tsf_worker_thread_pipe != INVALID_HANDLE_VALUE)
{
DisconnectNamedPipe(it->second.to_tsf_worker_thread_pipe);
CloseHandle(it->second.to_tsf_worker_thread_pipe);
it->second.to_tsf_worker_thread_pipe = INVALID_HANDLE_VALUE;
}
}
@@ -703,6 +711,7 @@ void SendToTsfViaNamedpipe(UINT msg_type, const std::wstring &pipeData)
namedpipeDataToTsf.msg_type = msg_type;
wcscpy_s(namedpipeDataToTsf.candidate_string, pipeData.c_str());
LogPipeWriteTarget(L"to-tsf", target.client_id, msg_type, pipeData);
BOOL ret = WriteFile( //
target.pipe, //
@@ -722,6 +731,7 @@ void SendToTsfViaNamedpipe(UINT msg_type, const std::wstring &pipeData)
LogPipeWriteFailure(L"to-tsf", msg_type, bytesWritten, sizeof(namedpipeDataToTsf));
UnregisterPipeClientHandle(target.client_id, FanyImePipeRole::ToTsf, target.pipe);
DisconnectNamedPipe(target.pipe);
CloseHandle(target.pipe);
}
}
@@ -741,6 +751,7 @@ void SendToTsfWorkerThreadViaNamedpipe(UINT msg_type, const std::wstring &pipeDa
namedpipeDataToTsfWorkerThread.msg_type = msg_type;
wcscpy_s(namedpipeDataToTsfWorkerThread.data, pipeData.c_str());
LogPipeWriteTarget(L"to-tsf-worker", target.client_id, msg_type, pipeData);
BOOL ret = WriteFile( //
target.pipe, //
@@ -761,5 +772,6 @@ void SendToTsfWorkerThreadViaNamedpipe(UINT msg_type, const std::wstring &pipeDa
LogPipeWriteFailure(L"to-tsf-worker", msg_type, bytesWritten, sizeof(namedpipeDataToTsfWorkerThread));
UnregisterPipeClientHandle(target.client_id, FanyImePipeRole::ToTsfWorkerThread, target.pipe);
DisconnectNamedPipe(target.pipe);
CloseHandle(target.pipe);
}
}