void CSideWnd::ShowRelatedTabsForView(int viewID) { ClearTabs(); m_wndTabs.AddTab(&m_wndLogTab, TEXT("日志")); IDwarfViewInfo* pView = CDwarfViewProvider::GetInstance()[viewID]; if(!pView) return; m_Context.MainViewID = viewID; std::auto_ptr<IEnumerator<IDwarfViewInfo*>> pEnumView(pView->EnumReleatedView()); if(!pEnumView.get()) return; TTRACE(TEXT("初始化附加视图列表 ================\n")); while(pEnumView->MoveNext()) { CDwarfSideTab* tab = GetDwarfSideTab(pEnumView->Current()->GetViewID(), true); TTRACE(TEXT("\t%d - 0X%08X\n"), tab->GetViewID(), tab->GetSafeHwnd()); if(tab && -1 == m_wndTabs.GetTabFromHwnd(tab->GetSafeHwnd())) { m_wndTabs.AddTab(tab, pEnumView->Current()->ToString().c_str()); } } }
void ConnectionManager::onNewTreeAvailable() { TTRACE("onNewTreeAvailable"); if (treeManager) { auto tree = treeManager->getConfigurationTree(); if (tree) { TTRACE("got path %s", tree->path.toLatin1().data()); sendPush(tree->path, tree->fd); } } else { TDEBUG("Connection already closed when new tree is available"); } }
bool ConnectionManager::receiveHandshake(const char *buf, size_t len) { TTRACE("got handshake: '%s'", buf); if (strncmp(buf, HANDSHAKE_EXPECTED, HANDSHAKE_EXPECTED_LEN) != 0) return false; const char *haystack = buf + strlen(HANDSHAKE_EXPECTED); const char *needle; // TTRACE("%s", haystack); while ((needle = strpbrk(haystack, ",)")) != NULL) { bool found = false; if ((needle - haystack) == 0 && *needle == ')') break; for (unsigned int i = 0; i < (sizeof(CAPABILITIES) / sizeof(CAPABILITIES[0])); i++) { // TTRACE("%d %d", needle-haystack, CAPABILITIES[i].len); if ((size_t)(needle - haystack) == CAPABILITIES[i].len && strncmp(CAPABILITIES[i].name, haystack, qMin((size_t)(needle - haystack), strlen(CAPABILITIES[i].name))) == 0) { if (capabilities & CAPABILITIES[i].capability) return false; capabilities |= CAPABILITIES[i].capability; found = true; // TTRACE("cap found"); break; } } if (!found) return false; if (*needle == ')') break; haystack = needle + 1; } // TTRACE("%d => %d", len, (size_t)(needle - buf + 1)); if (!needle || *needle != ')' || (len != (size_t)(needle - buf + 1))) return false; return true; }
void ConnectionManager::connectionReadyRead() { struct msghdr msg; struct iovec iov; TTRACE("ConnectionManager::connectionReadyRead"); /* Response data */ iov.iov_base = buffer.data(); iov.iov_len = buffer.length(); /* compose the message */ memset(&msg, 0, sizeof(msg)); msg.msg_iov = &iov; msg.msg_iovlen = 1; while(connectionFd >= 0) { int nread = recvmsg(connectionFd, &msg, MSG_DONTWAIT); if (nread == 0) { connectionClose(); return; } else if (nread < 0) { if (errno != EAGAIN) { TWARN("recvmsg error %s", strerror(errno)); //close(connFd); connectionClose(); } return; } receiveDatagram(buffer.data(), nread); } }
void ConnectionManager::sendPush(QString path, int fd) { QByteArray push; TTRACE("send push"); push.append("PUSH "); push.append(path); push.append(""); sendDatagram(push.data(), push.length(), fd); }
void ConnectionManager::receiveWatch(const char *buf, size_t len) { TTRACE("got watch"); if (treeManager) { disconnect(treeManager.get(), 0, this, 0); } // TODO improve this QString path(QByteArray(buf + 6, len - 6 - 2)); TTRACE("before getConfigurationManager"); treeManager = ConfigurationPool::getInstance().getConfigurationManager(path); TTRACE("after getConfigurationManager"); if (treeManager) { treeManager->touch(); connect(treeManager.get(), SIGNAL(newTreeAvailable()), SLOT(onNewTreeAvailable())); onNewTreeAvailable(); } }
void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { TTRACE(TEXT("OnActivate")); __super::OnActivate(nState, pWndOther, bMinimized); }