📄 cmainthread.java
字号:
}
catch (Exception e)
{
e.printStackTrace();
}
if (database.isOpen()) try
{
database.checkForOutgoingMessages();
}
catch (Exception e)
{
e.printStackTrace();
}
if (mainWindow != null)
{
mainWindow.setTrafficIn(service.getDeviceInfo().getStatistics().getTotalIn());
mainWindow.setTrafficOut(service.getDeviceInfo().getStatistics().getTotalOut());
}
else
{
System.out.println(CConstants.LABEL_TRAFFIC + " " + CConstants.LABEL_TRAFFIC_IN + service.getDeviceInfo().getStatistics().getTotalIn() + " "
+ CConstants.LABEL_TRAFFIC_OUT + service.getDeviceInfo().getStatistics().getTotalOut());
}
if (mainWindow != null) mainWindow.setStatusText(CConstants.STATUS_IDLE);
else System.out.println(CConstants.LABEL_STATUS + CConstants.STATUS_IDLE);
}
catch (Exception e)
{
disconnect(false);
}
}
}
}
}
disconnect(false);
exitFinished = true;
}
public void exitRequest()
{
exitRequest = true;
interrupt();
}
public boolean exitFinished()
{
return exitFinished;
}
protected void sendMessage(COutgoingMessage message) throws Exception
{
service.sendMessage(message);
settings.getGeneralSettings().rawOutLog(message);
database.saveSentMessage(message);
if (mainWindow != null)
{
mainWindow.setOutTo(message.getRecipient());
mainWindow.setOutDate(message.getDispatchDate().toString());
mainWindow.setOutText(message.getText());
}
else
{
System.out.println(CConstants.TEXT_OUTMSG);
System.out.println("\t" + CConstants.LABEL_OUTGOING_TO + message.getRecipient());
System.out.println("\t" + CConstants.LABEL_OUTGOING_DATE + message.getDate());
System.out.println("\t" + CConstants.LABEL_OUTGOING_TEXT + message.getText());
}
}
private synchronized void processStoredMessages() throws Exception
{
LinkedList messageList;
int batchLimit;
batchLimit = settings.getPhoneSettings().getBatchIncoming();
messageList = new LinkedList();
service.readMessages(messageList, CIncomingMessage.MessageClass.All);
for (int i = 0; i < messageList.size(); i++)
{
if ((i + 1) > batchLimit) break;
CIncomingMessage message = (CIncomingMessage) messageList.get(i);
if ((processMessage(message)) && (settings.getPhoneSettings().getDeleteAfterProcessing())) service.deleteMessage(message);
}
}
private void saveToXmlInQueue(CIncomingMessage message) throws Exception
{
File xmlFile;
PrintWriter out;
xmlFile = File.createTempFile("Recv", ".xml", new File(settings.getPhoneSettings().getXmlInQueue()));
out = new PrintWriter(new FileWriter(xmlFile.getCanonicalPath()));
out.println("<?xml version='1.0' encoding='iso-8859-7'?>");
out.println("<message>");
out.println(" <originator>" + message.getOriginator() + "</originator>");
out.println(" <date>" + textDate(message.getDate(), true) + "</date>");
out.println(" <text> <![CDATA[" + message.getText() + "]]> </text>");
out.println("</message>");
out.close();
}
private void saveToXmlOutQueue(CIncomingMessage message) throws Exception
{
File xmlFile;
PrintWriter out;
xmlFile = File.createTempFile("Fwd", ".xml", new File(settings.getPhoneSettings().getXmlOutQueue()));
out = new PrintWriter(new FileWriter(xmlFile.getCanonicalPath()));
out.println("<?xml version='1.0' encoding='iso-8859-7'?>");
out.println("<message>");
out.println(" <recipient>" + settings.getPhoneSettings().getForwardNumber() + "</recipient>");
out.println(" <text> <![CDATA[FW:" + message.getOriginator() + ": " + message.getText() + "]]> </text>");
out.println("</message>");
out.close();
}
private String textDate(java.util.Date date, boolean includeTime)
{
String dateStr = "";
Calendar calendar = Calendar.getInstance();
String day, month, year, hour, min, sec;
if (date == null) return "* N/A *";
calendar.setTime(date);
day = "" + calendar.get(Calendar.DAY_OF_MONTH);
if (day.length() != 2) day = "0" + day;
month = "" + (calendar.get(Calendar.MONTH) + 1);
if (month.length() != 2) month = "0" + month;
year = "" + calendar.get(Calendar.YEAR);
hour = "" + calendar.get(Calendar.HOUR_OF_DAY);
if (hour.length() != 2) hour = "0" + hour;
min = "" + calendar.get(Calendar.MINUTE);
if (min.length() != 2) min = "0" + min;
sec = "" + calendar.get(Calendar.SECOND);
if (sec.length() != 2) sec = "0" + sec;
dateStr = year + "/" + month + "/" + day;
if (includeTime) dateStr += " " + hour + ":" + min + ":" + sec;
return dateStr;
}
@SuppressWarnings("unchecked")
private void checkXmlOutQueue() throws Exception
{
COutgoingMessage message;
LinkedList messageList;
File outDir;
File[] files;
int batchLimit;
batchLimit = settings.getPhoneSettings().getBatchOutgoing();
outDir = new File(settings.getPhoneSettings().getXmlOutQueue());
files = outDir.listFiles(new CXmlInFilter());
if (files.length > 0)
{
messageList = new LinkedList();
for (int i = 0; i < files.length; i++)
{
if ((i + 1) > batchLimit) break;
message = new COutgoingMessage();
try
{
parseXmlMessageFile(message, files[i].toString());
}
catch (Exception e)
{
e.printStackTrace();
message = null;
}
if (message != null)
{
message.setId(files[i].toString());
if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("7bit")) message.setMessageEncoding(CMessage.MessageEncoding.Enc7Bit);
else if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("8bit")) message.setMessageEncoding(CMessage.MessageEncoding.Enc8Bit);
else if (settings.getPhoneSettings().getMessageEncoding().equalsIgnoreCase("unicode")) message.setMessageEncoding(CMessage.MessageEncoding.EncUcs2);
else message.setMessageEncoding(CMessage.MessageEncoding.Enc7Bit);
messageList.add(message);
}
}
service.sendMessage(messageList);
for (int i = 0; i < messageList.size(); i++)
{
message = (COutgoingMessage) messageList.get(i);
if (message.getDispatchDate() != null)
{
settings.getGeneralSettings().rawOutLog(message);
if (mainWindow != null)
{
mainWindow.setOutTo(message.getRecipient());
mainWindow.setOutDate(message.getDispatchDate().toString());
mainWindow.setOutText(message.getText());
}
else
{
System.out.println(CConstants.TEXT_OUTMSG);
System.out.println("\t" + CConstants.LABEL_OUTGOING_TO + message.getRecipient());
System.out.println("\t" + CConstants.LABEL_OUTGOING_DATE + message.getDate());
System.out.println("\t" + CConstants.LABEL_OUTGOING_TEXT + message.getText());
}
File file = new File(message.getId());
file.delete();
}
}
}
}
private void parseXmlMessageFile(COutgoingMessage message, String file) throws Exception
{
SAXParserFactory factory;
SAXParser parser;
CXMLMessageParser myParser;
factory = SAXParserFactory.newInstance();
parser = factory.newSAXParser();
myParser = new CXMLMessageParser();
myParser.setMessage(message);
parser.parse(new File(file), myParser);
}
static class CXmlInFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
return name.endsWith(".xml");
}
}
static class CXMLMessageParser extends DefaultHandler
{
String level = "";
String info = "";
COutgoingMessage message = null;
public void setMessage(COutgoingMessage message)
{
this.message = message;
}
public void startElement(String uri, String lName, String qName, Attributes attrs) throws SAXException
{
level = level + "/" + qName;
info = "";
}
public void endElement(String uri, String lName, String qName) throws SAXException
{
if (level.equalsIgnoreCase("/message/recipient")) message.setRecipient(info.trim());
if (level.equalsIgnoreCase("/message/text")) message.setText(info.trim());
if (level.equalsIgnoreCase("/message/validity")) message.setValidityPeriod(Integer.parseInt(info.trim()));
if (level.equalsIgnoreCase("/message/source_port")) message.setSourcePort(Integer.parseInt(info.trim()));
if (level.equalsIgnoreCase("/message/destination_port")) message.setDestinationPort(Integer.parseInt(info.trim()));
if (level.equalsIgnoreCase("/message/flash_sms")) message.setFlashSms(true);
level = level.substring(0, level.lastIndexOf("/"));
}
public void characters(char buf[], int offset, int len) throws SAXException
{
String token;
token = new String(buf, offset, len).trim();
if (token.length() == 0) return;
info = info + token;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -