⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readrecievelist.java~3~

📁 用java写编写的一个GPS源代码请大家多多指教
💻 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 + -