import id.co.hanoman.config.Util; import id.co.hanoman.mbplugin.codex.Codex; import id.co.hanoman.mbplugin.codex.CodexContext; import org.apache.log4j.Logger; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; public class AbcsClientHandler { private static final Logger log = Logger.getLogger(AbcsClientHandler.class); public static void handle(Socket clientSocket, String codexName, Codex codexIn, Codex codexOut) throws Exception { try (InputStream inputStream = clientSocket.getInputStream(); OutputStream outputStream = clientSocket.getOutputStream()) { ByteBuffer buffer = ByteBuffer.allocate(8192); int len; while ((len = inputStream.read(buffer.array(), buffer.position(), buffer.remaining())) > 0) { buffer.position(buffer.position() + len); buffer.flip(); Map req = new HashMap<>(); if (codexIn.decode(new CodexContext(), req, buffer)) { log.info("[" + codexName + "] DECODED REQUEST: " + Util.dumpBean(req)); Map res = new HashMap<>(); // res.put("dspTransactionCode", "9999"); // res.put("dspMessageStatus", "SUCCESS"); res.put("dspHeaderType", "*SOKI"); res.put("dspDeviceName", " "); res.put("dspSocketNumber", "2"); res.put("dspPortNumber", "9001"); res.put("dspFiller1", "40"); res.put("dspHeaderLength", "213"); res.put("dspMessageLength", "349"); res.put("dspVersionNumber", "0200"); res.put("dspHeaderFormatId", "*DSP"); res.put("dspDataFormatId", "ABCS "); res.put("dspSourceId", "*AXIS "); res.put("dspDestinationId", "DQAXISIN "); res.put("dspRoutingNumber", "00 "); res.put("dspMessageStatus", "/-------"); res.put("dspBankIdNumber", "00000000000"); res.put("dspNode", "00"); res.put("dspExchangeId", "000000002F09001F4040C3D4D5E2C2D9F0F0F0F1"); res.put("dspScenarioNumber", "AXISSYSTEMSDNBHD"); res.put("dspTransactionCode", "0021"); res.put("dspRetrievalReferenceNumber", "4766932509161528230525"); res.put("dspAcquirerReferenceNumber", " "); res.put("dspTransmissionNumber", "0"); res.put("dspNumberOfRecordsToBeLoaded", "10"); res.put("dspNumberOfErrorsToBeLoaded", "10"); res.put("dspUserId", "7200014 "); res.put("dspTerminalId", "70000003 "); res.put("dspSupervisorId", " "); res.put("dspMoreRecordIndicator", " "); res.put("dspCutOffIndicator", " "); res.put("dspUserData", " "); res.put("ICLEN", "98"); res.put("ICHEAD", "*SOKR"); res.put("ICRTRQ", "DQICRTEDC "); res.put("ICDEVN", "10.126.205.18 "); res.put("ICID", "05540"); res.put("ICCOMQ", "DQAXISIN "); res.put("ICIPSF", "0"); res.put("TMTIMIN", "152823"); res.put("TMTXTYP", "T9997"); res.put("ICRSV1", "0"); res.put("ICEOM", "*EOM"); res.put("tellerID", "7200014"); res.put("sequenceNumber", "1436630"); res.put("responseLength", "54"); res.put("responseCode", "F1"); res.put("responseHeader", "F1"); res.put("TLXMNE", "ATM"); res.put("SNAME", "NASABAH S055848 "); res.put("ACC", "16556354489"); res.put("AMT1", "165563544.89"); res.put("AMT2", "165563544.89"); res.put("abcsResponses", "F9 E0 F4"); res.put("msgCode", "AXISSYSTEMSDNBHD.0000000021"); res.put("responseCode", "000"); res.put("isF2code", "000"); CodexContext cc = new CodexContext(); codexOut.encode(cc, res); byte[] responseBytes = cc.toByteArray(); outputStream.write(responseBytes); outputStream.flush(); log.info("[" + codexName + "] SENT RESPONSE: " + Util.dump(responseBytes, 0, responseBytes.length)); } buffer.compact(); } } } }