|
@@ -31,22 +31,21 @@ import com.icontrols.bridge.dto.ServiceDetail;
|
|
|
|
|
|
public class MsgServerHandler extends Thread {
|
|
|
private final Logger logger = LoggerFactory.getLogger(MsgServerHandler.class);
|
|
|
-
|
|
|
+
|
|
|
private Socket clientSocket;
|
|
|
- private String rcvMsgStr;
|
|
|
-
|
|
|
-
|
|
|
+ private String rcvMsgStr;
|
|
|
+
|
|
|
private long lSocketConnectionPeriod = 0;
|
|
|
private int TIMEOUT_iMAP_WAIT = 3000;
|
|
|
private int SOCKET_BUFFER_SIZE_READ = 50;
|
|
|
-
|
|
|
- private final int SOCKET_WAIT_TIME = 3000;
|
|
|
+
|
|
|
+ private final int SOCKET_WAIT_TIME = 3000;
|
|
|
private final int SOCKET_BUFFER_SIZE = 100;
|
|
|
-
|
|
|
- public MsgServerHandler (Socket clientSocket) {
|
|
|
+
|
|
|
+ public MsgServerHandler(Socket clientSocket) {
|
|
|
this.clientSocket = clientSocket;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public void run() {
|
|
|
InputStream is = null;
|
|
|
InputStreamReader isr = null;
|
|
@@ -54,163 +53,192 @@ public class MsgServerHandler extends Thread {
|
|
|
try {
|
|
|
is = clientSocket.getInputStream();
|
|
|
isr = new InputStreamReader(is, "euc-kr");
|
|
|
-
|
|
|
+
|
|
|
clientSocket.setSoLinger(true, 3000);
|
|
|
-
|
|
|
+
|
|
|
br = new BufferedReader(isr);
|
|
|
rcvMsgStr = "";
|
|
|
-
|
|
|
+
|
|
|
StringBuffer sbRcvMSG = new StringBuffer();
|
|
|
StringBuffer sbInBuffer = null;
|
|
|
-
|
|
|
+
|
|
|
boolean rcvOK = false;
|
|
|
lSocketConnectionPeriod = System.currentTimeMillis() + TIMEOUT_iMAP_WAIT;
|
|
|
-
|
|
|
- while(System.currentTimeMillis() < lSocketConnectionPeriod) {
|
|
|
+
|
|
|
+ while (System.currentTimeMillis() < lSocketConnectionPeriod) {
|
|
|
try {
|
|
|
- if(br.ready()) {
|
|
|
+ if (br.ready()) {
|
|
|
try {
|
|
|
char[] readData = new char[SOCKET_BUFFER_SIZE_READ * 1024];
|
|
|
sbInBuffer = new StringBuffer();
|
|
|
-
|
|
|
- while(br.ready()) {
|
|
|
+
|
|
|
+ while (br.ready()) {
|
|
|
long charCnt = br.read(readData);
|
|
|
- sbInBuffer.append(new String(readData, 0, (int)charCnt));
|
|
|
+ sbInBuffer.append(new String(readData, 0, (int) charCnt));
|
|
|
}
|
|
|
-
|
|
|
- if(sbInBuffer != null || sbInBuffer.toString().trim().length() > 0)
|
|
|
+
|
|
|
+ if (sbInBuffer != null || sbInBuffer.toString().trim().length() > 0)
|
|
|
sbRcvMSG.append(sbInBuffer.toString());
|
|
|
-
|
|
|
- if(0 < sbInBuffer.toString().indexOf("</imap>")) {
|
|
|
+
|
|
|
+ if (0 < sbInBuffer.toString().indexOf("</imap>")) {
|
|
|
rcvOK = true;
|
|
|
logger.info("Client Message Receive DONE!!!");
|
|
|
break;
|
|
|
}
|
|
|
- }catch(Exception e) {
|
|
|
+ } catch (Exception e) {
|
|
|
logger.error("Message Read ERROR --> " + e.getMessage());
|
|
|
return;
|
|
|
}
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
Thread.sleep(100);
|
|
|
- }
|
|
|
- }catch(Exception e) {
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
logger.error("Message Read Error 2 ... --> " + e.getMessage());
|
|
|
clientSocket.close();
|
|
|
return;
|
|
|
- }finally {
|
|
|
+ } finally {
|
|
|
rcvMsgStr = sbRcvMSG.toString();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if(!rcvOK) {
|
|
|
+
|
|
|
+ if (!rcvOK) {
|
|
|
logger.error("FAIL... iMap message is unacceptable!! : \n\r " + rcvMsgStr);
|
|
|
clientSocket.close();
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
logger.info(" :: >> " + rcvMsgStr);
|
|
|
- }catch(Exception e) {
|
|
|
-
|
|
|
- }finally {
|
|
|
- try { if(!clientSocket.isClosed()) clientSocket.close(); }catch(Exception e) { }
|
|
|
- try { br.close(); } catch(Exception e) { }
|
|
|
- try { isr.close(); } catch(Exception e) { }
|
|
|
- try { is.close(); } catch(Exception e) { }
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ if (!clientSocket.isClosed())
|
|
|
+ clientSocket.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ br.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ isr.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ is.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
try {
|
|
|
- rcvMsgStr = rcvMsgStr.substring(rcvMsgStr.indexOf("<"));
|
|
|
-
|
|
|
+ rcvMsgStr = rcvMsgStr.substring(rcvMsgStr.indexOf("<"));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
|
- DocumentBuilder builder = factory.newDocumentBuilder();
|
|
|
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
|
+ DocumentBuilder builder = factory.newDocumentBuilder();
|
|
|
InputStream istream = new ByteArrayInputStream(rcvMsgStr.getBytes("UTF-8"));
|
|
|
Document doc = builder.parse(istream);
|
|
|
-
|
|
|
+
|
|
|
XPath xpath = XPathFactory.newInstance().newXPath();
|
|
|
- Node iMap = (Node)xpath.evaluate("//imap/service", doc, XPathConstants.NODE);
|
|
|
-
|
|
|
+ Node iMap = (Node) xpath.evaluate("//imap/service", doc, XPathConstants.NODE);
|
|
|
+
|
|
|
final String eventName = iMap.getAttributes().getNamedItem("name").getTextContent();
|
|
|
-
|
|
|
+
|
|
|
|
|
|
- if(eventName == null || eventName.trim().length() == 0) return;
|
|
|
+ if (eventName == null || eventName.trim().length() == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ final boolean isContainCompany = rcvMsgStr.contains("<req_company>") ? true : false;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- final boolean isContainCompany = rcvMsgStr.contains("<req_company>")?true:false;
|
|
|
-
|
|
|
-
|
|
|
- final String midStr = isContainCompany?rcvMsgStr.substring(rcvMsgStr.indexOf("<req_company>"), rcvMsgStr.indexOf("</req_company>")):"";
|
|
|
+ final String midStr = isContainCompany
|
|
|
+ ? rcvMsgStr.substring(rcvMsgStr.indexOf("<req_company>"), rcvMsgStr.indexOf("</req_company>"))
|
|
|
+ : "";
|
|
|
+
|
|
|
+ final String reqStr = isContainCompany ? midStr.substring(midStr.indexOf(">") + 1) : "";
|
|
|
+ final String topStr = isContainCompany ? rcvMsgStr.substring(0, rcvMsgStr.indexOf(reqStr)) : "";
|
|
|
+ final String bottomStr = isContainCompany ? rcvMsgStr.substring(rcvMsgStr.indexOf("</req_company>")) : "";
|
|
|
+
|
|
|
+ String[] companies = reqStr.split("/");
|
|
|
|
|
|
- final String reqStr = isContainCompany?midStr.substring(midStr.indexOf(">")+1):"";
|
|
|
- final String topStr = isContainCompany?rcvMsgStr.substring(0, rcvMsgStr.indexOf(reqStr)):"";
|
|
|
- final String bottomStr = isContainCompany?rcvMsgStr.substring(rcvMsgStr.indexOf("</req_company>")):"";
|
|
|
-
|
|
|
|
|
|
- for(ServiceDetail service : COMMON_INFO.serviceDtailList) {
|
|
|
+ for (String companyName : companies) {
|
|
|
|
|
|
|
|
|
-
|
|
|
- if(!Arrays.asList(service.getEvents()).contains(eventName)) continue;
|
|
|
-
|
|
|
- StringBuffer sb = new StringBuffer();
|
|
|
-
|
|
|
- if(isContainCompany) rcvMsgStr = sb.append(topStr).append(service.getName()).append(bottomStr).toString();
|
|
|
-
|
|
|
- logger.debug("최종 - \r\n" + rcvMsgStr);
|
|
|
-
|
|
|
- Runnable task = () -> {
|
|
|
- Socket danziSocket = null;
|
|
|
- DataOutputStream outStream = null;
|
|
|
- try {
|
|
|
- danziSocket = new Socket();
|
|
|
- danziSocket.setSoLinger(true, 3000);
|
|
|
- danziSocket.setSendBufferSize(SOCKET_BUFFER_SIZE * 1024);
|
|
|
- danziSocket.setSoTimeout(SOCKET_WAIT_TIME);
|
|
|
-
|
|
|
- InetSocketAddress iSocAddr = new InetSocketAddress(service.getAddress(), service.getPort());
|
|
|
- danziSocket.connect(iSocAddr, SOCKET_WAIT_TIME);
|
|
|
-
|
|
|
- outStream = new DataOutputStream(danziSocket.getOutputStream());
|
|
|
- String sendMsg = rcvMsgStr + "\r\n";
|
|
|
- byte[] outBF = sendMsg.getBytes("euc-kr");
|
|
|
-
|
|
|
- outStream.write(outBF);
|
|
|
- outStream.flush();
|
|
|
-
|
|
|
- StringBuffer logSB = new StringBuffer();
|
|
|
-
|
|
|
- logSB.append(" S E N D T O " + service.getPort() + " C O M P L I T E ! ! ! ! \n");
|
|
|
-
|
|
|
- logger.info(logSB.toString());
|
|
|
- } catch (Exception e) {
|
|
|
-
|
|
|
-
|
|
|
- StringBuffer errSB = new StringBuffer();
|
|
|
-
|
|
|
- errSB.append("\n***************************************************\n")
|
|
|
- .append(" F A I L T O "+ service.getPort() + " S E N D E V E N T ! ! ! ! \n")
|
|
|
- .append(" ERROR MESSAGE = " + e.getMessage() + " \n")
|
|
|
- .append("***************************************************");
|
|
|
-
|
|
|
- logger.error(errSB.toString());
|
|
|
-
|
|
|
- e.printStackTrace();
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- Thread.sleep(100);
|
|
|
- outStream.close();
|
|
|
- danziSocket.close();
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
- new Thread(task).start();
|
|
|
- }
|
|
|
+ ServiceDetail service = COMMON_INFO.serviceDtailList.get(companyName);
|
|
|
+
|
|
|
+ if (!Arrays.asList(service.getEvents()).contains(eventName))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+
|
|
|
+ if (isContainCompany)
|
|
|
+ rcvMsgStr = sb.append(topStr).append(service.getName()).append(bottomStr).toString();
|
|
|
+
|
|
|
+ logger.debug("최종 - \r\n" + rcvMsgStr);
|
|
|
+
|
|
|
+ Runnable task = () -> {
|
|
|
+ Socket danziSocket = null;
|
|
|
+ DataOutputStream outStream = null;
|
|
|
+ try {
|
|
|
+ danziSocket = new Socket();
|
|
|
+ danziSocket.setSoLinger(true, 3000);
|
|
|
+ danziSocket.setSendBufferSize(SOCKET_BUFFER_SIZE * 1024);
|
|
|
+ danziSocket.setSoTimeout(SOCKET_WAIT_TIME);
|
|
|
+
|
|
|
+ InetSocketAddress iSocAddr = new InetSocketAddress(service.getAddress(), service.getPort());
|
|
|
+ danziSocket.connect(iSocAddr, SOCKET_WAIT_TIME);
|
|
|
+
|
|
|
+ outStream = new DataOutputStream(danziSocket.getOutputStream());
|
|
|
+ String sendMsg = rcvMsgStr + "\r\n";
|
|
|
+ byte[] outBF = sendMsg.getBytes("euc-kr");
|
|
|
+
|
|
|
+ outStream.write(outBF);
|
|
|
+ outStream.flush();
|
|
|
+
|
|
|
+ StringBuffer logSB = new StringBuffer();
|
|
|
+
|
|
|
+ logSB.append(" S E N D T O " + service.getPort() + " C O M P L I T E ! ! ! ! \n");
|
|
|
+
|
|
|
+ logger.info(logSB.toString());
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+
|
|
|
+ StringBuffer errSB = new StringBuffer();
|
|
|
+
|
|
|
+ errSB.append("\n***************************************************\n")
|
|
|
+ .append(" F A I L T O " + service.getPort()
|
|
|
+ + " S E N D E V E N T ! ! ! ! \n")
|
|
|
+ .append(" ERROR MESSAGE = " + e.getMessage() + " \n")
|
|
|
+ .append("***************************************************");
|
|
|
+
|
|
|
+ logger.error(errSB.toString());
|
|
|
+
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ Thread.sleep(100);
|
|
|
+ outStream.close();
|
|
|
+ danziSocket.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ new Thread(task).start();
|
|
|
+ }
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
logger.error("[ERROR] IOEXCEPTION-" + e.getMessage());
|
|
|
- } catch(Exception e) {
|
|
|
+ } catch (Exception e) {
|
|
|
logger.error("[ERROR] EXCEPTION - " + e.getMessage());
|
|
|
e.printStackTrace();
|
|
|
}
|