package com.power.spcomm; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Date; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.power.alarm.Alarm_Config; import com.power.alarm.Alarm_Config_SQL; import com.power.mysql.MysqlConnPool; public class SocketClientComm_Thread extends Thread { Logger logger = LogManager.getLogger(SPCommModule.class); private Socket socketClient; private InputStream inData; private OutputStream outData; private MysqlConnPool m_Conn_Pool; private int Alarm_way; private Alarm_Config Alarm_config; private boolean socketCommOK = false; private ByteBuffer CommRxBuffer = ByteBuffer.allocate(512); private ArrayList phoneNumList = new ArrayList(); private ArrayList devIdList = new ArrayList(); public Date last_Alarm_Time = null; public Date sms_AlarmCheck_Time = null; public SocketClientComm_Thread(MysqlConnPool pool,int alarm_way) { m_Conn_Pool = pool; Alarm_way = alarm_way; } public void readMsg(ByteBuffer bbf_rx) { if(false == socketCommOK) return; bbf_rx.clear(); int time_out = 0; byte[] rx_buf_t = new byte[512]; try { while(true) { if(inData.available() > 0) { time_out = 0; int rx_cnt_t = inData.read(rx_buf_t); if((bbf_rx.position()+rx_cnt_t) < (bbf_rx.capacity()-1)) { bbf_rx.put(rx_buf_t, 0, rx_cnt_t); } else { break; } } else { sleep(5); time_out++; if(0 == bbf_rx.position()) { if(time_out >= 2000) { break; } } else { if(time_out >= 5) { break; } } } } bbf_rx.flip(); } catch(Exception e) { logger.error(e.toString(), e); try { inData.close(); outData.close(); socketClient.close(); }catch(Exception e1) { logger.error(e1.toString(), e1); } socketCommOK = false; } } private boolean sendShortMessage(String phonenumber) { logger.info("****************** sendShortMessage ***********"); boolean send_success = false; if(false == socketCommOK) return send_success; String msg_str = "86" + phonenumber + ":0:" + Alarm_config.SMS_Alarm_Text; try { outData.write(msg_str.getBytes("GBK"),0,msg_str.getBytes("GBK").length); outData.flush(); }catch (Exception e) { logger.error(e.toString(), e); try { inData.close(); outData.close(); socketClient.close(); }catch(Exception e1) { logger.error(e1.toString(), e1); } socketCommOK = false; } readMsg(CommRxBuffer); String rx_str = null; CommRxBuffer.position(0); byte[] bt_dat = new byte[CommRxBuffer.remaining()]; for(int n=0; n= 60) { //60 seconds sms_AlarmCheck_Time = new Date(); new_alarm_exists = Alarm_Config_SQL.check_if_new_alarm(m_Conn_Pool, last_Alarm_Time,devIdList); } if(new_alarm_exists) { Alarm_config = Alarm_Config_SQL.query_alarm_config(m_Conn_Pool); if(Alarm_config.SMS_Alarm_EN>0) { if(false == socketCommOK) { try { socketClient = new Socket(); socketClient.connect(new InetSocketAddress(Alarm_config.AlarmDevIP, Alarm_config.SMS_Alarm_ipPort), 3000); if(socketClient.isConnected()) { inData = socketClient.getInputStream(); outData = socketClient.getOutputStream(); socketCommOK = true; } }catch (IOException e) { logger.error("SMS socket error..."); } } if(socketCommOK) { last_Alarm_Time = new Date(); new_alarm_exists = false; query_phone_number(); for(int i=0;i0) { /* if(false == socketCommOK) { try { socketClient = new Socket(); socketClient.connect(new InetSocketAddress(Alarm_config.AlarmDevIP, Alarm_config.Beeper_Alarm_ipPort), 3000); if(socketClient.isConnected()) { inData = socketClient.getInputStream(); outData = socketClient.getOutputStream(); socketCommOK = true; } }catch (IOException e) { logger.error("Beeper socket error..."); } } */ if(socketCommOK) { if(alarm_exists) { if(Alarm_config.Beeper_Sound_OFF>0) { //¹Ø±ÕÉùÒô£¬±£ÁôµÆ turnOffBuzzerBeep(); } else { //´ò¿ªÉùÒôºÍµÆ buzzerBeepAndLedOn(); } } else { turnOffBuzzerAndLed(); } } } else { if(socketCommOK) { //¹Ø±ÕÉùÒôºÍµÆ turnOffBuzzerAndLed(); } } } try { Thread.sleep(5000); } catch (InterruptedException e) { logger.error(e.toString(), e); } } } } }