Пример #1
0
int CAuxHandle::ProcessNotifyMsg(char* pCodeBuff,int iCodeLen)
{
	TMQHeadInfo* pMQHeadInfo = (TMQHeadInfo*)pCodeBuff;
	if(pMQHeadInfo->m_ucCmd == TMQHeadInfo::CMD_NEW_TCP_SOCKET)
	{
		int iSocket = pMQHeadInfo->m_iSuffix;
		if (iSocket < 0)
			return -1;

		int iListenPort = pMQHeadInfo->m_usSrcListenPort;

		int iNewSuffix = CreateSocketNode(iSocket,TSocketNode::TCP_CLIENT_SOCKET,
									pMQHeadInfo->m_unClientIP,pMQHeadInfo->m_usClientPort,iListenPort);
		if(iNewSuffix < 0)
			return -2;
	}
	else if(pMQHeadInfo->m_ucCmd == TMQHeadInfo::CMD_NEW_UDP_SOCKET)
	{
		int iSocket = pMQHeadInfo->m_iSuffix;
		if (iSocket < 0)
			return -1;

		int iListenPort = pMQHeadInfo->m_usSrcListenPort;

		int iNewSuffix = CreateSocketNode(iSocket,TSocketNode::UDP_SOCKET,0,0,iListenPort);
		if(iNewSuffix < 0)
			return -2;
	}
	else if(pMQHeadInfo->m_ucCmd == TMQHeadInfo::CMD_CCS_NOTIFY_DISCONN)
	{
		TSocketNode* pSocketNode = &m_pSocket[pMQHeadInfo->m_iSuffix];
		if (pSocketNode->m_iSocket < 0)
			return -1;

		if(pSocketNode->m_sSocketType == TSocketNode::TCP_CLIENT_SOCKET)
		{
			if((pSocketNode->m_unClientIP != pMQHeadInfo->m_unClientIP) ||
				(pSocketNode->m_usClientPort != pMQHeadInfo->m_usClientPort))
			{
				return -2;
			}
			char szIpClient[32];
			HtoP(pSocketNode->m_unClientIP, szIpClient);
			WARN("iSocketSuffix %d fd %d CMD_CCS_NOTIFY_DISCONN %s:%d.[%s:%d]\n",
					pMQHeadInfo->m_iSuffix, pSocketNode->m_iSocket, szIpClient,(int)pSocketNode->m_usClientPort,__FILE__,__LINE__);
			ClearSocketNode(pMQHeadInfo->m_iSuffix);
		}
	}
	else if (TMQHeadInfo::CMD_CCS_MCP_NOTIFY_DISCONN == pMQHeadInfo->m_ucCmd) {
		TSocketNode* pSocketNode = &m_pSocket[pMQHeadInfo->m_iSuffix];
		char szIpCmd[32];
		HtoP(ntohl(pMQHeadInfo->m_unClientIP), szIpCmd);
		ERR("iSocketSuffix %d fd %d CMD_CCS_MCP_NOTIFY_DISCONN close port %d %s:%d.[%s:%d]\n",
					(int)pMQHeadInfo->m_iSuffix, (int)pSocketNode->m_iSocket, (int)pMQHeadInfo->m_usClosePort,
					szIpCmd,(int)pMQHeadInfo->m_usClientPort,__FILE__,__LINE__);
		pMQHeadInfo->m_ucCmd = TMQHeadInfo::CMD_CCS_THREAD_NOTIFY_DISCONN;
		NotifyAllThread(pCodeBuff, iCodeLen);
	}
	else if (TMQHeadInfo::CMD_CCS_THREAD_NOTIFY_DISCONN == pMQHeadInfo->m_ucCmd) {
		for (int i=0; i<m_pMainConfig->MAX_SOCKET_NUM; ++i) {
			TSocketNode* pSocketNode = &m_pSocket[i];
			if (pSocketNode->m_usListenPort == pMQHeadInfo->m_usClosePort) {
				char szIpClient[32], szIpCmd[32];
				HtoP(ntohl(pSocketNode->m_unClientIP), szIpClient);
				HtoP(ntohl(pMQHeadInfo->m_unClientIP), szIpCmd);
				ERR("iSocketSuffix %d fd %d CMD_CCS_THREAD_NOTIFY_DISCONN cmd[%s:%d] close port %d client [%s:%d].[%s:%d]\n",
					i, (int)pSocketNode->m_iSocket, szIpCmd,(int)pMQHeadInfo->m_usClientPort, (int)pMQHeadInfo->m_usClosePort,
					szIpClient,(int)pSocketNode->m_usClientPort,__FILE__,__LINE__);
				ClearSocketNode(i);
			}
		}
	}
	return 0;
}
Пример #2
0
/*****************************************************************************\
* xxxGetMenuBarInfo()
*
* This succeeds if the menu/menu item exists.
*
* Parameters:
*     pwnd        window
*     idObject    this can be OBJID_MENU, OBJID_SYSMENU, or OBJID_CLIENT
*     idItem      which thing do we need info on? 0..cItems. 0 indicates
*                 the menu itself, 1 is the first item on the menu...
*     pmbi        Pointer to a MENUBARINFO structure that gets filled in
*
\*****************************************************************************/
BOOL WINAPI
xxxGetMenuBarInfo(PWND pwnd, long idObject, long idItem, PMENUBARINFO pmbi)
{
    PMENU       pMenu;
    int         cBorders;
    PITEM       pItem;
    PPOPUPMENU  ppopup;

    CheckLock(pwnd);

    /*
     * Validate menubarinfo structure
     */
    if (pmbi->cbSize != sizeof(MENUBARINFO)) {
        RIPERR1(ERROR_INVALID_PARAMETER, RIP_WARNING, "MENUBARINFO.cbSize %d is wrong", pmbi->cbSize);
        return FALSE;
    }

    /*
     * Initialize the fields
     */
    SetRectEmpty(&pmbi->rcBar);
    pmbi->hMenu = NULL;
    pmbi->hwndMenu = NULL;
    pmbi->fBarFocused = FALSE;
    pmbi->fFocused = FALSE;

    /*
     * Get the menu handle we will deal with.
     */
    if (idObject == OBJID_MENU) {
        int cBorders;

        if (TestWF(pwnd, WFCHILD) || !pwnd->spmenu)
            return FALSE;

        pMenu = pwnd->spmenu;
        if (!pMenu)
            return FALSE;

        // If we have an item, is it in the valid range?
        if ((idItem < 0) || ((DWORD)idItem > pMenu->cItems))
            return FALSE;

        /*
         * Menu handle
         */
        pmbi->hMenu = PtoHq(pMenu);

        /*
         * Menu rect
         */
        if (pMenu->cxMenu && pMenu->cyMenu) {
            if (!idItem) {
                cBorders = GetWindowBorders(pwnd->style, pwnd->ExStyle, TRUE, FALSE);
                pmbi->rcBar.left = pwnd->rcWindow.left + cBorders * SYSMET(CXBORDER);
                pmbi->rcBar.top = pwnd->rcWindow.top + cBorders * SYSMET(CYBORDER);

                if (TestWF(pwnd, WFCPRESENT)) {
                    pmbi->rcBar.top += (TestWF(pwnd, WEFTOOLWINDOW) ? SYSMET(CYSMCAPTION) : SYSMET(CYCAPTION));
                }

                pmbi->rcBar.right = pmbi->rcBar.left + pMenu->cxMenu;
                pmbi->rcBar.bottom = pmbi->rcBar.top + pMenu->cyMenu;
            } else {
                pItem = pMenu->rgItems + idItem - 1;

                pmbi->rcBar.left = pwnd->rcWindow.left + pItem->xItem;
                pmbi->rcBar.top = pwnd->rcWindow.top + pItem->yItem;
                pmbi->rcBar.right = pmbi->rcBar.left + pItem->cxItem;
                pmbi->rcBar.bottom = pmbi->rcBar.top + pItem->cyItem;
            }
        }

        /*
         * Are we currently in app menu bar mode?
         */
        ppopup = GetpGlobalPopupMenu(pwnd);
        if (ppopup && ppopup->fHasMenuBar && !ppopup->fIsSysMenu &&
            (ppopup->spwndNotify == pwnd))
        {
            // Yes, we are.
            pmbi->fBarFocused = TRUE;

            if (!idItem) {
                pmbi->fFocused = TRUE;
            } else if (ppopup->ppopupmenuRoot->posSelectedItem == (UINT)idItem-1) {
                pmbi->fFocused = TRUE;
                UserAssert(ppopup->ppopupmenuRoot);
                pmbi->hwndMenu = HW(ppopup->ppopupmenuRoot->spwndNextPopup);
            }
        }

    } else if (idObject == OBJID_SYSMENU) {
        if (!TestWF(pwnd, WFSYSMENU))
            return FALSE;

        pMenu = xxxGetSysMenu(pwnd, FALSE);
        if (!pMenu)
            return FALSE;

        // If we have an item, is it in the valid range?
        if ((idItem < 0) || ((DWORD)idItem > pMenu->cItems))
            return FALSE;

        pmbi->hMenu = PtoHq(pMenu);

        /*
         * Menu rect
         */
        if (_HasCaptionIcon(pwnd)) {
            // The menu and single item take up the same space
            cBorders = GetWindowBorders(pwnd->style, pwnd->ExStyle, TRUE, FALSE);
            pmbi->rcBar.left = pwnd->rcWindow.left + cBorders * SYSMET(CXBORDER);
            pmbi->rcBar.top = pwnd->rcWindow.top + cBorders * SYSMET(CYBORDER);

            pmbi->rcBar.right = pmbi->rcBar.left +
                (TestWF(pwnd, WEFTOOLWINDOW) ? SYSMET(CXSMSIZE) : SYSMET(CXSIZE));

            pmbi->rcBar.bottom = pmbi->rcBar.top +
                (TestWF(pwnd, WEFTOOLWINDOW) ? SYSMET(CYSMSIZE) : SYSMET(CYSIZE));
        }

        /*
         * Are we currently in system menu bar mode?
         */
        ppopup = GetpGlobalPopupMenu(pwnd);
        if (ppopup && ppopup->fHasMenuBar && ppopup->fIsSysMenu &&
            (ppopup->spwndNotify == pwnd))
        {
            // Yes, we are.
            pmbi->fBarFocused = TRUE;

            if (!idItem) {
                pmbi->fFocused = TRUE;
            } else if (ppopup->ppopupmenuRoot->posSelectedItem == (UINT)idItem - 1) {
                pmbi->fFocused = TRUE;
                UserAssert(ppopup->ppopupmenuRoot);
                pmbi->hwndMenu = HW(ppopup->ppopupmenuRoot->spwndNextPopup);
            }
        }
    }
    else if (idObject == OBJID_CLIENT)
    {
        HMENU hMenu;
        hMenu = (HMENU)xxxSendMessage(pwnd, MN_GETHMENU, 0, 0);
        pMenu = HtoP(hMenu);
        if (!pMenu)
            return FALSE;

        // If we have an item, is it in the valid range?
        if ((idItem < 0) || ((DWORD)idItem > pMenu->cItems))
            return FALSE;

        pmbi->hMenu = hMenu;

        if (!idItem) {
            pmbi->rcBar = pwnd->rcClient;
        } else {
            pItem = pMenu->rgItems + idItem - 1;

            pmbi->rcBar.left = pwnd->rcClient.left + pItem->xItem;
            pmbi->rcBar.top = pwnd->rcClient.top + pItem->yItem;
            pmbi->rcBar.right = pmbi->rcBar.left + pItem->cxItem;
            pmbi->rcBar.bottom = pmbi->rcBar.top + pItem->cyItem;
        }

        /*
         * Are we currently in popup mode with us as one of the popups
         * showing?
         */
        ppopup = ((PMENUWND)pwnd)->ppopupmenu;
        if (ppopup && (ppopup->ppopupmenuRoot == GetpGlobalPopupMenu(pwnd))) {
            pmbi->fBarFocused = TRUE;

            if (!idItem) {
                pmbi->fFocused = TRUE;
            } else if ((UINT)idItem == ppopup->posSelectedItem + 1) {
                pmbi->fFocused = TRUE;
                pmbi->hwndMenu = HW(ppopup->spwndNextPopup);
            }
        }
    } else {
        return FALSE;
    }

    return TRUE;
}