cservice.java
来自「SMSLib一个很有用的程序,有服务平台和收发平台」· Java 代码 · 共 647 行 · 第 1/2 页
JAVA
647 行
else throw new NotConnectedException();
}
public void sendMessage(COutgoingMessage message) throws Exception
{
LinkedList messageList;
messageList = new LinkedList();
messageList.add(message);
sendMessage(messageList);
}
public void sendMessage(LinkedList messageList) throws Exception
{
LinkedList outList;
COutgoingMessage message;
int i, j, refNo;
String pdu;
if (getConnected())
{
if (phoneBook.isLoaded()) outList = phoneBook.expandPhoneBookEntries(messageList);
else outList = messageList;
atHandler.keepGsmLinkOpen();
for (i = 0; i < outList.size(); i ++)
{
message = (COutgoingMessage) outList.get(i);
if (!message.isBig())
{
pdu = message.getPDU(smscNumber, 0, 0);
j = pdu.length();
j /= 2;
if (smscNumber == null) ;
else if (smscNumber.length() == 0) j --;
else
{
j -= ((smscNumber.length() - 1) / 2);
j -= 2;
}
refNo = atHandler.sendMessage(j, pdu);
if (refNo != -1)
{
message.setRefNo(refNo);
message.setDispatchDate(new Date());
deviceInfo.getStatistics().incTotalOut();
}
else message.setDispatchDate(null);
}
else
{
for (int partNo = 1; partNo <= message.getNoOfParts(); partNo ++)
{
pdu = message.getPDU(smscNumber, outMpRefNo, partNo);
j = pdu.length();
j /= 2;
if (smscNumber == null) ;
else if (smscNumber.length() == 0) j --;
else
{
j -= ((smscNumber.length() - 1) / 2);
j -= 2;
}
refNo = atHandler.sendMessage(j, pdu);
if (refNo != -1)
{
message.setRefNo(refNo);
message.setDispatchDate(new Date());
deviceInfo.getStatistics().incTotalOut();
}
else message.setDispatchDate(null);
}
outMpRefNo = (outMpRefNo + 1) % 65536;
}
}
}
else throw new NotConnectedException();
}
public void deleteMessage(int memIndex) throws Exception
{
if (getConnected()) atHandler.deleteMessage(memIndex);
else throw new NotConnectedException();
}
public void deleteMessage(CIncomingMessage message) throws Exception
{
if (message.getMemIndex() > 0) deleteMessage(message.getMemIndex());
else
if ((message.getMemIndex() == -1) && (message.getMpMemIndex().length() != 0))
{
StringTokenizer tokens = new StringTokenizer(message.getMpMemIndex(), ",");
while (tokens.hasMoreTokens()) deleteMessage(Integer.parseInt(tokens.nextToken()));
}
}
public boolean setStorageSIM() throws Exception { if (getConnected()) return atHandler.setStorageSIM(); else throw new NotConnectedException(); }
public boolean setStorageMEM() throws Exception { if (getConnected()) return atHandler.setStorageMEM(); else throw new NotConnectedException(); }
public void refreshDeviceInfo() throws Exception
{
if (getConnected())
{
if (deviceInfo.manufacturer.length() == 0) deviceInfo.manufacturer = getManufacturer();
if (deviceInfo.model.length() == 0) deviceInfo.model = getModel();
if (deviceInfo.serialNo.length() == 0) deviceInfo.serialNo = getSerialNo();
if (deviceInfo.imsi.length() == 0) deviceInfo.imsi = getImsi();
if (deviceInfo.swVersion.length() == 0) deviceInfo.swVersion = getSwVersion();
deviceInfo.batteryLevel = getBatteryLevel();
deviceInfo.signalLevel = getSignalLevel();
}
else throw new NotConnectedException();
}
private String getManufacturer() throws Exception
{
String response;
response = atHandler.getManufacturer();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return VALUE_NOT_REPORTED;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
return response;
}
private String getModel() throws Exception
{
String response;
response = atHandler.getModel();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return VALUE_NOT_REPORTED;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
return response;
}
private String getSerialNo() throws Exception
{
String response;
response = atHandler.getSerialNo();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return VALUE_NOT_REPORTED;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
return response;
}
private String getImsi() throws Exception
{
return "** MASKED **";
// IMSI is masked on purpose.
// Uncomment following code for IMSI to be reported.
/*
String response;
response = atHandler.getImsi();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return VALUE_NOT_REPORTED;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
return response;
*/
}
private String getSwVersion() throws Exception
{
String response;
response = atHandler.getSwVersion();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return VALUE_NOT_REPORTED;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
return response;
}
private int getBatteryLevel() throws Exception
{
String response;
StringTokenizer tokens;
response = atHandler.getBatteryLevel();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return 0;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
tokens = new StringTokenizer(response, ":,");
tokens.nextToken(); tokens.nextToken();
return Integer.parseInt(tokens.nextToken());
}
private int getSignalLevel() throws Exception
{
String response;
StringTokenizer tokens;
response = atHandler.getSignalLevel();
if (response.matches("\\s*[\\p{ASCII}]*\\s+ERROR(?:: \\d+)?\\s+")) return 0;
response = response.replaceAll("\\s+OK\\s+", "");
response = response.replaceAll("\\s+", "");
tokens = new StringTokenizer(response, ":,");
tokens.nextToken();
return (Integer.parseInt(tokens.nextToken().trim()) * 100 / 31);
}
private boolean isIncomingMessage(String pdu)
{
int index, i;
i = Integer.parseInt(pdu.substring(0, 2), 16);
index = (i + 1) * 2;
i = Integer.parseInt(pdu.substring(index, index + 2), 16);
if ((i & 0x03) == 0) return true;
else return false;
}
private boolean isStatusReportMessage(String pdu)
{
String str;
int index, i;
i = Integer.parseInt(pdu.substring(0, 2), 16);
index = (i + 1) * 2;
i = Integer.parseInt(pdu.substring(index, index + 2), 16);
if ((i & 0x02) == 2) return true;
else return false;
}
public boolean received(CIncomingMessage message)
{
return false;
}
private class CKeepAliveThread extends Thread
{
private boolean stopFlag;
private boolean stopped;
public CKeepAliveThread()
{
stopFlag = false;
stopped = false;
}
public void killMe() { stopFlag = true; }
public boolean killed() { return stopped; }
public void run()
{
while (!stopFlag)
{
try { sleep(keepAliveInterval); } catch (Exception e) {}
if (stopFlag) break;
if (getConnected()) try { atHandler.isAlive(); } catch (Exception e) {}
}
stopped = true;
}
}
private class CReceiveThread extends Thread
{
private boolean stopFlag;
private boolean stopped;
public CReceiveThread()
{
stopFlag = false;
stopped = false;
}
public void killMe() { stopFlag = true; }
public boolean killed() { return stopped; }
public void run()
{
LinkedList messageList;
messageList = new LinkedList();
while (!stopFlag)
{
int state = newMsgMonitor.waitEvent(asyncPollInterval);
if (stopFlag) break;
if (getConnected() && (receiveMode == RECEIVE_MODE_ASYNC_CNMI || receiveMode == RECEIVE_MODE_ASYNC_POLL))
{
try
{
if (state == CNewMsgMonitor.DATA &&
!atHandler.dataAvailable() &&
newMsgMonitor.getState() != CNewMsgMonitor.CMTI) continue;
newMsgMonitor.reset();
messageList.clear();
readMessages(messageList, asyncRecvClass);
for (int i = 0; i < messageList.size(); i ++)
{
CIncomingMessage message = (CIncomingMessage) messageList.get(i);
if (getMessageHandler() == null)
{
if (received(message)) deleteMessage(message);
}
else
{
if (getMessageHandler() != null && getMessageHandler().received(CService.this, message)) deleteMessage(message);
}
}
}
catch (Exception e) { e.printStackTrace(); }
}
}
stopped = true;
}
}
public static void main(String[] args)
{
System.out.println("SMSLib API for Java.");
System.out.println(" Java API for sending / receiving SMS messages via GSM modem.");
System.out.println(" This software is distributed under the LGPL license.");
System.out.println("");
System.out.println("Copyright (C) 2002-2006, Thanasis Delenikas, Athens / GREECE.");
System.out.println("Visit http://www.smslib.org for latest information.\n");
System.out.println(_name + " v" + _version + " { " + _reldate + " }");
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?