====== WEBSOCKETSVR 가이드 ====== 이 화면은 웹소켓서버 컴포넌트 샘플 화면이다. 웹소켓서버 컴포넌트는 Web Socket 프로토콜에 대한 서버 기능을 제공하는 컴포넌트이다. WebSocket 클라이언트용 xFrame5 샘플 화면은 /HTML5/COMPONENT/WEBSOCKET/websocket 템플릿 화면을 참조한다. WebSocket 클라이언트용 순수 HTML 샘플은 툴 설치 디렉토리/template/XPLUS/websocket 폴더의 websocket_client.html 파일을 참조한다. ===== 예시 ===== 템플릿 위치: /HTML5/COMPONENT/TCPCOMM/websocketsvr_basic 템플릿 파일 * [[xf5projecthome>template/screen/HTML5/COMPONENT/WEBSOCKETSVR/websocketsvr_basic.xml|websocketsvr_basic.xml]] * [[xf5projecthome>template/screen/HTML5/COMPONENT/WEBSOCKETSVR/websocketsvr_basic.js|websocketsvr_basic.js]] * [[xf5projecthome>template/template.html?xframe_screen_url=/HTML5/COMPONENT/WEBSOCKETSVR/websocketsvr_basic|새창으로 실행]] echo ''; echo ''; echo ''; ==== 화면 스크립트 ==== function btnInitXSvrComm_on_mouseup(objInst) { // 초기화 wssvr01.init(); } function btnStartXSvrComm_on_mouseup(objInst) { // 시작 wssvr01.open(); } function btnStopXSvrComm_on_mouseup(objInst) { // 종료 wssvr01.close(); grdSessionList.deleteall(); } function btnCloseSession_on_mouseup(objInst) { var nRet, nCheckedRowCount, nCheckedRow, strRemoteIpAddr, strRemotePortNo; nCheckedRowCount = grdSessionList.getcheckedrowcount(); if (nCheckedRowCount == 0) { screen.alert("연결 해제할 세션을 체크하세요."); return; } nCheckedRow = grdSessionList.getcheckedrow(0); strRemoteIpAddr = grdSessionList.getitemtext(nCheckedRow, 0); strRemotePortNo = grdSessionList.getitemtext(nCheckedRow, 1); // 특정 세션 해제 wssvr01.closesession(strRemoteIpAddr, strRemotePortNo); } function btnSendData_on_mouseup(objInst) { var nRet, nCheckedRowCount, nCheckedRow, strRemoteIpAddr, nRemotePortNo, strSocketKey, strSendData; nCheckedRowCount = grdSessionList.getcheckedrowcount(); if (nCheckedRowCount == 0) { screen.alert("데이터를 송신할 세션을 체크하세요."); return; } nCheckedRow = grdSessionList.getcheckedrow(0); strRemoteIpAddr = grdSessionList.getitemtext(nCheckedRow, 0); nRemotePortNo = grdSessionList.getitemtext(nCheckedRow, 1); strSocketKey = grdSessionList.getitemtext(nCheckedRow, 2); strSendData = fldSendData.gettext(); // 데이터 송신 wssvr01.send(strRemoteIpAddr, nRemotePortNo, strSendData); } function btnSendPing_on_mouseup(objInst) { var nRet, nCheckedRowCount, nCheckedRow, strRemoteIpAddr, nRemotePortNo, strSocketKey, strSendData; nCheckedRowCount = grdSessionList.getcheckedrowcount(); if (nCheckedRowCount == 0) { screen.alert("데이터를 송신할 세션을 체크하세요."); return; } nCheckedRow = grdSessionList.getcheckedrow(0); strRemoteIpAddr = grdSessionList.getitemtext(nCheckedRow, 0); nRemotePortNo = grdSessionList.getitemtext(nCheckedRow, 1); strSocketKey = grdSessionList.getitemtext(nCheckedRow, 2); strSendData = fldSendData.gettext(); // PING 데이터 송신 wssvr01.sendping(strRemoteIpAddr, nRemotePortNo); } function btnClearData_on_mouseup(objInst) { // 수신 데이터 정보 초기화 fldRecvIpAddr.settext(""); fldRecvPortNo.settext(""); fldRecvDataLength.settext(""); fldRecvData.settext(""); } function btnGetSessionCount_on_mouseup(objInst) { // 세션 갯수 조회 screen.alert(wssvr01.getsessioncount()); } ///////////////////////////////////////////////////////////////////////////////////////// // EVENT ///////////////////////////////////////////////////////////////////////////////////////// /** * 모듈 로딩 완료 및 컴포넌트 초기화 성공시 이벤트 * @param objInst 웹소켓서버 컴포넌트 오브젝트 */ function wssvr01_on_init(objInst) { factory.consoleprint(objInst.getname() + "_on_init>"); console.log(objInst.getname() + "_on_init>"); } /** * 웹소켓 세션 연결시 이벤트 * @param objInst 웹소켓서버 컴포넌트 오브젝트 * @param strRemoteIP 원격지 시스템의 IP 주소 * @param nRemotePort 원격지 시스템의 웹소켓 포트 번호 * @param strSocketKey 소켓 키 값 */ function wssvr01_on_open(objInst, strRemoteIP, nRemotePort, strSocketKey) { var nRow; factory.consoleprint("OnConnect> strRemoteIP = " + strRemoteIP); factory.consoleprint("OnConnect> nRemotePort = " + nRemotePort); factory.consoleprint("OnConnect> strSocketKey = " + strSocketKey); nRow = grdSessionList.additem(); grdSessionList.setitemtext(nRow, 0, strRemoteIP); grdSessionList.setitemtext(nRow, 1, nRemotePort); grdSessionList.setitemtext(nRow, 2, strSocketKey); } /** * 데이터 수신시 이벤트 * @param objInst 웹소켓서버 컴포넌트 오브젝트 * @param strRemoteIP 데이터를 송신한 시스템의 IP 주소 * @param nRemotePort 데이터를 송신한 시스템의 웹소켓 포트 번호 * @param strSocketKey 소켓 키 값 * @param nDataLen 수신한 데이터 길이 * @param strData 수신한 데이터 */ function wssvr01_on_recv(objInst, strRemoteIP, nRemotePort, strSocketKey, nDataLen, strData) { factory.consoleprint("on_recv> strRemoteIP = " + strRemoteIP); factory.consoleprint("on_recv> nRemotePort = " + nRemotePort); factory.consoleprint("on_recv> strSocketKey = " + strSocketKey); factory.consoleprint("on_recv> nDataLen = " + nDataLen); factory.consoleprint("on_recv> strData = " + strData); fldRecvIpAddr.settext(strRemoteIP); fldRecvPortNo.settext(nRemotePort); fldRecvDataLength.settext(nDataLen); fldRecvData.settext(strData); // ECHO 모드인 경우, 수신한 데이터를 그대로 리턴 if (chkEchoMode.getcheck()) { wssvr01.send(strRemoteIP, nRemotePort, strData); } } /** * 웹소켓 세션 해제시 이벤트 * @param objInst 웹소켓서버 컴포넌트 오브젝트 * @param strRemoteIP 세션이 해제된 시스템의 IP 주소 * @param nRemotePort 세션이 해제된 시스템의 웹소켓 포트 번호 * @param strSocketKey 소켓 키 값 */ function wssvr01_on_close(objInst, strRemoteIP, nRemotePort, strSocketKey) { var i, nRowCount; factory.consoleprint("OnClose> strRemoteIP = " + strRemoteIP); factory.consoleprint("OnClose> nRemotePort = " + nRemotePort); factory.consoleprint("OnClose> strSocketKey = " + strSocketKey); nRowCount = grdSessionList.getrowcount(); for (i = 0; i < nRowCount; i++) { if (grdSessionList.getitemtext(i, 0) == strRemoteIP) { if (grdSessionList.getitemtext(i, 1) == nRemotePort) { grdSessionList.deleterow(i); break; } } } } /** * 에러 발생시 이벤트 * @param objInst 웹소켓서버 컴포넌트 오브젝트 * @param nErrorCode 에러코드 * @param strErrorMsg 에러메시지 */ function wssvr01_on_error(objInst, nErrorCode, strErrorMsg) { screen.alert(objInst.getname() + "_on_error : " + nErrorCode + ", " + strErrorMsg); }