📄 readsendqueue.java~38~
字号:
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;
import com.gps.center.dataservice.DbServer;
public class ReadSendQueue extends ParseData implements Runnable {
private String mServer;
private int mPort;
public DbServer db;
public ReadSendQueue() {
db = new DbServer();
System.out.println(db.toString().trim() + "创建DBSERVER对象ReadSendQueue");
readxml();
}
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,9--SENDTODBSERVER
System.out.println("将发送" + msg.cMsgType + "消息:" + msg.cMsg +
"ReadSendQueue");
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;
case SENDTODBSERVER:
SendToDbServer(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+"ReadSendQueue");
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;
}
}
}
}
public void SendToDbServer(MsgObj msg) {
//DbServer db = new DbServer();
System.out.println(msg.cMsg + "ReadSendQueue");
System.out.println(db.toString().trim() + "创建DBSERVER对象ReadSendQueue");
String string = new String(msg.cMsg.toString().trim());
db.addVehicleInfo(string);
System.out.println(msg.cMsg + "ReadSendQueue");
}
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 + -