ANSC_STATUS
ScliShoCenNotify
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hExecEnv,
        ULONG                       CenEvent
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PSCLI_SHELL_OBJECT              pMyObject    = (PSCLI_SHELL_OBJECT       )hThisObject;
    PSCLI_SHELL_EXEC_ENV            pScliExecEnv = (PSCLI_SHELL_EXEC_ENV     )hExecEnv;
    PTELNET_CMD_EXECUTION_ENV       pTelnetEnv   = (PTELNET_CMD_EXECUTION_ENV)pScliExecEnv->hTelnetEnv;
    PTELNET_TSC_INTERFACE           pTscIf       = (PTELNET_TSC_INTERFACE    )pTelnetEnv->hTscIf;
    ANSC_HANDLE                     hSrvSession  = pScliExecEnv->hSession;
    PSCLI_SHELL_SESSION_EXEC        pSession;

    pSession    = (PSCLI_SHELL_SESSION_EXEC)pMyObject->GetSession((ANSC_HANDLE)pMyObject, (ULONG)hSrvSession);

    switch ( CenEvent )
    {
        case    SCLI_SHELL_CEN_EVENT_CmdBegin:

                pSession->bServing  = TRUE;

                pTscIf->Notify
                    (
                        pTscIf->hOwnerContext,
                        hSrvSession,
                        TELNET_TSC_EVENT_CmdBegin,
                        (ANSC_HANDLE)NULL
                    );

                break;

        case    SCLI_SHELL_CEN_EVENT_CmdEnd:

                if ( pSession->SessionState == SCLI_SHELL_STATE_LOGGED_IN && !pSession->bWillExit )
                {
                    pTscIf->SendShellPrompt
                        (
                            pTscIf->hOwnerContext,
                            hSrvSession,
                            TRUE
                        );
                }

                pTscIf->Notify
                    (
                        pTscIf->hOwnerContext,
                        hSrvSession,
                        TELNET_TSC_EVENT_CmdEnd,
                        (ANSC_HANDLE)NULL
                    );

                pSession->bServing  = FALSE;

                if ( pSession->bWillExit )
                {
                    returnStatus =
                        pMyObject->RunBuiltInCmd
                            (
                                (ANSC_HANDLE)pMyObject,
                                hSrvSession,
                                (ANSC_HANDLE)pTelnetEnv,
                                SCLI_SHELL_BICODE_Exit
                            );
                }
                else
                {
                    returnStatus =
                        pMyObject->DoBufferedCommands
                            (
                                (ANSC_HANDLE)pMyObject,
                                hSrvSession,
                                hExecEnv
                            );
                }

                break;
    }

    return returnStatus;
}