/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* sendmsg.cxx This file contains the SEND_MSG_USER_DIALOG class definition viz. used to send a message from the users dialog and SEND_MSG_SERVER_DIALOG viz used to send a message to all the users connected with the server. The 2 dialogs SEND_MSG_USER_DIALOG and SEND_MSG_SERVER_DIALOG are very similar and can easily be subclassed. The amount of code saved would be minimal if anything at all. Therefore this hs not been done. FILE HISTORY: NarenG 16-Oct-1992 Folded MSG_DIALOG_BASE and SEND_MESSAGE_DIALOG into one. */ extern "C" { #include #include #include } #define INCL_WINDOWS #define INCL_WINDOWS_GDI #define INCL_DOSERRORS #define INCL_NETERRORS #define INCL_NETCONS #define INCL_NETLIB #include #define INCL_BLT_DIALOG #define INCL_BLT_CONTROL #define INCL_BLT_MSGPOPUP #include #if defined(DEBUG) static const CHAR szFileName[] = __FILE__; #define _FILENAME_DEFINED_ONCE szFileName #endif // DEBUG #include extern "C" { #include #include } #include #include /******************************************************************* NAME: SEND_MSG_USER_DIALOG::SEND_MSG_USER_DIALOG SYNOPSIS: Constructor for AFP Manager Send Message Dialog ENTRY: Expects valid HWND for hDlg Must have server and user selection EXIT: Usual construction stuff, slt set to contain server of current focus. HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ SEND_MSG_USER_DIALOG::SEND_MSG_USER_DIALOG( HWND hWndOwner, AFP_SERVER_HANDLE hServer, const TCHAR * pszServerName, const TCHAR * pszUserName, DWORD dwSessionId ) : DIALOG_WINDOW( MAKEINTRESOURCE( IDD_SEND_MSG_USER_DIALOG ), hWndOwner ), _sltServerName( this, IDSM_DT_SERVER_NAME ), _sltUserName( this, IDSM_DT_USER_NAME ), _rgRecipients( this, IDSM_RB_SINGLE_USER, 2, IDSM_RB_SINGLE_USER ), _mleTextMsg( this, IDSM_ET_MESSAGE, AFP_MESSAGE_LEN ), _hServer( hServer ), _dwSessionId( dwSessionId ) { // // Did everything construct properly ? // if ( QueryError() != NERR_Success ) return; APIERR err; if ( (( err = _sltServerName.QueryError() ) != NERR_Success ) || (( err = _sltUserName.QueryError() ) != NERR_Success ) || (( err = _rgRecipients.QueryError() ) != NERR_Success ) || (( err = _mleTextMsg.QueryError() ) != NERR_Success ) ) { ReportError( err ); return; } // // Must have a users and server selection // UIASSERT(pszServerName != NULL) ; UIASSERT(pszUserName != NULL) ; // // Set the server name after removing the backslashes // ALIAS_STR nlsServerName( pszServerName ); UIASSERT( nlsServerName.QueryError() == NERR_Success ); ISTR istr( nlsServerName ); // // Skip the backslashes. // istr += 2; ALIAS_STR nlsWithoutPrefix( nlsServerName.QueryPch( istr ) ); UIASSERT( nlsWithoutPrefix.QueryError() == NERR_Success ); _sltServerName.SetText( nlsWithoutPrefix ); _sltServerName.Enable( TRUE ); // // Set the selected user's name // _sltUserName.SetText( pszUserName ); _sltUserName.Enable( TRUE ); // // Direct the message edit control not to add end-of-line // character from wordwrapped text lines. // _mleTextMsg.SetFmtLines(FALSE); } /******************************************************************* NAME: SEND_MSG_USER_DIALOG::~SEND_MSG_USER_DIALOG SYNOPSIS: this destructor does nothing HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ SEND_MSG_USER_DIALOG::~SEND_MSG_USER_DIALOG() { // // This space intentionally left blank // } /******************************************************************* NAME: SEND_MSG_USER_DIALOG::QueryHelpContext SYNOPSIS: Query help text for SEND_MSG_USER_DIALOG HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ ULONG SEND_MSG_USER_DIALOG::QueryHelpContext( void ) { return HC_SEND_MSG_USER_DIALOG; } /******************************************************************* NAME: SEND_MSG_USER_DIALOG::OnOK SYNOPSIS: Replaces the OnOK in DIALOG_WINDOW. It gets the text from the MLE and sends it. HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ BOOL SEND_MSG_USER_DIALOG::OnOK() { // // Set cursor to hour glass. // AUTO_CURSOR AutoCursor; AFP_MESSAGE_INFO AfpMsg; // // Find out whom to send the message to. // AfpMsg.afpmsg_session_id = ( _rgRecipients.QuerySelection() == IDSM_RB_ALL_USERS ) ? 0 : _dwSessionId; // // Attempt to send the message // UINT cb = _mleTextMsg.QueryTextSize(); // // Was there any text ? // if ( cb <= sizeof(TCHAR) ) // always has a terminating NULL { ::MsgPopup( this, IDS_NEED_TEXT_TO_SEND ); _mleTextMsg.ClaimFocus(); return(TRUE); } NLS_STR nlsMsgText( cb ); APIERR err; if ( (( err = nlsMsgText.QueryError() ) != NERR_Success ) || (( err = _mleTextMsg.QueryText( &nlsMsgText ) ) != NERR_Success ) ) { ::MsgPopup( this, err ); return(FALSE); } // MSKK HitoshiT modified to handle DBCS 94/09/01 #ifdef DBCS UNICODE_STRING unistr; unistr.Length = nlsMsgText.QueryTextLength() * sizeof(WCHAR) ; unistr.MaximumLength = unistr.Length ; unistr.Buffer = (WCHAR *)nlsMsgText.QueryPch() ; if ( RtlUnicodeStringToOemSize( &unistr ) > AFP_MESSAGE_LEN ) #else if ( nlsMsgText.QueryTextLength() > AFP_MESSAGE_LEN ) #endif { ::MsgPopup( this, IDS_MESSAGE_TOO_LONG ); _mleTextMsg.ClaimFocus(); _mleTextMsg.SelectString(); return(FALSE); } AfpMsg.afpmsg_text = (LPWSTR)(nlsMsgText.QueryPch()); err = AfpAdminMessageSend( _hServer, &AfpMsg ); switch( err ) { case AFPERR_InvalidId: ::MsgPopup( this, IDS_SESSION_DELETED ); Dismiss( FALSE ); break; case NO_ERROR: ::MsgPopup( this, IDS_MESSAGE_SENT, MPSEV_INFO ); Dismiss( TRUE ); break; case AFPERR_InvalidSessionType: if ( _rgRecipients.QuerySelection() == IDSM_RB_ALL_USERS ) ::MsgPopup( this, AFPERR_TO_STRINGID( err ) ); else ::MsgPopup( this, IDS_NOT_RECEIVED ); Dismiss( FALSE ); break; default: ::MsgPopup( this, AFPERR_TO_STRINGID( err ) ); Dismiss( FALSE ); break; } return(TRUE); } /******************************************************************* NAME: SEND_MSG_SERVER_DIALOG::SEND_MSG_SERVER_DIALOG SYNOPSIS: Constructor for AFP Manager Send Message Dialog ENTRY: Expects valid HWND for hDlg Must have server selection EXIT: Usual construction stuff, slt set to contain server of current focus. HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ SEND_MSG_SERVER_DIALOG::SEND_MSG_SERVER_DIALOG( HWND hWndOwner, AFP_SERVER_HANDLE hServer, const TCHAR * pszServerName ) : DIALOG_WINDOW( MAKEINTRESOURCE( IDD_SEND_MSG_SERVER_DIALOG ), hWndOwner ), _sltServerName( this, IDSD_DT_SERVER_NAME ), _mleTextMsg( this, IDSD_ET_MESSAGE, AFP_MESSAGE_LEN ), _hServer( hServer ) { // // Did everything construct properly ? // if ( QueryError() != NERR_Success ) return; APIERR err; if ( (( err = _sltServerName.QueryError() ) != NERR_Success ) || (( err = _mleTextMsg.QueryError() ) != NERR_Success ) ) { ReportError( err ); return; } // // Must have a users and server selection // UIASSERT(pszServerName != NULL) ; // // Set the server name after removing the backslashes // ALIAS_STR nlsServerName( pszServerName ); UIASSERT( nlsServerName.QueryError() == NERR_Success ); ISTR istr( nlsServerName ); // // Skip the backslashes. // istr += 2; ALIAS_STR nlsWithoutPrefix( nlsServerName.QueryPch( istr ) ); UIASSERT( nlsWithoutPrefix.QueryError() == NERR_Success ); _sltServerName.SetText( nlsWithoutPrefix ); _sltServerName.Enable( TRUE ); // // Direct the message edit control not to add end-of-line // character from wordwrapped text lines. // _mleTextMsg.SetFmtLines(FALSE); } /******************************************************************* NAME: SEND_MSG_SERVER_DIALOG::~SEND_MSG_SERVER_DIALOG SYNOPSIS: this destructor does nothing HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ SEND_MSG_SERVER_DIALOG::~SEND_MSG_SERVER_DIALOG() { // // This space intentionally left blank // } /******************************************************************* NAME: SEND_MSG_SERVER_DIALOG::QueryHelpContext SYNOPSIS: Query help text for SEND_MSG_SERVER_DIALOG HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ ULONG SEND_MSG_SERVER_DIALOG::QueryHelpContext( void ) { return HC_SEND_MSG_SERVER_DIALOG; } /******************************************************************* NAME: SEND_MSG_SERVER_DIALOG::OnOK SYNOPSIS: Replaces the OnOK in DIALOG_WINDOW. It gets the text from the MLE and sends it. HISTORY: NarenG 16-Oct-1992 Created ********************************************************************/ BOOL SEND_MSG_SERVER_DIALOG::OnOK() { // // Set cursor to hour glass. // AUTO_CURSOR AutoCursor; AFP_MESSAGE_INFO AfpMsg; // // Send a message to all the users. // AfpMsg.afpmsg_session_id = 0; // // Attempt to send the message // UINT cb = _mleTextMsg.QueryTextSize(); // // Was there any text ? // if ( cb <= sizeof(TCHAR) ) // always has a terminating NULL { ::MsgPopup( this, IDS_NEED_TEXT_TO_SEND ); _mleTextMsg.ClaimFocus(); return(FALSE); } NLS_STR nlsMsgText( cb ); APIERR err; if ( (( err = nlsMsgText.QueryError() ) != NERR_Success ) || (( err = _mleTextMsg.QueryText( &nlsMsgText ) ) != NERR_Success ) ) { ::MsgPopup( this, err ); return(FALSE); } // MSKK HitoshiT modified to handle DBCS 94/09/01 #ifdef DBCS UNICODE_STRING unistr; unistr.Length = nlsMsgText.QueryTextLength() * sizeof(WCHAR) ; unistr.MaximumLength = unistr.Length ; unistr.Buffer = (WCHAR *)nlsMsgText.QueryPch() ; if ( RtlUnicodeStringToOemSize( &unistr ) > AFP_MESSAGE_LEN ) #else if ( nlsMsgText.QueryTextLength() > AFP_MESSAGE_LEN ) #endif { ::MsgPopup( this, IDS_MESSAGE_TOO_LONG ); _mleTextMsg.ClaimFocus(); _mleTextMsg.SelectString(); return(FALSE); } AfpMsg.afpmsg_text = (LPWSTR)(nlsMsgText.QueryPch()); DWORD error = AfpAdminMessageSend( _hServer, &AfpMsg ); if ( error != NO_ERROR ) { ::MsgPopup( this, AFPERR_TO_STRINGID(error) ); Dismiss( FALSE ); } else { ::MsgPopup( this, IDS_MESSAGE_SENT, MPSEV_INFO ); Dismiss( TRUE ); } return(TRUE); }