Source: AppServerManager.js

"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