Beispiel #1
0
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());
		}		
	}
}
Beispiel #2
0
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");
	}
}
Beispiel #3
0
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;
}
Beispiel #4
0
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);
	}

}
Beispiel #5
0
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);
}
Beispiel #6
0
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();
	}
}
Beispiel #7
0
void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
	TTRACE(TEXT("OnActivate"));
	__super::OnActivate(nState, pWndOther, bMinimized);
}