📄 readrecievelist.java~3~
字号:
package com.gps.center.dataservice;
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import com.gps.center.parsedata.ParseData;
import com.gps.center.parsedata.ParseInterface;
import com.gps.center.parsedata.MsgObj;
public class ReadRecieveQueue extends ParseData
implements Runnable, ParseInterface {
private String[][] expression;
public ReadRecieveQueue() {
readxml();
readDeviceType();
loadDeviceClass();
}
/**
* run
*/
public void run() {
Pattern regex;
Matcher matcher;
ParseInterface parseobj;
// ParseInterface makeStrObj;
boolean findStartword = false;
boolean findCommandword = false;
boolean findEndword = false;
while (super.openservice) {
while (super.recieveQueue.isEmpty()) {
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
System.out.println(e);
}
}
if (!super.recieveQueue.isEmpty()) {
// MsgObj msg = new MsgObj();
MsgObj msg = getRecieveMsg();
// removeMsg();
// //将字符串分解,避免多条首尾相连
// regex = Pattern.compile("[#]");
// String reStr[] = regex.split(msg.cMsg);
// msg.cMsg = reStr[0] + "#";
//
// System.out.println("reStr[0]:" + msg.cMsg);
//
// if (reStr.length > 1) {
// for (int i = 1; i < reStr.length; i++) {
// MsgObj msgobj = new MsgObj();
// msgobj.cMsg = reStr[i] + "#";
//
// System.out.println("reStr[" + i + "]:" + msg.cMsg);
//
// msgobj.cMsgType = msg.cMsgType;
// msgobj.cSelectionKey = msg.cSelectionKey;
// super.addRecieveMsg(msgobj);
// }
// }
System.out.println("Receive " + msg.cMsgType + ":" + msg.cMsg);
for (int i = 0; i < expression.length; i++) {
findStartword = false;
findCommandword = false;
findEndword = false;
for (int j = 1; j <= 3; j++) {
regex = Pattern.compile(expression[i][j]);
matcher = regex.matcher(msg.cMsg);
//cMsgtype:1--TCPMSG,2--DEVICEUDPMSG,3--SMSMSG
//4--TCPSENDTODEVICE,5--UDPSENDTODEVICE,6--SMSSENDTODEVICE,7--TCPSENDTOTERMINAL,8--TCPRETURNTERMINAL
switch (j) {
case 1:
// System.out.println("expression[" + i + "][" + j + "]" + expression[i][j]);
//
findStartword = matcher.find();
break;
case 2:
// System.out.println("expression[" + i + "][" + j + "]" +expression[i][j]);
//
findCommandword = matcher.find();
break;
case 3:
// System.out.println("expression[" + i + "][" + j + "]" + expression[i][j]);
//
findEndword = matcher.find();
break;
}
}
if (findStartword & findCommandword & findEndword) {
if (!super.classMap.containsKey(expression[i][0])) {
// System.out.println("LoadClass :" + expression[i][0]);
parseobj = loadClass(expression[i][0]);
super.classMap.put( (expression[i][0]), parseobj);
//加载根据设备类型生成命令串的类
// if (!super.classMap.containsKey(expression[i][4])) {
// makeStrObj = loadClass(expression[i][4]);
// super.classMap.put( (expression[i][4]), parseobj);
// }
parseobj.ParseMsg(msg);
}
else {
System.out.println("Use Class Parse Msg:" + expression[i][0]);
parseobj = (ParseInterface)super.classMap.get(expression[i][0]);
parseobj.ParseMsg(msg);
// if (parseobj != null) {
// super.addRecieveMsg(msg);//接受信息
// parseobj.ParseMsg(msg);
// }
// else {
// parseobj = loadClass(expression[i][0]);
// super.classMap.put((expression[i][0]), parseobj);
// parseobj.ParseMsg(msg);
// }
}
break;
}
// break;
}
}
}
}
protected static ParseInterface loadClass(String classname) {
ParseInterface s = null;
try {
System.out.println("LoadClass :" + classname);
Class parseClass = Class.forName("com.gps.center.parsedata." + classname.trim());
s = (ParseInterface) parseClass.newInstance();//生成类的实例newInstance()相当与new
}
catch (Exception e) {
System.out.println("erro for Class.forName(servicename)" + classname);
// System.out.println("Service s=" + s.toString());
// System.out.println(e.getMessage());
}
return s;
}
private void readxml() {
// String strclassname, strexpression;
try {
//"E:\\nk\\JBuilderWorkspace\\GPSCenter\\Expression.xml"
File f = new File("ExpressionInfo.xml");
if (f.exists()) {
//创建文档解析工厂,以利用工厂来获得一个解析器对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/*当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个
DocumentBuilder对象,这个对象代表了具体的DOM解析器*/
DocumentBuilder builder = factory.newDocumentBuilder();
//用解析器对xml文档进行解析且获得一个Document对象,开始我们的dom操作了
Document doc = builder.parse(f);
//获得一个Nodelist对象,一个Node对象的列表,一个node代表一个xml的标签元素,获得Center列表
NodeList nl = doc.getElementsByTagName("Center");
//System.out.println("nl.getLength():" + nl.getLength());
//定义一个nl.getLength()*4的数组
expression = new String[nl.getLength()][4];
for (int i = 0; i < nl.getLength(); i++) {
/* String s1 = new String((doc.getElementsByTagName("ClassName").item(i).
getFirstChild().getNodeValue()).trim());
String s2 = new String((doc.getElementsByTagName("Expression").item(i).
getFirstChild().
getNodeValue()).trim());
System.out.println(s1);
System.out.println(s2);
expression[i][0] = s1;
expression[i][1] = s2;*/
//使用nodelist对象的item()获得列表中一个node对象,通过getnodevalue()获取 node内标签的内容
expression[i][0] = new String( (doc.getElementsByTagName("ClassName").
item(i).getFirstChild().getNodeValue()).trim());
expression[i][1] = new String( (doc.getElementsByTagName("Startword").
item(i).getFirstChild().getNodeValue()).trim());
expression[i][2] = new String( (doc.getElementsByTagName( "Commandword").
item(i).getFirstChild().getNodeValue()).trim());
expression[i][3] = new String( (doc.getElementsByTagName("Endword").
item(i).getFirstChild().getNodeValue()).trim());
/* 根据设备类型生成命令字符串
expression[i][4] = new String( (doc.getElementsByTagName(
"MakeStrClassName").item(i). getFirstChild().getNodeValue()).trim());
System.out.println(expression[i][0]);
System.out.println(expression[i][1]);
System.out.println(expression[i][2]);
System.out.println(expression[i][3]);
*/
}
}
else {
System.out.println("no find file:ExpressionInfo.xml");
System.exit(-1);
}
}
catch (Exception e) {
e.printStackTrace();//打印出堆栈信息
}
}
private void readDeviceType() {
try {
//"E:\\nk\\JBuilderWorkspace\\GPSCenter\\Expression.xml"
//建立关联和文件
File f = new File("VehicleTable.xml");
if (f.exists()) {
//创建文档解析工厂,以利用工厂来获得一个解析器对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/*当获得一个工厂对象后,使用它的静态方法newDocumentBuilder()方法可以获得一个
DocumentBuilder对象,这个对象代表了具体的DOM解析器*/
DocumentBuilder builder = factory.newDocumentBuilder();
//用解析器对xml文档进行解析且获得一个Document对象,开始我们的dom操作了
Document doc = builder.parse(f);
//获得一个Nodelist对象,一个Node对象的列表,一个node代表一个xml的标签元素,获得Center列表
NodeList nl = doc.getElementsByTagName("Center");
// System.out.println("nl.getLength():" + nl.getLength());
super.DeviceIdType = new String[nl.getLength()][2];
for (int i = 0; i < nl.getLength(); i++) {
/* String s1 = new String((doc.getElementsByTagName("ClassName").item(i).
getFirstChild().getNodeValue()).trim());
String s2 = new String((doc.getElementsByTagName("Expression").item(i).
getFirstChild().getNodeValue()).trim());
System.out.println(s1);
System.out.println(s2);
expression[i][0] = s1;
expression[i][1] = s2;
DeviceIdType[i][0] = new String( (doc.getElementsByTagName("DeviceID").
item(i).getFirstChild().getNodeValue()).trim());
DeviceIdType[i][1] = new String( (doc.getElementsByTagName( "DeviceType").
item(i).getFirstChild().getNodeValue()).trim());
根据设备类型生成命令字符串
expression[i][4] = new String( (doc.getElementsByTagName(
"MakeStrClassName").
item(i). getFirstChild(). getNodeValue()).trim());
System.out.println(expression[i][0]);
System.out.println(expression[i][1]);
System.out.println(expression[i][2]);
System.out.println(expression[i][3]);
*/
}
}
else {
System.out.println("no find file:ExpressionInfo.xml");
System.exit( -1);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
private void loadDeviceClass() {
ParseInterface parseobj;
String[] DeviceType = {"HC2000", "HQGPRS"};
for (int i = 0; i < DeviceIdType.length; i++) {
if (!super.classMap.containsKey(DeviceIdType[i])) {
parseobj = loadClass(DeviceType[i]);
// System.out.println("loadClass :" + DeviceType[i]);
super.classMap.put( (DeviceType[i]), parseobj);
//加载根据设备类型生成命令串的类
// if (!super.classMap.containsKey(DeviceIdType[i][4])) {
// makeStrObj = loadClass(DeviceIdType[i][4]);
// super.classMap.put( (expression[i][4]), parseobj);
// }
// parseobj.ParseMsg(msg);
}
}
}
/**
* ParseMsg
*
* @param msg MsgObj
*/
public void ParseMsg(MsgObj msg) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -