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 + -
显示快捷键?