LInet::CommandCallBack
#include " ltwrappr.h "
virtual L_INT LInet::CommandCallBack(plConnection, uCommand, uCommandID, nError, uParams, pParams, uExtra, pExtra)
/* instance of a remote computer */ | |
CMDTYPE uCommand; |
/* command type */ |
L_UINT uCommandID; |
/* command id */ |
L_INT nError; |
/* status of the received data */ |
L_UINT uParams; |
/* number of parameters */ |
pPARAMETER pParams; |
/* pointer to an array of parameters */ |
L_UINT uExtra; |
/* length */ |
/* pointer to extra data */ |
Notifies a computer that a command has been received. This function is only available in the Internet toolkit.
Parameter |
Description |
plConnection |
Instance of the remote computer from which the command was sent. |
uCommand |
Command received from the remote computer. For a list of possible values, refer to CMDTYPE. |
uCommandID |
Command Id. Each command sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed. |
nError |
Determines whether the command was received properly. If not all the parameters were received properly, then nError will be set to an error code (usually ERROR_TRANSFER_ABORTED). |
uParams |
The number of parameters for this command. |
pParams |
Pointer to an array of PARAMETER structures that contain the parameters for the command. |
uExtra |
Length of any extra data sent with the command. |
pExtra |
Pointer to the extra data sent with the command. |
Returns
SUCCESS |
This function was successful. |
< 1 |
An occurred. Refer to Return Codes. |
Comments
A call to this overridable function is generated when a computer receives a command request from a remote computer.
To process commands, a class must be derived from LInet and this member function must be overridden.
When a command request is received, this function should respond by calling the corresponding response function. For example, if a SendLoadCmd request is received from a remote computer, this function should respond by calling LInet::SendLoadRsp.
Required DLLs and Libraries
LTNET For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
See Also
Example
/*Below is a sample CommandCallBack function that can be used to process various commands sent to a server*/
//The CommandCallBack() is processed on the server
//To process the commands sent to the computer, you must:
//1. Derive a class from LInet
//2. Override the CommandCallBack member function
//
//Assume that
//1. m_Inet is an object of the class CMyNet (derived from LInet).
//2. the network as been started (LInet::StartUp())
//3. a connection has been established with a remote client
//4. UpdateStatusbar() displays a message in the status bar
//5. m_BitmapList maintains a list of LBitmapWindow objects
L_INT CMyNet::CommandCallBack(LInet L_FAR * plConnection,
CMDTYPE uCommand,
L_UINT uCommandID,
L_INT nError,
L_UINT uParams,
pPARAMETER pParams,
L_UINT uExtra,
L_CHAR L_FAR*pExtra)
{
L_INT nStatus = ERROR_FEATURE_NOT_SUPPORTED;
L_UINT uBitmapID = (L_UINT)-1;
CString strMsg;
strMsg.Format(TEXT("%s, id=%d, nError=%d, uParams=%d%s received"),
GetCommandString(uCommand),
uCommandID,
nError,
uParams,
uExtra ? TEXT(", uExtra") : TEXT(""));
UpdateStatusbar(strMsg, 0);
CMainFrame *pMain;
pMain = GETMAINFRAME;
if(nError != SUCCESS)
nStatus = ERROR_TRANSFER_ABORTED;
else
switch(uCommand)
{
case CMD_LOAD:
{
L_INT nIndex;
nIndex = m_BitmapList.AddBitmap (
pParams[0].pValue, //file name
pParams[1].iValue, //nBitsPerPixel
pParams[2].iValue //nOrder
);
if (nIndex >=0)
{
nStatus = SUCCESS;
pMain->m_uBitmapID = uBitmapID = nIndex;
}
return pMain->m_Inet.SendLoadRsp (plConnection, uCommandID, uBitmapID, 0, NULL, nStatus);
}
break;
case CMD_CREATE_WIN:
{
pMain->m_bCreateBitmapWindow = FALSE; //Do not allocate LBitmapWindow
pMain->m_pInetRemoteServer = plConnection;
theApp.OnFileNew ();
pMain->m_bCreateBitmapWindow = TRUE;
pMain->m_pInetRemoteServer = NULL;
nStatus = SUCCESS;
// Get the active MDI child window.CMDIChildWnd
CMDIChildWnd *pChild = (CMDIChildWnd *) pMain->GetActiveFrame();
CView *pView = pChild->GetActiveView();
// Get the active view attached to the active MDI child window.
pChild->SetWindowPos(NULL, 0, 0, pParams[5].iValue,pParams[6].iValue, SWP_NOOWNERZORDER + SWP_NOMOVE );
pMain->m_uWindowID = (L_UINT)pView->m_hWnd;
return pMain->m_Inet.SendCreateWinRsp (
plConnection,
uCommandID,
(L_UINT)pView->m_hWnd,
0,
NULL,
SUCCESS);
}
break;
case CMD_ATTACH_BITMAP:
{
L_UINT32 uBitmapID = pParams[0].uiValue;
HWND uWindowID = (HWND)pParams[1].uiValue;
//pParams[0] uBitmapID
//pParams[1] uWindowID
//Need to attach bitmap to BitmapWindow
if (IsWndValid((HWND)uWindowID))
{
LBitmapWindow *pBitmapWindow;
pBitmapWindow = m_BitmapList[uBitmapID];
if (pBitmapWindow != NULL)
{
pBitmapWindow-> SetWndHandle(uWindowID);
CNetDoc *pNetDoc = (CNetDoc*)GetDocFromHWnd((HWND)uWindowID);
if (pNetDoc != NULL)
{
pNetDoc->m_pBitmapWindow = pBitmapWindow;
pNetDoc->m_bBitmapWindowInList = TRUE;
}
}
}
return pMain->m_Inet.SendAttachBitmapRsp (plConnection, uCommandID, 0, NULL, nStatus);
}
break;
case CMD_FLIP:
{
uBitmapID = pParams->uiValue;
//Make sure bitmap ID is valid
LBitmapWindow *pBitmapWindow = m_BitmapList[uBitmapID];
if (pBitmapWindow != NULL)
{
nStatus = pBitmapWindow->Flip();
}
}
break;
case CMD_SAVE:
{
uBitmapID = pParams[1].uiValue;
//Make sure bitmap ID is valid
LBitmapWindow *pBitmapWindow = m_BitmapList[uBitmapID];
//pParams[0] file name
//pParams[1] bitmap id
//pParams[2] nFormat
//pParams[3] nBitsPerPixel
//pparams[4] nQFactor
//pParams[5] uFlags
if (pBitmapWindow != NULL)
{
L_INT nRet;
nRet = pBitmapWindow->Save(
pParams[0].pValue,
pParams[2].iValue,
pParams[3].iValue,
pParams[4].iValue,
pParams[5].iValue
);
if (nRet != SUCCESS)
nStatus = FAILURE;
}
}
return pMain->m_Inet.SendSaveRsp (plConnection, uCommandID,0, NULL, nStatus);
break;
case CMD_GET:
{
L_UINT uBitmapID = pParams->uiValue;
//is it a valid bitmap ID?
LBitmapWindow *pBitmapWindow = m_BitmapList[uBitmapID];
if (pBitmapWindow != NULL)
{
//nStatus = m_Inet.SendBitmap (pBitmapWindow);
nStatus = pMain->m_Inet.SendBitmap (plConnection, pBitmapWindow->GetHandle(), FILE_CMP, 24, QS, NULL);
}
}
break;
case CMD_SIZE_WIN:
{
L_INT nStatus = SUCCESS;
L_INT nRet;
HWND uWindowID = (HWND)pParams[0].uiValue;
L_UINT uLeft = pParams[1].uiValue;
L_UINT uTop = pParams[2].uiValue;
L_UINT uWidth = pParams[3].uiValue;
L_UINT uHeight = pParams[4].uiValue;
if (IsWndValid((HWND)uWindowID))
{
nRet = ::SetWindowPos(
::GetParent((HWND)uWindowID),
NULL,
uLeft,
uTop,
uWidth,
uHeight,
SWP_NOOWNERZORDER
);
if (nRet == 0)
nStatus = FAILURE;
}
else
{
nStatus = ERROR_INV_PARAMETER;
}
return pMain->m_Inet.SendSizeWinRsp (plConnection, uCommandID, 0, NULL, nStatus);
}
break;
case CMD_SHOW_WIN:
{
L_INT nStatus = SUCCESS;
L_INT nRet;
HWND uWindowID = (HWND)pParams[0].uiValue;
L_INT nCmdShow = pParams[1].iValue;
if (IsWndValid((HWND)uWindowID))
{
nRet = ::ShowWindow(
::GetParent((HWND)uWindowID),
nCmdShow
);
if (nRet == 0)
nStatus = FAILURE;
}
else
{
nStatus = ERROR_INV_PARAMETER;
}
return pMain->m_Inet.SendShowWinRsp (plConnection, uCommandID, 0, NULL, nStatus);
}
break;
case CMD_CLOSE_WIN:
{
L_INT nStatus = SUCCESS;
HWND uWindowID = (HWND)pParams[0].uiValue;
if (!CloseDocument((HWND)uWindowID))
{
nStatus = ERROR_INV_PARAMETER;
}
return pMain->m_Inet.SendCloseWinRsp (plConnection, uCommandID, 0, NULL, nStatus);
}
break;
case CMD_FREE_BITMAP:
{
L_INT nStatus = SUCCESS;
L_UINT uBitmapID = pParams[0].uiValue;
nStatus = m_BitmapList.DeleteBitmap (uBitmapID);
pMain->UpdateWindow();
return pMain->m_Inet.SendFreeBitmapRsp (plConnection, uCommandID, 0, NULL, nStatus);
}
break;
case CMD_SET_RECT:
{
L_INT nStatus = FAILURE;
uBitmapID = pParams->uiValue;
CNetDoc *pNetDoc = (CNetDoc*)GetDocFromHWnd(HWND(pParams[0].uiValue));
if (pNetDoc != NULL)
{
RECT rcRect;
rcRect.left = pParams[2].iValue;
rcRect.top = pParams[3].iValue;
rcRect.right = rcRect.left + pParams[4].iValue;
rcRect.bottom = rcRect.top + pParams[5].iValue;
pNetDoc->m_pBitmapWindow->EnableCallBack(TRUE);
nStatus = pNetDoc->m_pBitmapWindow->ZoomToRect(rcRect);
}
return pMain->m_Inet.SendSetRectRsp (plConnection, uCommandID,0,0,nStatus);
}
}
return pMain->m_Inet.SendRsp (
plConnection,
uCommand,
uCommandID,
NULL,
nStatus
);
}