nicews.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. var ws;
  2. var ws2;
  3. var conninfo;
  4. //status : 현재 상태
  5. var status = 5;
  6. var sendbuf;
  7. var rtndata;
  8. String.prototype.NCbyteLength = function(){
  9. var l=0;
  10. for(var idx = 0; idx < this.length; idx++){
  11. var c = escape(this.charAt(idx));
  12. if(c.length == 1) l++;
  13. else if(c.indexOf("%u") != -1) l += 3;
  14. else if(c.indexOf("%") != -1) l += c.length/3; //JDK20210205 : UTF-8기준. EUC-KR은 /2로 수정 필요.
  15. }
  16. return l;
  17. };
  18. function NCpad(n,width)
  19. {
  20. n = n + '';
  21. return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
  22. }
  23. function POSSEND(port, type, senddata, callback)
  24. {
  25. //port: 로컬 데몬 PORT, type : (PCAT -> postocat , VCAT -> NVCAT) , senddata : 거래 요청 데이터, callback : 응답 CallBack 함수
  26. //svrport = "50001";
  27. if(status != 5)
  28. return ;
  29. status = 0;
  30. sendbuf = make_send_data(type,senddata);
  31. conninfo = "ws://localhost:" + port + "/" + type;
  32. if ("WebSocket" in window) {
  33. ws = new WebSocket(conninfo);
  34. ws.onopen = function(event) {
  35. //연결성공
  36. status = 1;
  37. ws_send_data(ws,sendbuf);
  38. };
  39. ws.onerror = function(event) {
  40. //연결실패
  41. status = 6;
  42. //callback(-1,"");
  43. return false;
  44. };
  45. ws.onmessage = function(event) {
  46. //응답수신
  47. status = 3;
  48. ws_disconnect(ws);
  49. parse_recv_data(event.data,callback);
  50. //callback(0,event.data);
  51. };
  52. ws.onclose = function(event) {
  53. status = 5;
  54. //연결종료
  55. };
  56. } else {
  57. //브라우저가 webSocket을 지원하지 않음.
  58. return false;
  59. }
  60. }
  61. function ReqStop(port,type)
  62. {
  63. if(status != 1 && status != 2) return;
  64. port = Number(port) + 1; //Stop 포트번호 1 높음
  65. conninfo = "ws://localhost:" + port + "/" + type;
  66. if ("WebSocket" in window) {
  67. ws2 = new WebSocket(conninfo);
  68. ws2.onopen = function(event) {
  69. //연결성공
  70. ws_send_data(ws2,make_send_data(type,"STOP"));
  71. };
  72. ws2.onerror = function(event) {
  73. //연결실패
  74. return false;
  75. };
  76. ws2.onmessage = function(event) {
  77. //응답수신
  78. status = 3;
  79. //ws_disconnect(ws2);
  80. //parse_recv_data(event.data,callback);
  81. //callback(0,event.data);
  82. };
  83. ws2.onclose = function(event) {
  84. ws_disconnect(ws2);
  85. status = 6;
  86. //연결종료
  87. };
  88. } else {
  89. //브라우저가 webSocket을 지원하지 않음.
  90. return false;
  91. }
  92. }
  93. function ws_disconnect(aws) {
  94. status = 4;
  95. aws.close();
  96. }
  97. function ws_send_data(aws,sendbuf) {
  98. status = 2;
  99. aws.send(sendbuf);
  100. return false;
  101. }
  102. function make_send_data(type, senddata) {
  103. var m_sendmsg;
  104. var m_totlen;
  105. var m_bodylen;
  106. m_bodylen = senddata.NCbyteLength();
  107. m_totlen = 12 + m_bodylen;
  108. return NCpad(m_totlen,4) + type + " " + NCpad(m_bodylen,4) + senddata;
  109. }
  110. function parse_recv_data(recvdata, callback) {
  111. var rtndata;
  112. var bodylen;
  113. bodylen = recvdata.substr(12,4);
  114. if(recvdata.substr(8,4) != "0000")
  115. {
  116. //오류코드 매핑!!
  117. /*
  118. //NVCAT
  119. 1 : 정상
  120. -1 : NVCAT 실행 중이 아님
  121. -2 : 거래금액이 존재하지 않음
  122. -3 : 환경정보 읽기 실패
  123. -4 : NVCAT 연동오류 실패
  124. -5 : 기타 응답데이터 오류
  125. -6 : 카드리딩 타임아웃
  126. -7 : 사용자 및 리더기 취소
  127. -8 : FALLBACK 거래요청
  128. -9 : 기타오류
  129. -10 :IC우선거래 요청
  130. -11 : FALLBACK 거래 아님
  131. -12 : 거래불가카드
  132. -13 : 서명요청 오류
  133. -14 : 요청 전문 데이터 오류
  134. -15 : 카드리더 Port Open 오류
  135. //PCAT
  136. 1 : 정상
  137. -1 : 포트 오픈 실패
  138. -2 : 포트 이미 오픈된 상태
  139. -3 : ACK 수신 실패 (단말기 연결 실패)
  140. -4 : LRC오류 OR 종료버튼
  141. -14 : 요청 전문 데이터 오류
  142. */
  143. var errcd;
  144. errcd = recvdata.substr(8,4) * -1
  145. callback(errcd,"");
  146. }else
  147. {
  148. callback(1,recvdata.substr(16,bodylen));
  149. }
  150. }