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

📄 readsendqueue.java~10~

📁 用java写编写的一个GPS源代码请大家多多指教
💻 JAVA~10~
字号:
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 com.gps.center.baseclass.ParseData;
import com.gps.center.baseclass.MsgObj;
import com.gps.center.baseclass.HashObj;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.io.*;
import java.net.DatagramPacket;
import com.gps.center.parsedata.SMSClient;

public class ReadSendQueue extends ParseData implements Runnable {

  private String mServer;
  private int mPort;
  public ReadSendQueue() {
    readxml();
  }

  /**
   * run
   */
  public void run() {
    while (super.openservice) {
      while (super.sendQueue.isEmpty()) {
        try {
          Thread.sleep(500);
        }
        catch (InterruptedException e) {
          System.out.println(e);
        }
      }
      if (!super.sendQueue.isEmpty()) {
        MsgObj msg = getSendMsg();
        //cMsgtype:1--TCPMSG,2--DEVICEUDPMSG,3--SMSMSG
        //4--TCPSENDTODEVICE,5--UDPSENDTODEVICE,6--SMSSENDTODEVICE,7--TCPSENDTOTERMINAL,
        //8--TCPRETURNTERMINAL

        System.out.println("将发送" + msg.cMsgType + "消息:" + msg.cMsg);
        switch (msg.cMsgType) {
          case TCPSENDTODEVICE:
            tcpSendtoDevice(msg);
            break;
          case UDPSENDTODEVICE:
            udpSendtoDevice(msg);
            break;
          case SMSSENDTODEVICE:
            smsSendtoDevice(msg);
            break;
          case TCPSENDTOTERMINAL:
            tcpSendtoTerminal(msg);
            break;
          case TCPRETURNTERMINAL:
            TcpReturnTerminal(msg);
            break;
        }

      }
    }
  }

  private void TcpReturnTerminal(MsgObj msg) {
    boolean sendOver = false;
    while (!sendOver) {
      //发送
      ByteBuffer buffer = ByteBuffer.allocate(512);
      buffer = ByteBuffer.wrap(msg.cMsg.getBytes());
      SocketChannel TerminalSocket = (SocketChannel) msg.cSelectionKey.
          channel();
      if (msg.cSelectionKey.isValid()) {
        if (msg.cSelectionKey.isWritable()) {
          try {
            TerminalSocket.write(buffer);
            sendOver = true;
          }
          catch (IOException ex) {
            System.err.println("terminalSocket.write(buffer) err");
            System.err.println(ex);
          }
        }
      }
    }

  }

  private void tcpSendtoDevice(MsgObj msg) {
    boolean sendOver = false;
    while (!sendOver) {
      if (super.centerMap.containsKey(msg.cDeviceID)) {
        HashObj hashobj = (HashObj)super.centerMap.get(msg.cDeviceID);
        if (hashobj.cDeviceTcpUsed) {

          ByteBuffer buffer = ByteBuffer.allocate(512);//分派一个512字节数组缓存
          buffer = ByteBuffer.wrap(msg.cMsg.getBytes());//返回一个长度为getBytes()字节数组
          if (hashobj.cDeviceKey.isValid()) {
            SocketChannel DeviceSocket = (SocketChannel) hashobj.cDeviceKey.channel();

            if (hashobj.cDeviceKey.isWritable()) {
              try {
                DeviceSocket.write(buffer);//把 分派512的字节数组缓存 写到SocketChannel中去
                sendOver = true;
              }
              catch (IOException ex) {
                System.err.println("terminalSocket.write(buffer) err");
                System.err.println(ex);
              }
            }
          }
        }
        else {
          sendOver = true;
        }

      }
    }
  }

  private void udpSendtoDevice(MsgObj msg) {
    boolean sendOver = false;
    while (!sendOver) {
      if (super.centerMap.containsKey(msg.cDeviceID)) {
        HashObj hashobj = (HashObj)super.centerMap.get(msg.cDeviceID);
        if (hashobj.cDeviceUdpUsed) {
          //发送
          byte[] buffer = new byte[512];
          buffer = msg.cMsg.getBytes();
          //构造一个发送指定buffer.length长度数据包到指定的端口cDevicePort
          DatagramPacket dp = new DatagramPacket(buffer, buffer.length,hashobj.cDeviceAdd,
                                                                     hashobj.cDevicePort);
          try {
            sendOver = true;
            hashobj.cUdpSocket.send(dp);
          }
          catch (IOException ex) {
            System.err.println("hashobj.cUdpSocket.send(dp) err");
            System.err.println(ex);
          }
        }
      }
    }
  }

  private void smsSendtoDevice(MsgObj msg) {
    boolean sendOver = false;
    SMSClient Objsms = new SMSClient();
    while (!sendOver) {
      //判段是否SMSClient端口开放
      if (Objsms.OpenSMS(mServer, mPort)) {
        if (Objsms.SendSMS("", msg.cPhoneNum, msg.cMsg)) {//是否发送消息]
            System.out.println("短信将要发送的消息:"+msg.cMsg);
          sendOver = true;
        }
      }
    }
    Objsms.CloseSMS();
  }
//发送到终端
  private void tcpSendtoTerminal(MsgObj msg) {
    boolean sendOver = false;
    while (!sendOver) {
      if (super.centerMap.containsKey(msg.cDeviceID)) {
        HashObj hashobj = (HashObj)super.centerMap.get(msg.cDeviceID);
        if (hashobj.cTerminalTcpUsed) {
          //分配一个 512字节的数组缓存
          ByteBuffer buffer = ByteBuffer.allocate(512);
          //Wraps a byte array into a buffer.Wraps a byte array into a buffer.
          buffer = ByteBuffer.wrap(msg.cMsg.getBytes());
          if (hashobj.cTerminalKey.isValid()) {
            //把hashobj终端的“键”赋予SocketChannel对象
            SocketChannel TerminalSocket = (SocketChannel) hashobj.cTerminalKey.channel();
            //判断hashobj是否有  “值”
            if (hashobj.cTerminalKey.isWritable()) {
              try {
                //写buffer。
                TerminalSocket.write(buffer);
                sendOver = true;
              }
              catch (IOException ex) {
                System.err.println("terminalSocket.write(buffer) err");
                System.err.println(ex);
              }
            }
          }
        }
        else {
          sendOver = true;
        }
      }
    }
  }

  private void readxml() {
    try {
      File f = new File("CenterInfo.xml");
      if (f.exists()) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(f);
        NodeList nl = doc.getElementsByTagName("Center");
        for (int i = 0; i < nl.getLength(); i++) {
          mServer = (doc.getElementsByTagName("SmsIp").
                                      item(i). getFirstChild().getNodeValue()).trim();
          mPort = Integer.parseInt( (doc.getElementsByTagName("SmsPort").
                                     item(i). getFirstChild().getNodeValue()).trim());
        }
      }
      else {
        System.out.println("no find file:CenterInfo.xml");
        System.exit( -1);
      }

    }
    catch (Exception e) {
      e.printStackTrace();
      System.exit( -1);
    }
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -