====== 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);
}