www.pudn.com > yidong.rar > SendSM.java
package sample;
/* --------------------------------------------------------------------------
Name: SendSM.cpp
Title: CMPP API of ISMG for CMPP 1.2
Package: Send short message sample code for Asiainfo CMPP 1.2 API
Written: 2000/12/20 Asiainfo
Revised:
Synopsis:
Editor: TAB=4
-----------------------------------------------------------------------------*/
import aiismg.jcmppapi30.CMPPAPI;
import java.io.*;
public final class SendSM {
private static final int SEND_MODE_SINGLE = 0;
private static final int SEND_MODE_BATCH = 1;
public static void main( String argv[] )
{
SMArgument pArgs = new SMArgument();
int nOutput = 1;
CMPPAPI pCMPPAPI = new CMPPAPI();
int nRepeat = 0;
int nSendMode = SEND_MODE_SINGLE;
String sArgFile = null;
byte[] sMsgID = new byte[21];
int nMsgLen = 0, n;
pArgs.sMsgCon = null;
if( argv.length < 2 ) {
Usage( );
System.exit( 1 );
}
// get argument
for( n=0; n= argv.length ) {
if( nOutput == 1 ) {
Usage( );
}
System.exit( 1 );
}
sArgFile = argv[n];
} else {
if( nOutput == 1 ) {
Usage( );
}
System.exit( 1 );
}
}
if( sArgFile == null ) {
if( nOutput == 1 )
Usage( );
System.exit( 1 );
}
// read arguments from file
if( ReadArgumentFile( sArgFile, pArgs, nOutput ) != 0 ) {
if( nOutput == 1 ) {
System.out.println( "Fail to read argument from file %s!" +sArgFile );
}
System.exit( 1 );
} else {
if( nOutput == 1 ) {
String sTmp;
System.out.println( "need_reply=" + pArgs.nNeedReply );
System.out.println( "msg_level=" + pArgs.nMsgLevel );
sTmp = new String( pArgs.sServiceID );
System.out.println( "serviceid=" + sTmp );
System.out.println( "msg_format=" + pArgs.nMsgFormat );
sTmp = new String( pArgs.sFeeType );
System.out.println( "fee_type=" + sTmp );
sTmp = new String( pArgs.sFeeCode );
System.out.println( "fee_code=" + sTmp );
sTmp = new String( pArgs.sValidTime );
System.out.println( "valid_time=" + sTmp );
sTmp = new String( pArgs.sAtTime );
System.out.println( "at_time=" + sTmp );
sTmp = new String( pArgs.sSrcTermID );
System.out.println( "src_termid=" + sTmp );
sTmp = new String( pArgs.sDestTermID );
System.out.println( "dest_termid=" + sTmp );
sTmp = new String( pArgs.sFeeTermID );
System.out.println( "fee_termid=" + sTmp );
System.out.println( "feeTermtype=" + pArgs.cFeeTermType );
System.out.println( "destTermType=" + pArgs.cDestTermType );
sTmp = new String( pArgs.sLinkID );
System.out.println( "linkID=" + sTmp );
System.out.println( "dest_termid_file=" + pArgs.sDestTermIDFile );
System.out.println( "msg_file=" + pArgs.sMsgFile );
System.out.println( "msgid_file=" + pArgs.sMsgIDFile );
}
}
// initiate API
if( pCMPPAPI.InitCMPPAPI( "../config/javacmppc.ini" ) != 0 ) {
if( nOutput == 1 ) {
System.out.println( "Fail to call InitCMPPAPI!" );
}
System.exit( 1 );
}
// get message from file
File pMsgFile;
FileInputStream pMsgIn;
try{
pMsgFile = new File( pArgs.sMsgFile );
pMsgIn = new FileInputStream( pArgs.sMsgFile );
/* if( pMsgFile.length() > 160 && pArgs.nMsgFormat == 0 )
nMsgLen = 160;
else if( pMsgFile.length() > 140 && pArgs.nMsgFormat == 15 )
nMsgLen = 140;
else
*/
nMsgLen = (int)pMsgFile.length();
if( nMsgLen == 0 ) {
if( nOutput == 1 )
System.err.println( "Message file is empty: " + pArgs.sMsgFile );
System.exit(1);
}
pArgs.sMsgCon = new byte[nMsgLen];
pMsgIn.read( pArgs.sMsgCon, 0, pArgs.sMsgCon.length );
pMsgIn.close();
// remove the '\n' or '\r' on the tail of short message
if( pArgs.sMsgCon[nMsgLen - 1] == '\n' || pArgs.sMsgCon[nMsgLen - 1] == '\r' ) {
nMsgLen--;
if( pArgs.sMsgCon[nMsgLen - 2] == '\n' || pArgs.sMsgCon[nMsgLen - 2] == '\r' ) {
nMsgLen--;
}
}
} catch( NullPointerException excpt ) {
if( nOutput == 1 )
System.err.println( "Can not get file attr: " + pArgs.sMsgFile );
System.exit(1);
} catch( SecurityException excpt ) {
if( nOutput == 1 )
System.err.println( "Fail to read file " + pArgs.sMsgFile );
System.exit(1);
} catch( FileNotFoundException fnfex ) {
if( nOutput == 1 )
System.err.println( "Error: file " + pArgs.sMsgFile + " not found!" );
System.exit(1);
} catch( IOException ioexpt ) {
if( nOutput == 1 )
System.err.println( "File I/O Error: " + pArgs.sMsgFile );
System.exit(1);
}
for(int r=0;r<=nRepeat;r++)
if( nSendMode == SEND_MODE_SINGLE ) {
String sTmp = new String( pArgs.sMsgCon );
if( nOutput == 1 ) {
System.out.println( "msg_len=" + nMsgLen );
System.out.println( "msg content=" + sTmp );
}
if( pCMPPAPI.CMPPSendSingle( pArgs.nNeedReply, pArgs.nMsgLevel,
pArgs.sServiceID, pArgs.nMsgFormat,
pArgs.sFeeType, pArgs.sFeeCode,
pArgs.sValidTime, pArgs.sAtTime,
pArgs.sSrcTermID, pArgs.sDestTermID,
nMsgLen, pArgs.sMsgCon,
sMsgID, (byte)0, pArgs.sFeeTermID,
(byte)0,(byte)0,pArgs.cFeeTermType,pArgs.cDestTermType,pArgs.sLinkID) != 0 ) {
if( nOutput == 1 ) {
System.out.println( "Fail to call CMPPSendSingle, error=" + pCMPPAPI.GetErrCode() );
}
System.exit( 1 );
} else {
// write msgid and error code to file
FileOutputStream pFileOutput;
// Caculate the string length
int i, nLen;
for( i=0; i < sMsgID.length; i++ )
if( sMsgID[i] == 0 )
break;
for( nLen=0; nLen < pArgs.sDestTermID.length; nLen++ )
if( pArgs.sDestTermID[nLen] == 0 )
break;
try {
pFileOutput = new FileOutputStream( pArgs.sMsgIDFile );
pFileOutput.write( sMsgID, 0, i );
pFileOutput.write( '\t' );
pFileOutput.write( ( Integer.toString( pCMPPAPI.GetErrCode() ) ).getBytes() );
pFileOutput.write( '\t' );
pFileOutput.write(pArgs.sDestTermID,0, nLen );
pFileOutput.write( '\n' );
pFileOutput.close();
} catch( SecurityException excpt ) {
if( nOutput == 1 )
System.err.println( "Fail to create file " + pArgs.sMsgIDFile );
System.exit(1);
} catch( FileNotFoundException nfcpt ) {
if( nOutput == 1 )
System.err.println( "No such file:" + pArgs.sMsgIDFile );
System.exit(1);
} catch( IOException excpt ) {
if( nOutput == 1 )
System.err.println( "Fail to write file " + pArgs.sMsgIDFile );
System.exit(1);
}
}
} else {
if( pCMPPAPI.CMPPSendBatch( pArgs.nNeedReply, pArgs.nMsgLevel,
pArgs.sServiceID, pArgs.nMsgFormat,
pArgs.sFeeType, pArgs.sFeeCode,
pArgs.sValidTime, pArgs.sAtTime,
pArgs.sSrcTermID, pArgs.sDestTermIDFile,
nMsgLen, pArgs.sMsgCon, pArgs.sMsgIDFile, (byte)0, pArgs.sFeeTermID,
(byte)0,(byte)0,pArgs.cFeeTermType,pArgs.cDestTermType,pArgs.sLinkID) != 0 ) {
if( nOutput == 1 ) {
System.out.println( "Fail to call CMPPSendBatch!" );
}
System.exit( 1 );
}
}
System.exit( 0 );
}
public static void Usage( )
{
System.out.println( "Usage: SendSM [-B][-S][-n] <-a argument_file>" );
System.out.println( " -B: send one short message to multiple users" );
System.out.println( " -S: send one short message to single user" );
System.out.println( " -a: argument file" );
System.out.println( " -n: no message output" );
System.out.println( "e.g.: SendSM -S -a sm.arg # send single short message defined in file sm.arg" );
System.out.println( "e.g.: SendSM -B -a sm.arg # send batch short message defined in file sm.arg" );
}
public static int ReadArgumentFile( String sFile, SMArgument pArgs, int nOutput )
{
String sLine;
int n, nLen, m;
FileInputStream pFileStream;
BufferedReader pFileRead;
try{
pFileStream = new FileInputStream( sFile );
} catch( SecurityException excpt ) {
if( nOutput == 1 )
System.err.println( "Fail to read file " + sFile );
return 1;
} catch( FileNotFoundException fnfex ) {
if( nOutput == 1 )
System.err.println( "Error: file " + sFile + " not found!" );
return 1;
}
pFileRead = new BufferedReader( new InputStreamReader( (InputStream)pFileStream ) );
for( n=0; n<17; ++n ) {
try{
sLine = pFileRead.readLine();
if( sLine == null ) {
if( nOutput == 1 ) {
System.out.println( "Fail to read the " + (n+1) +"st parameter in argument file." );
}
pFileStream.close();
return 1;
}
} catch( IOException excpt ) {
if( nOutput == 1 ) {
System.out.println( "Fail to read the " + (n+1) +"st parameter in argument file." );
}
return 1;
}
switch( n )
{
case 0:
pArgs.nNeedReply = Byte.parseByte( sLine );
break;
case 1:
pArgs.nMsgLevel = Byte.parseByte( sLine );
break;
case 2:
if( sLine.length() > 10 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sServiceID, 0, 10 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sServiceID, 0, sLine.length() );
}
break;
case 3:
pArgs.nMsgFormat = Byte.parseByte( sLine );
break;
case 4:
if( sLine.length() > 2 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sFeeType, 0, 2 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sFeeType, 0, sLine.length() );
}
break;
case 5:
if( sLine.length() > 6 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sFeeCode, 0, 6 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sFeeCode, 0, sLine.length() );
}
break;
case 6:
if( sLine.length() > 17 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sValidTime, 0, 17 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sValidTime, 0, sLine.length() );
}
break;
case 7:
if( sLine.length() > 17 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sAtTime, 0, 17 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sAtTime, 0, sLine.length() );
}
break;
case 8:
if( sLine.length() > 21 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sSrcTermID, 0, 21 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sSrcTermID, 0, sLine.length() );
}
break;
case 9:
if( sLine.length() > 32 ) {
System.arraycopy( sLine.getBytes(), 0, pArgs.sDestTermID, 0, 32 );
} else {
System.arraycopy( sLine.getBytes(), 0, pArgs.sDestTermID, 0, sLine.length() );
}
break;
case 10:/* Fee Terminal ID */
System.arraycopy ( sLine.getBytes(), 0, pArgs.sFeeTermID, 0, ((sLine.length()>32)? 32 : sLine.length()) ) ;
break;
case 11:/* Fee Terminal type */
pArgs.cFeeTermType = Byte.parseByte ( sLine );
case 12:/* Dest Terminal type */
pArgs.cDestTermType = Byte.parseByte ( sLine ) ;
case 13:/* LinkID */
System.arraycopy ( sLine.getBytes(), 0, pArgs.sLinkID, 0, ((sLine.length()>20)? 20 : sLine.length()) ) ;
case 14:
pArgs.sDestTermIDFile = sLine;
break;
case 15:
pArgs.sMsgFile = sLine;
break;
case 16:
pArgs.sMsgIDFile = sLine;
break;
}
}
try{
pFileStream.close();
} catch( IOException excpt ) {
System.err.println( "Fail to close file: " + sFile );
}
return 0;
}
}