"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Logger_1 = require("./Logger");
var DataManager_1 = require("./data/DataManager");
var ServerRegReq_1 = require("./protocol/cs/server/register/ServerRegReq");
var ChannelClientManager_1 = require("./channel/ChannelClientManager");
var Result_1 = require("./Result");
var ServerUnregReq_1 = require("./protocol/cs/server/unregister/ServerUnregReq");
var DeviceGrpCreateReq_1 = require("./protocol/devicegroup/stable/create/DeviceGrpCreateReq");
var DeviceGrpAddReq_1 = require("./protocol/devicegroup/stable/add/DeviceGrpAddReq");
var DeviceGrpSubtractReq_1 = require("./protocol/devicegroup/stable/subtract/DeviceGrpSubtractReq");
var DeviceGrpDeleteReq_1 = require("./protocol/devicegroup/stable/delete/DeviceGrpDeleteReq");
var MinervaProtocol_1 = require("./protocol/MinervaProtocol");
var SendMulticastMsgReq_1 = require("./protocol/msg/downstream/multicast/SendMulticastMsgReq");
var SendBroadcastMsgReq_1 = require("./protocol/msg/downstream/broadcast/SendBroadcastMsgReq");
var SendGroupMsgReq_1 = require("./protocol/msg/group/downstream/SendGroupMsgReq");
/**
* A module that says hello!
* @module AppServerManager
*/
var AppServerManager = /** @class */ (function () {
function AppServerManager() {
}
AppServerManager.getInstance = function () {
if (this.instance == null) {
this.instance = new AppServerManager();
}
return this.instance;
};
/**
* @deprecated
*/
AppServerManager.prototype.initAppServer = function (option) {
Logger_1.Logger.debug(AppServerManager.TAG, "initAppServer enter");
//init push service
var dataMgr = DataManager_1.DataManager.getInstance();
var channelUrl = dataMgr.getChannelUrl();
//not yet registered
if (channelUrl === null) {
//do nothing
Logger_1.Logger.info("app server not yet registered...");
return;
}
// ChannelClientManager.getInstance()
// .request({ msgType: MinervaTypes.MSG_TYPE_INIT, mData: channelUrl });
};
/**
* @lends AppServerManager.prototype
* @method registerAppServer
* @description 앱서버를 등록 및 구동한다. 최초 앱서버 등록시 뿐 아니라 이후에도 앱서버 재구동시마다 호출하여 라이브러리가 구동하도록 해야 한다.
* 앱서버 등록 결과는 래셔널아울 콘솔에서도 실시간 확인이 가능하다.
* @param {string} serviceId 앱서버가 등록할 대상 고객 서비스의 서비스 아이디
* @param {string} regName 앱서버 등록 이름으로 래셔널아울 서비스의 관리자 콘솔에 표시되는 고객 서버의 이름 콘솔에서 앱 서버를 구분하는 역할을 한다.
* @param {string} [gateHost='gate.rationalowl.com'] 고객 앱 서버와 가장 가까운 래셔널아울 게이트서버
* @param {number} [gatePort=9081] 게이트서버의 포트
* @returns {Promise} 앱 서버 등록에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.registerAppServer = function (serviceId, regName, gateHost, gatePort) {
if (gateHost === void 0) { gateHost = 'gate.rationalowl.com'; }
if (gatePort === void 0) { gatePort = 9081; }
Logger_1.Logger.debug(AppServerManager.TAG, "registerAppServer enter");
var dataMgr = DataManager_1.DataManager.getInstance();
dataMgr.setServiceId(serviceId);
// dataMgr.setGateServerUrl(gateUrl);
var req = new ServerRegReq_1.ServerRegReq();
//set request fields.
req.setServiceId(serviceId);
req.setRegisterName(regName);
req.setType(MinervaProtocol_1.MinervaProtocol.SERVER_TYPE_JAVASCRIPT);
ChannelClientManager_1.ChannelClientManager.getInstance().init();
return ChannelClientManager_1.ChannelClientManager.getInstance()
.requestToGate({ packet: req, data: { gate: { host: gateHost, port: gatePort } } }).then(function (res) {
var resultCode = res.getResultCode();
return { resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode), appServerRegId: res.getServerRegId() };
});
};
/**
* @method unregisterAppServer
* @description 앱서버를 등록해제한다. 앱서버 등록 해제 결과는 래셔널아울 콘솔에서도 실시간 확인이 가능하다.
* @param {string} serviceId 앱서버가 등록된 고객 서비스의 서비스 아이디
* @param {string} serverRegId 등록해제할 앱서버 등록 아이디
* @returns {Promise} 앱 서버 등록해제에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.unregisterAppServer = function (serviceId, serverRegId) {
Logger_1.Logger.debug(AppServerManager.TAG, "unregisterAppServer enter");
var req = new ServerUnregReq_1.ServerUnregReq();
req.setServiceId(serviceId);
req.setServerRegId(serverRegId);
return ChannelClientManager_1.ChannelClientManager.getInstance()
.requestToGate({ packet: req }).then(function (res) {
var resultCode = res.getResultCode();
return { resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode) };
});
};
/**
* @method createDeviceGroup
* @description 단말 그룹을 생성한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} groupName 생성할 단말 그룹명
* @param {string} groupDesc 단말 그룹에 대한 설명 - optional 필드로 null입력가능
* @param {string[]} deviceList 단말 그룹 생성시 그룹 내 포함시킬 단말 목록 최대 2000단말 목록까지 포함가능
* @returns {Promise} 단말그룹 생성에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.createDeviceGroup = function (groupName, groupDesc, deviceList) {
Logger_1.Logger.debug(AppServerManager.TAG, "createDeviceGroup enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new DeviceGrpCreateReq_1.DeviceGrpCreateReq();
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
req.setGroupName(groupName);
req.setGroupDesc(groupDesc);
req.setDeviceList(deviceList);
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getAsyncResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode),
deviceGrpId: res.getGrpId(),
deviceGrpName: groupName,
deviceSize: res.getDeviceSize(),
desc: groupDesc,
failedDevcies: res.getFailedDevices()
};
});
};
/**
* @method addDeviceGroup
* @description 단말 그룹에 단말을 추가한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} groupId 대상 단말 그룹 아이디
* @param {string[]} deviceList 단말 그룹에 추가할 단말 목록 한번에 최대 2000단말 목록까지 포함가능 단말 그룹 내 단말 수는 최대 백만
* 대까지 포함 가능
* @returns {Promise} 단말 추가에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.addDeviceGroup = function (groupId, deviceList) {
Logger_1.Logger.debug(AppServerManager.TAG, "addDeviceGroup enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new DeviceGrpAddReq_1.DeviceGrpAddReq();
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
req.setGrpId(groupId);
req.setDeviceList(deviceList);
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getAsyncResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode),
deviceGrpId: res.getGrpId(),
totalDeviceSize: res.getTotalDeviceSize(),
addedDeviceSize: res.getAddedDeviceSize(),
failedDevcies: res.getFailedDevices()
};
});
};
/**
* @method subtractDeviceGroup
* @description 단말 그룹에서 단말을 제거한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} groupId 대상 단말 그룹 아이디
* @param {string[]} deviceList 단말 그룹에서 제거할 단말 목록 한번에 최대 2000단말 목록까지 포함가능
* @returns {Promise} 단말 제거에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.subtractDeviceGroup = function (groupId, deviceList) {
Logger_1.Logger.debug(AppServerManager.TAG, "subtractDeviceGroup enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new DeviceGrpSubtractReq_1.DeviceGrpSubtractReq();
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
req.setGrpId(groupId);
req.setDeviceList(deviceList);
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getAsyncResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode),
deviceGrpId: res.getGrpId(),
totalDeviceSize: res.getTotalDeviceSize(),
subtractDeviceSize: res.getSubtractDeviceSize(),
failedDevcies: res.getFailedDevices()
};
});
};
/**
* @method deleteDeviceGroup
* @description 단말 그룹을 삭제한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} groupId 대상 단말 그룹 아이디
* @returns {Promise} 단말 그룹 제거에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.deleteDeviceGroup = function (groupId) {
Logger_1.Logger.debug(AppServerManager.TAG, "deleteDeviceGroup enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new DeviceGrpDeleteReq_1.DeviceGrpDeleteReq();
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
req.setGrpId(groupId);
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getAsyncResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode),
deviceGrpId: res.getGrpId()
};
});
};
// ////////////////////////////////////////////////
// // send data
// ////////////////////////////////////////////////
// /**
// * unicast 메시지를 보낸다.
// * @param data 단말앱에 전달할 메시지
// * @param notiMsg 단말앱이 구동중이 아닐때 표시할 알림 문자
// * - 만약 null이면 data를 알림 창에 표시
// * @param deviceRegId 메시지를 전달 할 대상 단말 앱의 단말 등록 아이디
// * @param supportMsgQ 단말앱이 비활성일 때 미 전달 메시지를 큐잉할지 여부
// * - false 단말이 비활성으로 메시지 수신하지 않더라도 재발송하지 않는다.
// * - true 미전달 메시지를 메시징 서버에서 메시지 큐잉기간(디폴트 7일)동안 큐잉하고 있다가 단말상태가 활성상태가 되면 미전달 메시지를 단말 앱에 전달한다.
// * @return request id
// */
// public sendUnicastMsg(data: string, notiMsg: string, deviceRegId: string, isSupportMsgQ: boolean) {
// Logger.debug(AppServerManager.TAG, "sendUnicastMsg enter");
// const dataMgr: DataManager = DataManager.getInstance();
// const req: SendUnicastMsgReq = new SendUnicastMsgReq();
// //set request fields.
// req.setDeviceRegId(deviceRegId);
// req.setData(data);
// req.setServiceId(dataMgr.getServiceId());
// req.setServerRegId(dataMgr.getAppServerRegId());
// const supportMsgQ = isSupportMsgQ ? MinervaProtocol.MSG_Q_SUPPORT : MinervaProtocol.MSG_Q_NOT_SUPPORT;
// req.setSupportMsgQ(supportMsgQ);
// if (!notiMsg) {
// req.setNotiStr(notiMsg);
// }
// return ChannelClientManager.getInstance()
// .request({ packet: req }).then((res: SendUnicastMsgRes) => {
// const resultCode = res.getResultCode();
// return {
// resultCode, resultMsg: Result.getResultMessage(resultCode)
// };
// });
// }
/**
* @method sendMulticastMsg
* @description 한대 이상의 단말앱에 다운스트림 메시지를 발신한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} data 단말에 전달할 데이터
* @param {string[]} deviceRegIds 메시지를 전달할 대상 단말앱의 단말 등록 아이디 목록 최대 2000 단말 목록 제한
* @param {boolean} supportMsgQ 메시지 큐잉 지원 여부 true일 경우 단말이 전원꺼짐 등의 이유로 데이터통신이 불가할 경우 기본 3일 동안
* 래셔널아울 메시징 서버가 보관하다가 3일 이내 단말이 네트워크에 연결될 때 미전달 메시지를 전달한다.
* @param {string} [notiTitle=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 타이틀로 표시할 문자
* @param {string} [notiMsg=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 내용으로 표시할 문자
* @returns {Promise} 보낸 메시지에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.sendMulticastMsg = function (data, deviceRegIds, supportMsgQ, notiTitle, notiMsg) {
if (notiTitle === void 0) { notiTitle = null; }
if (notiMsg === void 0) { notiMsg = null; }
Logger_1.Logger.debug(AppServerManager.TAG, "sendMulticastMsg enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new SendMulticastMsgReq_1.SendMulticastMsgReq();
//set request fields.
req.setData(data);
req.setDeviceRegIds(deviceRegIds);
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
var supportMsgQ_ = (supportMsgQ == true) ? MinervaProtocol_1.MinervaProtocol.MSG_Q_SUPPORT : MinervaProtocol_1.MinervaProtocol.MSG_Q_NOT_SUPPORT;
req.setSupportMsgQ(supportMsgQ_);
if (notiTitle) {
req.setNotiTitle(notiTitle);
}
if (notiMsg) {
req.setNotiBody(notiMsg);
}
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode)
};
});
};
/**
* @method sendBroadcastMsg
* @description 고객 서비스에 등록된 모든 단말앱에 다운스트림 메시지를 발신한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} data 단말에 전달할 데이터
* @param {boolean} supportMsgQ 메시지 큐잉 지원 여부 true일 경우 단말이 전원꺼짐 등의 이유로 데이터통신이 불가할 경우 기본 3일 동안
* 래셔널아울 메시징 서버가 보관하다가 3일 이내 단말이 네트워크에 연결될 때 미전달 메시지를 전달한다.
* @param {string} [notiTitle=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 타이틀로 표시할 문자
* @param {string} [notiMsg=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 내용으로 표시할 문자
* @returns {Promise} 보낸 메시지에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.sendBroadcastMsg = function (data, supportMsgQ, notiTitle, notiMsg) {
if (notiTitle === void 0) { notiTitle = null; }
if (notiMsg === void 0) { notiMsg = null; }
Logger_1.Logger.debug(AppServerManager.TAG, "sendBroadcastMsg enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new SendBroadcastMsgReq_1.SendBroadcastMsgReq();
//set request fields.
req.setData(data);
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
var supportMsgQ_ = (supportMsgQ == true) ? MinervaProtocol_1.MinervaProtocol.MSG_Q_SUPPORT : MinervaProtocol_1.MinervaProtocol.MSG_Q_NOT_SUPPORT;
req.setSupportMsgQ(supportMsgQ_);
if (notiTitle) {
req.setNotiTitle(notiTitle);
}
if (notiMsg) {
req.setNotiBody(notiMsg);
}
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode)
};
});
};
/**
* @method sendGroupMsg
* @description 단말 그룹에 등록된 단말앱에 다운스트림 메시지를 발신한다. 래셔널아울 콘솔에서도 실시간 결과 확인이 가능하다.
* @param {string} data 단말에 전달할 데이터
* @param {string} deviceGroupId 단말 그룹 아이디
* @param {boolean} supportMsgQ 메시지 큐잉 지원 여부 true일 경우 단말이 전원꺼짐 등의 이유로 데이터통신이 불가할 경우 기본 3일 동안
* 래셔널아울 메시징 서버가 보관하다가 3일 이내 단말이 네트워크에 연결될 때 미전달 메시지를 전달한다.
* @param {string} [notiTitle=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 타이틀로 표시할 문자
* @param {string} [notiMsg=null] 알림 용도로 메시지 전달 시 단말앱이 비활성시 알림 내용으로 표시할 문자
* @returns {Promise} 보낸 메시지에 대한 응답을 Promise로 리턴
*/
AppServerManager.prototype.sendGroupMsg = function (data, deviceGroupId, supportMsgQ, notiTitle, notiMsg) {
if (notiTitle === void 0) { notiTitle = null; }
if (notiMsg === void 0) { notiMsg = null; }
Logger_1.Logger.debug(AppServerManager.TAG, "sendGroupMsg enter");
var dataMgr = DataManager_1.DataManager.getInstance();
var req = new SendGroupMsgReq_1.SendGroupMsgReq();
//set request fields.
req.setData(data);
req.setDeviceGroupId(deviceGroupId);
req.setServiceId(dataMgr.getServiceId());
req.setServerRegId(dataMgr.getAppServerRegId());
var supportMsgQ_ = (supportMsgQ == true) ? MinervaProtocol_1.MinervaProtocol.MSG_Q_SUPPORT : MinervaProtocol_1.MinervaProtocol.MSG_Q_NOT_SUPPORT;
req.setSupportMsgQ(supportMsgQ_);
if (notiTitle) {
req.setNotiTitle(notiTitle);
}
if (notiMsg) {
req.setNotiBody(notiMsg);
}
return ChannelClientManager_1.ChannelClientManager.getInstance()
.request({ packet: req }).then(function (res) {
var resultCode = res.getResultCode();
return {
resultCode: resultCode, resultMsg: Result_1.Result.getResultMessage(resultCode)
};
});
};
/**
* @method addReceivedUpstreamMsgListener
* @description 업스트림 메시지에 대한 응답을 받기 위해 리스너를 등록한다.
* @param {UpstreamMessageListenerType} listener 콜백 리스너
*/
AppServerManager.prototype.addReceivedUpstreamMsgListener = function (listener) {
ChannelClientManager_1.ChannelClientManager.getInstance().addReceivedUpstreamMsgListener(listener);
};
/**
* @method removeReceivedUpstreamMsgListener
* @description 등록한 리스너를 제거한다.
* @param {UpstreamMessageListenerType} listener 제거할 콜백 리스너
*/
AppServerManager.prototype.removeReceivedUpstreamMsgListener = function (listener) {
ChannelClientManager_1.ChannelClientManager.getInstance().removeReceivedUpstreamMsgListener(listener);
};
AppServerManager.prototype.release = function (done) {
ChannelClientManager_1.ChannelClientManager.getInstance().release(done);
};
AppServerManager.TAG = "AppServerManager";
return AppServerManager;
}());
exports.AppServerManager = AppServerManager;
//# sourceMappingURL=AppServerManager.js.map