diff --git a/common/http.api.js b/common/http.api.js index 0279728..aa1fa72 100644 --- a/common/http.api.js +++ b/common/http.api.js @@ -18,6 +18,9 @@ const install = (Vue, vm) => { }, createChatRoom({chat_name,live_desc,spec,goods_id,cover_img}){ return vm.$u.post("Streaming/createChatRoom",{chat_name,live_desc,spec,goods_id,cover_img}) + }, + liveStreamList(){ + return vm.$u.post("Streaming/liveStreamList") } } // 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下 diff --git a/pages.json b/pages.json index d636b7a..1ad0a42 100644 --- a/pages.json +++ b/pages.json @@ -207,6 +207,17 @@ } } } + }, + { + "path": "pages/release/zhibo", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "app-plus": { + "titleNView": false, + "animationType": "slide-in-bottom" + } + } } ], "globalStyle": { diff --git a/pages/login/login.vue b/pages/login/login.vue index d1bff77..9d24993 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -69,6 +69,7 @@ }else{ uni.setStorageSync("token",res.data.token) uni.setStorageSync("userinfo",res.data) + uni.setStorageSync('rongyun',res.data.rongcloud_token) this.$u.route({ url:"/pages/index/index", type:"switchTab" diff --git a/pages/release/tosign.vue b/pages/release/tosign.vue index c484075..c3e082f 100644 --- a/pages/release/tosign.vue +++ b/pages/release/tosign.vue @@ -6,7 +6,7 @@ - + @@ -19,16 +19,16 @@ - {{max_two}}/20 - - - 售货袋 + {{20 - form.text.length}}/20 + + + 售货袋 直播封面图 - + {{relerest}} @@ -49,16 +49,18 @@ form: { name: '', intro: '', - sex: '' + sex: '', + text:'' }, value: '', max_two : '20', - max : '优秀的标题可以卖的更好哦~', + max : '', titleMaxLength : '20', show: false, relerest: '开始直播', fileListes:[], - rSelect:[] + rSelect:[], + image:"" }; }, methods: { @@ -88,7 +90,8 @@ this.init() }, tupian(a){ - console.log(a) + console.log(JSON.parse(a.data).data) + this.image = JSON.parse(a.data).data.file_name }, navto(url){ this.$u.route({ @@ -101,7 +104,16 @@ live_desc:this.form.text, spec:this.rSelect.join(","), goods_id:uni.getStorageSync("gouwudai"), - + cover_img:this.image + }).then((res)=>{ + console.log(res) + this.$u.route({ + url:"/pages/release/zhibo", + params:{ + url:res.data.url.replace("&","*"), + id:res.data.chat_id + } + }) }) }, init(){ @@ -124,6 +136,7 @@ }, onLoad(){ this.init() + uni.removeStorageSync('gouwudai') } }; @@ -226,19 +239,19 @@ } image:nth-child(1) { - width: 36rpx; - height: 35rpx; - position: absolute; - right: 110rpx; - } - - image:nth-child(2) { width: 36rpx; height: 35rpx; position: absolute; right: 48rpx; } + // image:nth-child(2) { + // width: 36rpx; + // height: 35rpx; + // position: absolute; + // right: 48rpx; + // } + .labales { border-bottom: 1px #fff solid; margin-bottom: 180rpx; diff --git a/pages/release/video.vue b/pages/release/video.vue index ec3b0d3..c7e4abb 100644 --- a/pages/release/video.vue +++ b/pages/release/video.vue @@ -54,7 +54,6 @@ } }, components: { - uniBadge } } diff --git a/pages/release/zhibo.nvue b/pages/release/zhibo.nvue new file mode 100644 index 0000000..bd36da7 --- /dev/null +++ b/pages/release/zhibo.nvue @@ -0,0 +1,385 @@ + + + + + + + + 全部商品 + 2件 + + + + + + + + + {{i.goods_name}} + {{i.goods_advword}} + + + ¥{{i.goods_price}} + ¥{{i.goods_marketprice}} + + + + + + + + + + + + + + {{info.member_name}} + asdasdsa | sadasdas + + + + + + + \ No newline at end of file diff --git a/static/image/release/off.png b/static/image/release/off.png new file mode 100644 index 0000000..052411b Binary files /dev/null and b/static/image/release/off.png differ diff --git a/static/image/release/on.png b/static/image/release/on.png new file mode 100644 index 0000000..1e65a58 Binary files /dev/null and b/static/image/release/on.png differ diff --git a/static/rongyun.js b/static/rongyun.js new file mode 100644 index 0000000..8a3cac4 --- /dev/null +++ b/static/rongyun.js @@ -0,0 +1,10571 @@ +/* +* RongIMLib.js v3.0.4-dev +* CodeVersion: 7facb2f07f6643459b0131b5f4cf3acf6ac9d8e0 +* Release Date: Fri Jun 19 2020 16:29:33 GMT+0800 (China Standard Time) +* Copyright 2020 RongCloud +* Released under the MIT License. +*/ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.RongIMLib = factory()); +}(this, (function () { 'use strict'; + + var versionToServer = "3.0.4"; + + var SDK_VERSION = versionToServer; + + var ERROR_INFO = { + TIMEOUT: { + code: -1, + msg: 'Network timeout' + }, + SDK_INTERNAL_ERROR: { + code: -2, + msg: 'SDK internal error' + }, + PARAMETER_ERROR: { + code: -3, + msg: 'Please check the parameters, the {param} expected a value of {expect} but received {current}' + }, + REJECTED_BY_BLACKLIST: { + code: 405, + msg: 'Blacklisted by the other party' + }, + SEND_TOO_FAST: { + code: 20604, + msg: 'Sending messages too quickly' + }, + NOT_IN_GROUP: { + code: 22406, + msg: 'Not in group' + }, + FORBIDDEN_IN_GROUP: { + code: 22408, + msg: 'Forbbiden from speaking in the group' + }, + NOT_IN_CHATROOM: { + code: 23406, + msg: 'Not in chatRoom' + }, + FORBIDDEN_IN_CHATROOM: { + code: 23408, + msg: 'Forbbiden from speaking in the chatRoom' + }, + KICKED_FROM_CHATROOM: { + code: 23409, + msg: 'Kicked out and forbbiden from joining the chatRoom' + }, + CHATROOM_NOT_EXIST: { + code: 23410, + msg: 'ChatRoom does not exist' + }, + CHATROOM_IS_FULL: { + code: 23411, + msg: 'ChatRoom members exceeded' + }, + PARAMETER_INVALID_CHATROOM: { + code: 23412, + msg: 'Invalid chatRoom parameters' + }, + ROAMING_SERVICE_UNAVAILABLE_CHATROOM: { + code: 23414, + msg: 'ChatRoom message roaming service is not open, Please go to the developer to open this service' + }, + RECALLMESSAGE_PARAMETER_INVALID: { + code: 25101, + msg: 'Invalid recall message parameter' + }, + PUSHSETTING_PARAMETER_INVALID: { + code: 26001, + msg: 'Invalid push parameter' + }, + OPERATION_BLOCKED: { + code: 20605, + msg: 'Operation is blocked' + }, + OPERATION_NOT_SUPPORT: { + code: 20606, + msg: 'Operation is not supported' + }, + MSG_BLOCKED_SENSITIVE_WORD: { + code: 21501, + msg: 'The sent message contains sensitive words' + }, + REPLACED_SENSITIVE_WORD: { + code: 21502, + msg: 'Sensitive words in the message have been replaced' + }, + NOT_CONNECTED: { + code: 30001, + msg: 'Please connect successfully first' + }, + NAVI_REQUEST_ERROR: { + code: 30007, + msg: 'Navigation http request failed' + }, + CMP_REQUEST_ERROR: { + code: 30010, + msg: 'CMP sniff http request failed' + }, + CONN_APPKEY_FAKE: { + code: 31002, + msg: 'Your appkey is fake' + }, + CONN_MINI_SERVICE_NOT_OPEN: { + code: 31003, + msg: 'Mini program service is not open, Please go to the developer to open this service' + }, + CONN_TOKEN_INCORRECT: { + code: 31004, + msg: 'Your token is not valid or expired' + }, + CONN_NOT_AUTHRORIZED: { + code: 31005, + msg: 'AppKey and Token do not match' + }, + CONN_REDIRECTED: { + code: 31006, + msg: 'Connection redirection' + }, + CONN_APP_BLOCKED_OR_DELETED: { + code: 31008, + msg: 'AppKey is banned or deleted' + }, + CONN_USER_BLOCKED: { + code: 31009, + msg: 'User blocked' + }, + CONN_DOMAIN_INCORRECT: { + code: 31012, + msg: 'Connect domain error, Please check the set security domain' + }, + ROAMING_SERVICE_UNAVAILABLE: { + code: 33007, + msg: 'Roaming service cloud is not open, Please go to the developer to open this service' + }, + RC_CONNECTION_EXIST: { + code: 34001, + msg: 'Connection already exists' + }, + CHATROOM_KV_EXCEED: { + code: 23423, + msg: 'ChatRoom KV setting exceeds maximum' + }, + CHATROOM_KV_OVERWRITE_INVALID: { + code: 23424, + msg: 'ChatRoom KV already exists' + }, + CHATROOM_KV_STORE_NOT_OPEN: { + code: 23426, + msg: 'ChatRoom KV storage service is not open, Please go to the developer to open this service' + }, + CHATROOM_KEY_NOT_EXIST: { + code: 23427, + msg: 'ChatRoom key does not exist' + } + }; + var ERROR_CODE = {}; + var ERROR_CODE_TO_INFO = {}; + + for (var name$1 in ERROR_INFO) { + var info = ERROR_INFO[name$1]; + var code = info.code; + ERROR_CODE[name$1] = code; + ERROR_CODE[code] = name$1; + ERROR_CODE_TO_INFO[code] = info; + } + + var SERVER_ERROR_TO_CODE = { + '1': ERROR_INFO.ROAMING_SERVICE_UNAVAILABLE.code + }; + + var _CONNECT_SERVER_STATU, _SERVER_DISCONNECT_ST, _TRANSPORTER_STATUS_T; + var NAVI_ERROR_INFO = { + '401': ERROR_INFO.CONN_TOKEN_INCORRECT, + '403': ERROR_INFO.CONN_APPKEY_FAKE + }; + var CONNECTION_STATUS = { + CONNECTED: 0, + CONNECTING: 1, + DISCONNECTED: 2, + NETWORK_UNAVAILABLE: 3, + SOCKET_ERROR: 4, + KICKED_OFFLINE_BY_OTHER_CLIENT: 6, + BLOCKED: 12 + }; + var SERVER_DISCONNECT_STATUS = { + KICKED_OFFLINE_BY_OTHER_CLIENT: 1, + BLOCKED: 2 + }; + var CONNECT_SERVER_STATUS = { + IDENTIFIER_REJECTED: 2, + CONN_MINI_SERVICE_NOT_OPEN: 3, + TOKEN_INCORRECT: 4, + NOT_AUTHORIZED: 5, + REDIRECT: 6, + PACKAGE_ERROR: 7, + APP_BLOCK_OR_DELETE: 8, + BLOCK: 9, + TOKEN_EXPIRE: 10, + DEVICE_ERROR: 11, + DOMAIN_INCORRECT: 12 + }; + var CONNECT_SERVER_STATUS_MAP_ERROR_INFO = (_CONNECT_SERVER_STATU = {}, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.IDENTIFIER_REJECTED] = ERROR_INFO.CONN_APPKEY_FAKE, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.CONN_MINI_SERVICE_NOT_OPEN] = ERROR_INFO.CONN_MINI_SERVICE_NOT_OPEN, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.TOKEN_INCORRECT] = ERROR_INFO.CONN_TOKEN_INCORRECT, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.NOT_AUTHORIZED] = ERROR_INFO.CONN_NOT_AUTHRORIZED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.REDIRECT] = ERROR_INFO.CONN_REDIRECTED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.APP_BLOCK_OR_DELETE] = ERROR_INFO.CONN_APP_BLOCKED_OR_DELETED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.BLOCK] = ERROR_INFO.CONN_USER_BLOCKED, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.TOKEN_EXPIRE] = ERROR_INFO.CONN_TOKEN_INCORRECT, _CONNECT_SERVER_STATU[CONNECT_SERVER_STATUS.DOMAIN_INCORRECT] = ERROR_INFO.CONN_DOMAIN_INCORRECT, _CONNECT_SERVER_STATU); + var TRANSPORTER_STATUS = { + CONNECTED: CONNECTION_STATUS.CONNECTED, + KICKED_OFFLINE_BY_OTHER_CLIENT: CONNECTION_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT, + BLOCKED: CONNECTION_STATUS.BLOCKED, + CLOSE_NORMAL: 1000, + CLOSE_GOING_AWAY: 1001, + CLOSE_PROTOCOL_ERROR: 1002, + CLOSE_UNSUPPORTED: 1003, + CLOSE_NO_STATUS: 1005, + CLOSE_ABNORMAL: 1006, + UNSUPPORTED_DATA: 1007, + POLICY_VIOLATION: 1008, + CLOSE_TOO_LARGE: 1009, + MISSING_EXTENSION: 1010, + INTERNAL_ERROR: 1011, + SERVICE_RESTART: 1012, + TRY_AGAIN_LATER: 1013, + TSL_HANDSHAKE: 1015, + PING_FIRST_TIMEOUT: 2001, + PING_TIMEOUT: 2002, + DISCONNECT_TOO_FAST: 2003, + EXCEED_MESSAGE_ID_LIMIT: 2004, + COMET_REQUEST_ERROR: 2005, + MINI_URL_NOT_IN_DOMAIN_LIST: 2006 + }; + var MINI_ERROR_MSG_TO_STATUS = { + 'url not in domain list': TRANSPORTER_STATUS.MINI_URL_NOT_IN_DOMAIN_LIST + }; + var SERVER_DISCONNECT_STATUS_TO_TRANSPORTER_STATUS = (_SERVER_DISCONNECT_ST = {}, _SERVER_DISCONNECT_ST[SERVER_DISCONNECT_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT] = TRANSPORTER_STATUS.KICKED_OFFLINE_BY_OTHER_CLIENT, _SERVER_DISCONNECT_ST[SERVER_DISCONNECT_STATUS.BLOCKED] = TRANSPORTER_STATUS.BLOCKED, _SERVER_DISCONNECT_ST); + var TRANSPORTER_STATUS_NEED_UPDATE_CMP = [TRANSPORTER_STATUS.CLOSE_NORMAL, TRANSPORTER_STATUS.CLOSE_GOING_AWAY, TRANSPORTER_STATUS.CLOSE_PROTOCOL_ERROR, TRANSPORTER_STATUS.CLOSE_UNSUPPORTED, TRANSPORTER_STATUS.UNSUPPORTED_DATA, TRANSPORTER_STATUS.POLICY_VIOLATION, TRANSPORTER_STATUS.MISSING_EXTENSION, TRANSPORTER_STATUS.INTERNAL_ERROR, TRANSPORTER_STATUS.SERVICE_RESTART, TRANSPORTER_STATUS.TRY_AGAIN_LATER, TRANSPORTER_STATUS.TSL_HANDSHAKE, TRANSPORTER_STATUS.PING_FIRST_TIMEOUT, TRANSPORTER_STATUS.DISCONNECT_TOO_FAST, TRANSPORTER_STATUS.COMET_REQUEST_ERROR]; + var TRANSPORTER_STATUS_NEED_RECONNECT = TRANSPORTER_STATUS_NEED_UPDATE_CMP.concat([TRANSPORTER_STATUS.PING_TIMEOUT, TRANSPORTER_STATUS.CLOSE_ABNORMAL, TRANSPORTER_STATUS.EXCEED_MESSAGE_ID_LIMIT, TRANSPORTER_STATUS.COMET_REQUEST_ERROR]); + var TRANSPORTER_STATUS_TO_CONNECTION_STATUS = (_TRANSPORTER_STATUS_T = {}, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_GOING_AWAY] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_PROTOCOL_ERROR] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_UNSUPPORTED] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_NO_STATUS] = CONNECTION_STATUS.DISCONNECTED, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_ABNORMAL] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.DISCONNECT_TOO_FAST] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.UNSUPPORTED_DATA] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.POLICY_VIOLATION] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.CLOSE_TOO_LARGE] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.MISSING_EXTENSION] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.INTERNAL_ERROR] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.SERVICE_RESTART] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.TRY_AGAIN_LATER] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.TSL_HANDSHAKE] = CONNECTION_STATUS.SOCKET_ERROR, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.PING_FIRST_TIMEOUT] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.PING_TIMEOUT] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T[TRANSPORTER_STATUS.COMET_REQUEST_ERROR] = CONNECTION_STATUS.NETWORK_UNAVAILABLE, _TRANSPORTER_STATUS_T); + + var CONNECT_TYPE = { + COMET: 'comet', + WEBSOCKET: 'websocket' + }; + var CONVERSATION_TYPE = { + PRIVATE: 1, + GROUP: 3, + CHATROOM: 4, + CUSTOMER_SERVICE: 5, + SYSTEM: 6, + RTC_ROOM: 12 + }; + var MESSAGE_DIRECTION = { + SEND: 1, + RECEIVE: 2 + }; + var MESSAGS_TIME_ORDER = { + DESC: 0, + ASC: 1 + }; + var CHATROOM_ORDER = { + ASC: 1, + DESC: 2 + }; + var RECALL_MESSAGE_TYPE = 'RC:RcCmd'; + var MENTIOND_TYPE = { + ALL: 1, + SINGAL: 2 + }; + var MESSAGE_TYPE = { + TEXT: 'RC:TxtMsg', + VOICE: 'RC:VcMsg', + HQ_VOICE: 'RC:HQVCMsg', + IMAGE: 'RC:ImgMsg', + GIF: 'RC:GIFMsg', + RICH_CONTENT: 'RC:ImgTextMsg', + LOCATION: 'RC:LBSMsg', + FILE: 'RC:FileMsg', + SIGHT: 'RC:SightMsg', + COMBINE: 'RC:CombineMsg', + CHRM_KV_NOTIFY: 'RC:chrmKVNotiMsg', + LOG_COMMAND: 'RC:LogCmdMsg' + }; + var RTC_API_TYPE = { + ROOM: 1, + PERSON: 2 + }; + var FILE_TYPE = { + IMAGE: 1, + AUDIO: 2, + VIDEO: 3, + FILE: 4 + }; + var CHATROOM_ENTRY_TYPE = { + UPDATE: 1, + DELETE: 2 + }; + var NOTIFICATION_STATUS = { + DO_NOT_DISTURB: 1, + NOTIFY: 2 + }; + var product = { + CONNECT_TYPE: CONNECT_TYPE, + CONNECTION_STATUS: CONNECTION_STATUS, + CONVERSATION_TYPE: CONVERSATION_TYPE, + MESSAGE_DIRECTION: MESSAGE_DIRECTION, + MESSAGS_TIME_ORDER: MESSAGS_TIME_ORDER, + CHATROOM_ORDER: CHATROOM_ORDER, + RECALL_MESSAGE_TYPE: RECALL_MESSAGE_TYPE, + MESSAGE_TYPE: MESSAGE_TYPE, + MENTIOND_TYPE: MENTIOND_TYPE, + SDK_VERSION: SDK_VERSION, + FILE_TYPE: FILE_TYPE, + CHATROOM_ENTRY_TYPE: CHATROOM_ENTRY_TYPE, + NOTIFICATION_STATUS: NOTIFICATION_STATUS + }; + + var IM_TIMEOUT = 30000; + var IM_PING_INTERVAL_TIME = 30000; + var IM_COMET_PULLMSG_TIMEOUT = 45000; + var IM_PING_MAX_TIMEOUT = 6000; + var IM_PING_MIN_TIMEOUT = 2000; + var HTTP_TIMEOUT = 60000; + var PULL_MSG_TIME = 180000; + var NAVI_EXPIRED_TIME = 7200000; + var CMP_SNIFF_INTERNAL_TIME = 1000; + var FIRST_PING_TIMEOUT = 1000; + var NAVI_REQUEST_SUCCESS_CODE = 200; + var NAVI_SEPARATOR_IN_TOKEN = '@'; + var DOMAIN_SEPARATOR_IN_NAVLIST = ';'; + var DOMAIN_SEPARATOR_IN_CMPLIST = ','; + var MAX_SINGAL_ID = 65535; + var MINIMUM_CONNECT_DURATION = 5000; + var CHATROOM_KEY_LENGTH = { + MAX: 128, + MIN: 1 + }; + var CHATROOM_VALUE_LENGTH = { + MAX: 4096, + MIN: 1 + }; + var TYPE_HAS_CONVERSATION = [CONVERSATION_TYPE.PRIVATE, CONVERSATION_TYPE.GROUP, CONVERSATION_TYPE.SYSTEM]; + var PLATFORM = { + WEB: 'web', + WX: 'wx', + ZFB: 'zfb', + TT: 'tt', + BAIDU: 'baidu', + QUICK_APP: 'quick_app' + }; + var REQUEST_METHOD = { + POST: 'post', + GET: 'get' + }; + var STORAGE_ROOT_KEY = 'rc-'; + var STORAGE_DEVICE_ID_KEY = STORAGE_ROOT_KEY + 'deviceId'; + var STORAGE_SESSION_ID_KEY = STORAGE_ROOT_KEY + 'sessionId'; + var STORAGE_NAVI = { + ROOT_KEY_TPL: 'nav-{appkey}-{UID}', + SUB_KEY: { + CONNECT_TYPE: 'connettype', + TIME_WHEN_SAVED: 'time', + RESPONSE: 'resp' + } + }; + var STORAGE_SYNC_TIME = { + ROOT_KEY_TPL: 'sync-{appkey}-{userId}', + SUB_KEY: { + SENDBOX: 'send', + INBOX: 'in' + } + }; + var STORAGE_CONVERSATION = { + ROOT_KEY_TPL: 'con-{appkey}-{userId}', + SUB_KEY: { + ROOT_TPL: '{type}-{id}', + UNREAD_COUNT: 'c', + UNREAD_LAST_TIME: 't', + HAS_MENTIOND: 'hm', + MENTIOND_INFO: 'm', + NOTIFICATION: 'no', + TOP: 'to' + } + }; + var STORAGE_CONVERSATION_STATUS = { + ROOT_KEY_TPL: 'con-s-{appkey}-{userId}', + SUB_KEY: { + TIME: 't' + } + }; + var STORAGE_USER_SETTING = { + ROOT_KEY_TPL: 'sett-{appkey}-{userId}', + SUB_KEY: { + VERSION: 'v', + SETTINGS: 's' + } + }; + var HTTP_PROTOCOL = { + HTTP: 'http:', + HTTPS: 'https:', + FILE: 'file:' + }; + var WS_PROTOCOL = { + WSS: 'wss:', + WS: 'ws:' + }; + var NAVI_CALLBACK_NAME = 'getServerEndpoint'; + var NAVI_TYPE = { + COMET: 'cometnavi', + WEBSOCKET: 'navi' + }; + var NAVI_URL_TPL = '{url}/{type}.js?appId={appkey}&token={token}&callBack=' + NAVI_CALLBACK_NAME + '&r={random}&v=' + SDK_VERSION; + var CMP_URL_TPL = '{protocol}//{domain}/websocket?appId={appkey}&token={token}&apiVer={apiVer}&sdkVer=' + SDK_VERSION; + var MINI_CMP_URL_TPL = '{protocol}//{domain}/websocket?appId={appkey}&token={token}&apiVer={apiVer}&sdkVer=' + SDK_VERSION + '&platform={platform}'; + var COMET_REQ_HAS_TOPIC_URL_TPL = '{protocol}//{domain}/websocket?messageid={messageId}&header={headerCode}&sessionid={sessionId}&topic={topic}&targetid={targetId}&pid={pid}'; + var COMET_REQ_NO_TOPIC_URL_TPL = '{protocol}//{domain}/websocket?messageid={messageId}&header={headerCode}&sessionid={sessionId}&pid={pid}'; + var COMET_PULL_URL_TPL = '{protocol}//{domain}/pullmsg.js?sessionid={sessionId}×trap={timestamp}&pid={pid}'; + var TIMER_TYPE = { + INTERVAL: 'interval', + TIMEOUT: 'timeout' + }; + var TIMER_STATUS = { + PENNDING: 'pendding', + BUSY: 'busy', + ENDING: 'ending' + }; + var PLATFORM_TYPE = { + MINI: 'MiniProgram', + WEB: 'Web' + }; + + var UnKown = 'UnKown'; + + var isMiniEnv = function isMiniEnv(global) { + return global !== window; + }; + + var hasMiniBaseEvent = function hasMiniBaseEvent(miniGlobal) { + var baseMiniEventNames = ['canIUse', 'getSystemInfo']; + + for (var i = 0, max = baseMiniEventNames.length; i < max; i++) { + var baseEventName = baseMiniEventNames[i]; + + if (!miniGlobal[baseEventName]) { + return false; + } + } + + return true; + }; + + var getEnvInfo = function getEnvInfo() { + if (typeof wx !== 'undefined' && hasMiniBaseEvent(wx)) { + return { + platform: PLATFORM.WX, + global: wx + }; + } else if (typeof swan !== 'undefined' && hasMiniBaseEvent(swan)) { + return { + platform: PLATFORM.BAIDU, + global: swan + }; + } else if (typeof tt !== 'undefined' && hasMiniBaseEvent(tt)) { + return { + platform: PLATFORM.TT, + global: tt + }; + } else if (typeof my !== 'undefined' && hasMiniBaseEvent(my)) { + return { + platform: PLATFORM.ZFB, + global: my + }; + } else { + return { + platform: PLATFORM.WEB, + global: window + }; + } + }; + + var getWebSystemInfo = function getWebSystemInfo() { + var userAgent = navigator.userAgent; + var version, type; + var condition = { + IE: /rv:([\d.]+)\) like Gecko|MSIE ([\d.]+)/, + Edge: /Edge\/([\d.]+)/, + Firefox: /Firefox\/([\d.]+)/, + Opera: /(?:OPERA|OPR).([\d.]+)/, + WeiXin: /MicroMessenger\/([\d.]+)/, + QQBrowser: /QQBrowser\/([\d.]+)/, + Chrome: /Chrome\/([\d.]+)/, + Safari: /Version\/([\d.]+).*Safari/ + }; + + for (var key in condition) { + if (!condition.hasOwnProperty(key)) continue; + var browserContent = userAgent.match(condition[key]); + + if (browserContent) { + type = key; + version = browserContent[1] || browserContent[2]; + break; + } + } + + return { + model: type || UnKown, + version: version || UnKown + }; + }; + + var getMiniSystemInfo = function getMiniSystemInfo(global) { + var systemInfo = global.getSystemInfoSync() || {}; + var model = systemInfo.model, + brand = systemInfo.brand; + + if (model && brand) { + model = model + ' ' + brand; + } + + systemInfo.model = model; + return systemInfo; + }; + + var getProtocol = function getProtocol(global) { + var location = global.location || {}; + var isHttp = location.protocol === HTTP_PROTOCOL.HTTP || location.protocol === HTTP_PROTOCOL.FILE; + var protocol = { + http: isHttp ? HTTP_PROTOCOL.HTTP : HTTP_PROTOCOL.HTTPS, + ws: WS_PROTOCOL.WSS + }; + + if (isHttp) { + protocol.ws = WS_PROTOCOL.WS; + } + + return protocol; + }; + + var adaptGlobalObjectCreate = function adaptGlobalObjectCreate(global, isMini) { + if (!isMini && !global.Object.create) { + global.Object.create = function (o, properties) { + if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o);else if (o === null) throw new Error('This browser\'s implementation of Object.create is a shim and doesn\'t support \'null\' as the first argument.'); + if (typeof properties !== 'undefined') throw new Error('This browser\'s implementation of Object.create is a shim and doesn\'t support a second argument.'); + + function F() {} + + F.prototype = o; + return new F(); + }; + } + }; + + var getMiniGlobal = function getMiniGlobal(global) { + return Object.assign(global, { + JSON: JSON, + Promise: Promise, + setTimeout: setTimeout, + setInterval: setInterval, + encodeURIComponent: encodeURIComponent, + clearTimeout: function (_clearTimeout) { + function clearTimeout(_x) { + return _clearTimeout.apply(this, arguments); + } + + clearTimeout.toString = function () { + return _clearTimeout.toString(); + }; + + return clearTimeout; + }(function (id) { + clearTimeout(id); + }), + clearInterval: function (_clearInterval) { + function clearInterval(_x2) { + return _clearInterval.apply(this, arguments); + } + + clearInterval.toString = function () { + return _clearInterval.toString(); + }; + + return clearInterval; + }(function (id) { + clearInterval(id); + }) + }); + }; + + var envInfo = getEnvInfo(); + var platform = envInfo.platform, + global$1 = envInfo.global; + var isMini = isMiniEnv(global$1); + var protocol = getProtocol(global$1); + var system = isMini ? getMiniSystemInfo(global$1) : getWebSystemInfo(); + system.name = platform; + adaptGlobalObjectCreate(global$1, isMini); + global$1 = isMini ? getMiniGlobal(global$1) : global$1; + var env = { + global: global$1, + system: system, + isMini: isMini, + protocol: protocol + }; + + var global$2 = env.global, + system$1 = env.system; + var isZFB = system$1.name === PLATFORM.ZFB; + + var ZFBStorage = function () { + function ZFBStorage() {} + + var _proto = ZFBStorage.prototype; + + _proto.set = function set(key, value) { + global$2.setStorageSync({ + key: key, + data: value + }); + }; + + _proto.get = function get(key) { + return global$2.getStorageSync({ + key: key + }); + }; + + _proto.remove = function remove(key) { + return global$2.removeStorageSync({ + key: key + }); + }; + + _proto.getKeys = function getKeys() { + var res = my.getStorageInfoSync(); + return res.keys; + }; + + return ZFBStorage; + }(); + + var MiniStorage = function () { + function MiniStorage() {} + + var _proto2 = MiniStorage.prototype; + + _proto2.set = function set(key, value) { + global$2.setStorageSync(key, value); + }; + + _proto2.get = function get(key) { + try { + return global$2.getStorageSync(key); + } catch (e) { + return null; + } + }; + + _proto2.remove = function remove(key) { + try { + return global$2.removeStorageSync(key); + } catch (e) { + return null; + } + }; + + _proto2.getKeys = function getKeys() { + try { + var res = global$2.getStorageInfoSync(); + return res.keys; + } catch (e) { + return []; + } + }; + + return MiniStorage; + }(); + + var storage = isZFB ? ZFBStorage : MiniStorage; + + var JSON$1 = { + parse: function parse(sJSON) { + return new Function('', 'return (' + sJSON + ')')(); + }, + stringify: function stringify(value) { + return JSON$1.str('', { + '': value + }); + }, + str: function str(key, holder) { + var i, + k, + v, + length, + partial, + value = holder[key], + self = JSON$1; + + if (value && typeof value === 'object' && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + switch (typeof value) { + case 'string': + return self.quote(value); + + case 'number': + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + return String(value); + + case 'object': + if (!value) { + return 'null'; + } + + partial = []; + + if (Object.prototype.toString.apply(value) === '[object Array]') { + length = value.length; + + for (i = 0; i < length; i += 1) { + partial[i] = self.str(i, value) || 'null'; + } + + v = partial.length === 0 ? '[]' : '[' + partial.join(',') + ']'; + return v; + } + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = self.str(k, value); + + if (v) { + partial.push(self.quote(k) + ':' + v); + } + } + } + + v = partial.length === 0 ? '{}' : '{' + partial.join(',') + '}'; + return v; + } + }, + quote: function quote(string) { + var self = JSON$1; + self.rx_escapable.lastIndex = 0; + return self.rx_escapable.test(string) ? '"' + string.replace(self.rx_escapable, function (a) { + var c = self.meta[a]; + return typeof c === 'string' ? c : "\\u" + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }) + '"' : '"' + string + '"'; + }, + rx_escapable: new RegExp("[\\\"\\\\\"\0-\x1F\x7F-\x9F\xAD\u0600-\u0604\u070F\u17B4\u17B5\u200C-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF0-\uFFFF]", 'g'), + meta: { + '\b': '\\b', + ' ': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"': '\\"', + '\'\'': '\\\'\'', + '\\': '\\\\' + } + }; + + var CacheStorage = function () { + function CacheStorage(values) { + this.caches = {}; + + if (values) { + this.caches = values; + } + } + + var _proto = CacheStorage.prototype; + + _proto.set = function set(key, value) { + this.caches[key] = value; + }; + + _proto.remove = function remove(key) { + var val = this.get(key); + delete this.caches[key]; + return val; + }; + + _proto.get = function get(key) { + return this.caches[key]; + }; + + _proto.getKeys = function getKeys() { + var keys = []; + + for (var key in this.caches) { + keys.push(key); + } + + return keys; + }; + + return CacheStorage; + }(); + + var global$3 = env.global; + var TEST_KEY = 'RC_TEST_KEY'; + var TEST_VALUE = 'RC_TEST_VALUE'; + + var isSupportLocalStorage = function isSupportLocalStorage() { + var isSupport = false; + var localStorage = global$3.localStorage; + + if (localStorage) { + try { + localStorage.setItem(TEST_KEY, TEST_VALUE); + var testVal = localStorage.getItem(TEST_KEY); + + if (testVal === TEST_VALUE) { + isSupport = true; + } + + localStorage.removeItem(TEST_KEY); + } catch (e) {} + } + + return isSupport; + }; + + var WebStorage = function () { + function WebStorage() {} + + var _proto = WebStorage.prototype; + + _proto.set = function set(key, value) { + global$3.localStorage.setItem(key, JSON$1.stringify({ + d: value + })); + }; + + _proto.get = function get(key) { + var value; + var localValue = global$3.localStorage.getItem(key); + + try { + localValue = JSON$1.parse(localValue); + } catch (e) { + localValue = {}; + } + + if (localValue && localValue.d) { + value = localValue.d; + } + + return value; + }; + + _proto.remove = function remove(key) { + return global$3.localStorage.removeItem(key); + }; + + _proto.getKeys = function getKeys() { + var keyList = []; + + for (var key in global$3.localStorage) { + keyList.push(key); + } + + return keyList; + }; + + return WebStorage; + }(); + + var WebStorage$1 = isSupportLocalStorage() ? WebStorage : CacheStorage; + + var isMini$1 = env.isMini; + var Storage = isMini$1 ? storage : WebStorage$1, + storage$1 = new Storage(); + + var global$4 = env.global; + var TEST_KEY$1 = 'RC_TEST_KEY'; + var TEST_VALUE$1 = 'RC_TEST_VALUE'; + + var isSupportSessionStorage = function isSupportSessionStorage() { + var isSupport = false; + var sessionStorage = global$4.sessionStorage; + + if (sessionStorage) { + try { + sessionStorage.setItem(TEST_KEY$1, TEST_VALUE$1); + var testVal = sessionStorage.getItem(TEST_KEY$1); + + if (testVal === TEST_VALUE$1) { + isSupport = true; + } + + sessionStorage.removeItem(TEST_KEY$1); + } catch (e) {} + } + + return isSupport; + }; + + var WebSession = function () { + function WebSession() {} + + var _proto = WebSession.prototype; + + _proto.set = function set(key, value) { + global$4.sessionStorage.setItem(key, JSON$1.stringify({ + d: value + })); + }; + + _proto.get = function get(key) { + var value; + var localValue = global$4.sessionStorage.getItem(key); + + try { + localValue = JSON$1.parse(localValue); + } catch (e) { + localValue = {}; + } + + if (localValue && localValue.d) { + value = localValue.d; + } + + return value; + }; + + _proto.remove = function remove(key) { + return global$4.sessionStorage.removeItem(key); + }; + + _proto.getKeys = function getKeys() { + var keyList = []; + + for (var key in global$4.sessionStorage) { + keyList.push(key); + } + + return keyList; + }; + + return WebSession; + }(); + + var WebSession$1 = isSupportSessionStorage() ? WebSession : CacheStorage; + + var isMini$2 = env.isMini; + var Session = isMini$2 ? CacheStorage : WebSession$1, + session = new Session(); + + var global$5 = env.global; + + var Socket = function () { + function Socket(options) { + this.socket = void 0; + this.socket = global$5.connectSocket(options); + } + + var _proto = Socket.prototype; + + _proto.send = function send(data) { + this.socket.send({ + data: data + }); + }; + + _proto.close = function close() { + this.socket.close(); + }; + + _proto.onOpen = function onOpen(callback) { + this.socket.onOpen(callback); + }; + + _proto.onMessage = function onMessage(callback) { + this.socket.onMessage(callback); + }; + + _proto.onError = function onError(callback) { + this.socket.onError(callback); + }; + + _proto.onClose = function onClose(callback) { + this.socket.onClose(callback); + }; + + return Socket; + }(); + + var Socket$1 = function () { + function Socket(options) { + this.socket = void 0; + var url = options.url; + this.socket = new WebSocket(url); + this.socket.binaryType = 'arraybuffer'; + return this; + } + + var _proto = Socket.prototype; + + _proto.send = function send(data) { + return this.socket.send(data); + }; + + _proto.close = function close() { + this.socket.close(); + }; + + _proto.onOpen = function onOpen(callback) { + this.socket.addEventListener('open', callback); + }; + + _proto.onMessage = function onMessage(callback) { + this.socket.addEventListener('message', callback); + }; + + _proto.onError = function onError(callback) { + this.socket.addEventListener('error', callback); + }; + + _proto.onClose = function onClose(callback) { + this.socket.addEventListener('close', callback); + }; + + return Socket; + }(); + + var isMini$3 = env.isMini; + var Socket$2 = isMini$3 ? Socket : Socket$1; + + /*! + 基于 es6-promise + * Github: https://github.com/stefanpenner/es6-promise + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.8+1e68dce6 + */ + var SparePromise = (function(){function a(a){var b=typeof a;return null!==a&&("object"===b||"function"===b)}function b(a){return "function"==typeof a}function c(a){P=a;}function d(a){Q=a;}function e(){return function(){return process.nextTick(j)}}function f(){return "undefined"!=typeof O?function(){O(j);}:i()}function g(){var a=0,b=new T(j),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2;}}function h(){var a=new MessageChannel;return a.port1.onmessage=j,function(){return a.port2.postMessage(0)}}function i(){var a=setTimeout;return function(){return a(j,1)}}function j(){var a,b,c;for(a=0;N>a;a+=2)b=W[a],c=W[a+1],b(c),W[a]=void 0,W[a+1]=void 0;N=0;}function k(){try{var a=Function("return this")().require("vertx");return O=a.runOnLoop||a.runOnContext,f()}catch(b){return i()}}function l(a,b){var e,f,c=this,d=new this.constructor(n);return void 0===d[Y]&&D(d),e=c._state,e?(f=arguments[e-1],Q(function(){return A(e,d,f,c._result)})):y(c,d,a,b),d}function m(a){var c,b=this;return a&&"object"==typeof a&&a.constructor===b?a:(c=new b(n),u(c,a),c)}function n(){}function o(){return new TypeError("You cannot resolve a promise with itself")}function p(){return new TypeError("A promises callback cannot return that same promise.")}function q(a,b,c,d){try{a.call(b,c,d);}catch(e){return e}}function r(a,b,c){Q(function(a){var d=!1,e=q(c,b,function(c){d||(d=!0,b!==c?u(a,c):w(a,c));},function(b){d||(d=!0,x(a,b));},"Settle: "+(a._label||" unknown promise"));!d&&e&&(d=!0,x(a,e));},a);}function s(a,b){b._state===$?w(a,b._result):b._state===_?x(a,b._result):y(b,void 0,function(b){return u(a,b)},function(b){return x(a,b)});}function t(a,c,d){c.constructor===a.constructor&&d===l&&c.constructor.resolve===m?s(a,c):void 0===d?w(a,c):b(d)?r(a,c,d):w(a,c);}function u(b,c){if(b===c)x(b,o());else if(a(c)){var d=void 0;try{d=c.then;}catch(e){return void x(b,e)}t(b,c,d);}else w(b,c);}function v(a){a._onerror&&a._onerror(a._result),z(a);}function w(a,b){a._state===Z&&(a._result=b,a._state=$,0!==a._subscribers.length&&Q(z,a));}function x(a,b){a._state===Z&&(a._state=_,a._result=b,Q(v,a));}function y(a,b,c,d){var e=a._subscribers,f=e.length;a._onerror=null,e[f]=b,e[f+$]=c,e[f+_]=d,0===f&&a._state&&Q(z,a);}function z(a){var d,e,f,g,b=a._subscribers,c=a._state;if(0!==b.length){for(d=void 0,e=void 0,f=a._result,g=0;gf;f++)b.resolve(a[f]).then(c,d);}:function(a,b){return b(new TypeError("You must pass an array to race."))})}function H(a){var b=this,c=new b(n);return x(c,a),c}function I(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function J(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function K(){var c,d,a=void 0;if("undefined"!=typeof global)a=global;else if("undefined"!=typeof self)a=self;else try{a=Function("return this")();}catch(b){throw new Error("polyfill failed because global object is unavailable in this environment")}if(c=a.Promise){d=null;try{d=Object.prototype.toString.call(c.resolve());}catch(b){}if("[object Promise]"===d&&!c.cast)return}a.Promise=cb;}var M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,ab,bb,cb,L=void 0;return L=Array.isArray?Array.isArray:function(a){return "[object Array]"===Object.prototype.toString.call(a)},M=L,N=0,O=void 0,P=void 0,Q=function(a,b){W[N]=a,W[N+1]=b,N+=2,2===N&&(P?P(j):X());},R="undefined"!=typeof window?window:void 0,S=R||{},T=S.MutationObserver||S.WebKitMutationObserver,U="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,W=new Array(1e3),X=void 0,X=U?e():T?g():V?h():void 0===R&&"function"==typeof require?k():i(),Y=Math.random().toString(36).substring(2),Z=void 0,$=1,_=2,ab=0,bb=function(){function a(a,b){this._instanceConstructor=a,this.promise=new a(n),this.promise[Y]||D(this.promise),M(b)?(this.length=b.length,this._remaining=b.length,this._result=new Array(this.length),0===this.length?w(this.promise,this._result):(this.length=this.length||0,this._enumerate(b),0===this._remaining&&w(this.promise,this._result))):x(this.promise,E());}return a.prototype._enumerate=function(a){for(var b=0;this._state===Z&&b>16)+(b>>16)+(c>>16);return d<<16|65535&c}function b(a,b){return a<>>32-b}function c(c,d,e,f,g,h){return a(b(a(a(d,c),a(f,h)),g),e)}function d(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)}function e(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)}function f(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)}function g(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)}function h(b,c){var h,i,j,k,l,m,n,o,p;for(b[c>>5]|=128<>>9<<4)+14]=c,m=1732584193,n=-271733879,o=-1732584194,p=271733878,h=0;hb;b+=8)c+=String.fromCharCode(255&a[b>>5]>>>b%32);return c}function j(a){var b,d,c=[];for(c[(a.length>>2)-1]=void 0,b=0;bb;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<16&&(d=h(d,8*a.length)),c=0;16>c;c+=1)e[c]=909522486^d[c],f[c]=1549556828^d[c];return g=h(e.concat(j(b)),512+8*b.length),i(h(f.concat(g),640))}function m(a){var d,e,b="0123456789abcdef",c="";for(e=0;e>>4)+b.charAt(15&d);return c}function n(a){return unescape(encodeURIComponent(a))}function o(a){return k(n(a))}function p(a){return m(o(a))}function q(a,b){return l(n(a),n(b))}function r(a,b){return m(q(a,b))}function s(a,b,c){return b?c?q(b,a):r(b,a):c?o(a):p(a)}return s})(); + + var global$8 = env.global; + var Promise$1 = global$8.Promise; + + var isSupportPromise = function isSupportPromise() { + if (!global$8.Promise) return false; + + var defer = function () { + return global$8.Promise.resolve(); + }(); + + return defer.then && defer["catch"] && defer["finally"]; + }; + + var setTimeout$1 = function setTimeout(event, timeout) { + return global$8.setTimeout(event, timeout); + }; + + var clearTimeout$1 = function clearTimeout(id) { + return global$8.clearTimeout(id); + }; + + var setInterval$1 = function setInterval(event, timeout) { + return global$8.setInterval(event, timeout); + }; + + var clearInterval$1 = function clearInterval(id) { + return global$8.clearInterval(id); + }; + + var Defer = isSupportPromise() ? global$8.Promise : SparePromise; + + var noop = function noop(data) { + return data; + }; + + var deferNoop = function deferNoop(data) { + return Promise$1.resolve(data); + }; + + var JSON$2 = global$8.JSON || JSON$1; + + var allowError = function allowError(event) { + var result; + + try { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + result = event.apply(void 0, args); + } catch (e) { + result = null; + } + + return result; + }; + + var toJSON = function toJSON(val) { + return allowError(JSON$2.stringify, val); + }; + + var parseJSON = function parseJSON(val) { + return allowError(JSON$2.parse, val); + }; + + var copy = function copy(val) { + return parseJSON(toJSON(val)); + }; + + var isObject = function isObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; + }; + + var isArray = function isArray(val) { + return Object.prototype.toString.call(val).indexOf('Array') !== -1; + }; + + var isFunction = function isFunction(val) { + return Object.prototype.toString.call(val) === '[object Function]'; + }; + + var isString = function isString(val) { + return Object.prototype.toString.call(val) === '[object String]'; + }; + + var isBoolean = function isBoolean(val) { + return Object.prototype.toString.call(val) === '[object Boolean]'; + }; + + var isUndefined = function isUndefined(val) { + return val === undefined || Object.prototype.toString.call(val) === '[object Undefined]'; + }; + + var isNull = function isNull(val) { + return Object.prototype.toString.call(val) === '[object Null]'; + }; + + var isNumber = function isNumber(val) { + return Object.prototype.toString.call(val) === '[object Number]'; + }; + + var isArrayBuffer = function isArrayBuffer(val) { + return Object.prototype.toString.call(val) === '[object ArrayBuffer]'; + }; + + var isPromise = function isPromise(val) { + var isTrue = false; + + try { + isTrue = Object.prototype.toString.call(val) === '[object Promise]' || val && val.then && val["catch"] && val["finally"]; + } catch (e) { + isTrue = false; + } + + return isTrue; + }; + + var getTypeName = function getTypeName(data) { + var typeName = Object.prototype.toString.call(data); + return typeName.substring(8, typeName.length - 1); + }; + + var isEqual = function isEqual(source, target) { + return source === target; + }; + + var ArrayBufferToArray = function ArrayBufferToArray(data) { + if (isArrayBuffer(data)) { + return [].slice.call(new Int8Array(data)); + } + + return data; + }; + + var ArrayBufferToUint8Array = function ArrayBufferToUint8Array(data) { + if (isArrayBuffer(data)) { + return new Uint8Array(data); + } + + return data; + }; + + var forEach = function forEach(source, event, options) { + options = options || {}; + event = event || noop; + var _options = options, + isReverse = _options.isReverse; + + var loopObj = function loopObj() { + for (var key in source) { + event(source[key], key, source); + } + }; + + var loopArr = function loopArr() { + if (isReverse) { + for (var i = source.length - 1; i >= 0; i--) { + event(source[i], i); + } + } else { + for (var j = 0, len = source.length; j < len; j++) { + event(source[j], j); + } + } + }; + + if (isObject(source)) { + loopObj(); + } + + if (isArray(source) || isString(source)) { + loopArr(); + } + }; + + var isFalse = function isFalse(val) { + return val === false; + }; + + var isEmpty = function isEmpty(val) { + var result = true; + + if (isObject(val)) { + forEach(val, function () { + result = false; + }); + } + + if (isString(val) || isArray(val)) { + result = val.length === 0; + } + + if (isNumber(val)) { + result = val === 0; + } + + return result; + }; + + var isNumberData = function isNumberData(val) { + var isEmptyVal = isEmpty(val); + val = Number(val); + return isNumber(val) && !isEmptyVal; + }; + + var getKeys = function getKeys(obj) { + var keyList = []; + forEach(obj, function (val, key) { + keyList.push(key); + }); + return keyList; + }; + + var getValues = function getValues(obj) { + var valList = []; + forEach(obj, function (val) { + valList.push(val); + }); + return valList; + }; + + var getTimestamp = function getTimestamp(time) { + return new Date(time).getTime(); + }; + + var getCurrentTimestamp = function getCurrentTimestamp() { + return new Date().getTime(); + }; + + var formatTime = function formatTime(timestamp, options) { + timestamp = timestamp || getCurrentTimestamp(); + options = options || {}; + var temp = options.temp; + var date = new Date(timestamp), + formateds = {}; + formateds['YY'] = date.getFullYear(); + formateds['MM'] = date.getMonth() + 1; + formateds['DD'] = date.getDate(); + formateds['hh'] = date.getHours(); + formateds['mm'] = date.getMinutes(); + formateds['ss'] = date.getSeconds(); + forEach(formateds, function (val, key) { + formateds[key] = val >= 10 ? val : '0' + val; + }); + + if (temp) { + var formatedText = temp; + forEach(formateds, function (val, key) { + formatedText = formatedText.replace(key, val); + }); + return formatedText; + } + + return formateds.YY + '-' + formateds.MM + '-' + formateds.DD + ' ' + formateds.hh + ':' + formateds.mm + ':' + formateds.ss; + }; + + var isValidJSON = function isValidJSON(jsonStr) { + if (isObject(jsonStr)) { + return true; + } + + var isValid = false; + + try { + var obj = JSON$2.parse(jsonStr); + var str = JSON$2.stringify(obj); + isValid = str === jsonStr; + } catch (e) { + isValid = false; + } + + return isValid; + }; + + var isSupportSocket = function isSupportSocket() { + var isMini = env.isMini; + + if (isMini) { + return true; + } + + var Socket = global$8.WebSocket; + + if (isUndefined(Socket)) { + return false; + } + + var hasWS = false, + isIntegrity = false; + + try { + hasWS = typeof Socket === 'object' || typeof Socket === 'function'; + isIntegrity = typeof Socket.OPEN === 'number'; + } catch (e) {} + + return hasWS && isIntegrity; + }; + + var indexOf = function indexOf(source, searchVal) { + if (source.indexOf) { + return source.indexOf(searchVal); + } + + var index = -1; + forEach(source, function (sub, i) { + if (searchVal === sub) { + index = i; + return; + } + }); + return index; + }; + + var lastIndexOf = function lastIndexOf(source, searchVal) { + if (source.lastIndexOf) { + return source.lastIndexOf(searchVal); + } + + var index = -1; + forEach(source, function (sub, i) { + if (searchVal === sub) { + index = i; + return; + } + }, { + isReverse: true + }); + return index; + }; + + var isInclude = function isInclude(source, searchVal) { + var index = indexOf(source, searchVal); + return index !== -1; + }; + + var substring = function substring(source, start, end) { + return source.substring(start, end); + }; + + var spliceByChild = function spliceByChild(arr, item) { + forEach(arr, function (child, index) { + if (isEqual(child, item)) { + arr.splice(index, 1); + } + }, { + isReverse: true + }); + }; + + var parse16To10 = function parse16To10(num) { + return parseInt(num, 16); + }; + + var isPlus = function isPlus(num) { + return +num === num; + }; + + var filter = function filter(source, event) { + var newArr = []; + + for (var i = 0, max = source.length; i < max; i++) { + var data = source[i]; + + if (event(data, i)) { + newArr.push(data); + } + } + + return newArr; + }; + + var map = function map(source, event) { + forEach(source, function (item, index) { + source[index] = event(item, index); + }); + return source; + }; + + var extend = function extend(destination, sources, option) { + option = option || {}; + var _option2 = option, + isAllowNull = _option2.isAllowNull; + destination = destination || {}; + sources = sources || {}; + + for (var key in sources) { + var value = sources[key]; + + if (!isUndefined(value) || isAllowNull) { + destination[key] = value; + } + } + + return destination; + }; + + var extendAllowNull = function extendAllowNull(destination, sources) { + return extend(destination, sources, { + isAllowNull: true + }); + }; + + var extendInShallow = function extendInShallow(destination, sources) { + destination = destination || {}; + sources = sources || {}; + destination = copy(destination); + sources = copy(sources); + return extend(destination, sources); + }; + + var deferred = function deferred(callbacks) { + return new Defer(callbacks); + }; + + var deferTimeout = function deferTimeout(timeout) { + return deferred(function (resolve) { + var timeouter = setTimeout$1(function () { + resolve(timeouter); + }, timeout); + }); + }; + + var tplEngine = function tplEngine(temp, data, regexp) { + var replaceAction = function replaceAction(obj) { + return temp.replace(regexp || /{([^}]+)}/g, function (match, name) { + if (match.charAt(0) === '\\') { + return match.slice(1); + } + + return obj[name] !== undefined ? obj[name] : '{' + name + '}'; + }); + }; + + if (!isArray(data)) { + data = [data]; + } + + var ret = []; + forEach(data, function (item) { + ret.push(replaceAction(item)); + }); + return ret.join(''); + }; + + var getRandomNum = function getRandomNum(max, min) { + min = min || 0; + var range = max - min, + random = Math.random(); + return min + Math.round(random * range); + }; + + var Timer = function () { + function Timer(options) { + this._timerId = void 0; + this._timerEvent = void 0; + this._timerClearEvent = void 0; + this.timeout = 0; + this.type = TIMER_TYPE.TIMEOUT; + this.status = TIMER_STATUS.PENNDING; + var self = this; + extend(self, options); + var type = self.type; + var isTimeout = type === TIMER_TYPE.TIMEOUT; + + if (isTimeout) { + self._timerEvent = setTimeout$1; + self._timerClearEvent = clearTimeout$1; + } else { + self._timerEvent = setInterval$1; + self._timerClearEvent = clearInterval$1; + } + + return self; + } + + var _proto = Timer.prototype; + + _proto.start = function start(event, options) { + options = options || {}; + var self = this, + isTimeout = self.type === TIMER_TYPE.TIMEOUT; + var _options2 = options, + args = _options2.args, + thisArg = _options2.thisArg; + self.stop(); + self._timerId = self._timerEvent.call(global$8, function () { + isTimeout && self.stop(); + + if (thisArg) { + event.apply(thisArg, args); + } else { + event(args); + } + }, self.timeout); + self.status = TIMER_STATUS.BUSY; + }; + + _proto.stop = function stop() { + var self = this; + + if (self._timerId) { + self._timerClearEvent.call(global$8, self._timerId); + + self.status = TIMER_STATUS.ENDING; + } + }; + + return Timer; + }(); + + var DeferHandler = function () { + function DeferHandler(options) { + this._list = {}; + this.timeout = IM_TIMEOUT; + extend(this, options); + } + + var _proto2 = DeferHandler.prototype; + + _proto2._isInvalid = function _isInvalid(id) { + var handlers = this._list[id]; + return !isArray(handlers) || isEmpty(handlers); + }; + + _proto2._exec = function _exec(id, isError, data) { + var self = this; + + if (self._isInvalid(id)) { + return; + } + + var handlers = self._list[id], + handler = handlers[0]; + isError ? handler.reject(data) : handler.resolve(data); + handlers.splice(0, 1); + }; + + _proto2.add = function add(id, defer, options) { + options = options || {}; + var self = this; + var resolve = defer.resolve, + reject = defer.reject; + var timeout = options.timeout || self.timeout; + + if (self._isInvalid(id)) { + self._list[id] = []; + } + + var timer = new Timer({ + timeout: timeout + }); + timer.start(function () { + self.reject(id, ERROR_INFO.TIMEOUT.code); + }); + + self._list[id].push({ + resolve: resolve, + reject: reject, + timer: timer + }); + }; + + _proto2.resolve = function resolve(id, data) { + this._exec(id, false, data); + }; + + _proto2.reject = function reject(id, error) { + this._exec(id, true, error); + }; + + return DeferHandler; + }(); + + var EventEmitter = function () { + function EventEmitter() { + this._events = void 0; + this._events = {}; + } + + var _proto3 = EventEmitter.prototype; + + _proto3.on = function on(name, event) { + var _events = this._events[name] || []; + + _events.push(event); + + this._events[name] = _events; + }; + + _proto3.off = function off(name, offEvent) { + if (offEvent) { + var _events = this._events[name] || []; + + spliceByChild(_events, offEvent); + } else { + delete this._events[name]; + } + }; + + _proto3.emit = function emit(name, data, error) { + var _events = this._events[name]; + forEach(_events, function (event) { + isFunction(event) && event(data, error); + }); + }; + + _proto3.clear = function clear() { + this._events = {}; + }; + + return EventEmitter; + }(); + + var decodeURI = function decodeURI(uri) { + return global$8.decodeURIComponent(uri); + }; + + var encodeURI = function encodeURI(uri) { + return global$8.encodeURIComponent(uri); + }; + + var int64ToTimestamp = function int64ToTimestamp(obj) { + if (!isObject(obj) || obj.low === undefined || obj.high === undefined) { + return obj; + } + + var low = obj.low; + + if (low < 0) { + low += 0xffffffff + 1; + } + + low = low.toString(16); + var timestamp = parseInt(obj.high.toString(16) + '00000000'.replace(new RegExp('0{' + low.length + '}$'), low), 16); + return timestamp; + }; + + var batchInt64ToTimestamp = function batchInt64ToTimestamp(data) { + forEach(data, function (item, key) { + if (isObject(item)) { + data[key] = int64ToTimestamp(item); + } + }); + return data; + }; + + var Queue = function () { + function Queue(defaultConfig) { + this._isRunning = false; + this._list = []; + this._defaultConfig = void 0; + this._defaultConfig = defaultConfig; + } + + var _proto4 = Queue.prototype; + + _proto4.add = function add(params) { + params = params || this._defaultConfig; + + this._list.push(params); + + this.run(); + }; + + _proto4.run = function run() { + var self = this; + var _isRunning = self._isRunning, + _list = self._list; + var isFinished = isEmpty(_list); + + if (_isRunning || isFinished) { + return; + } + + var firstItem = _list.splice(0, 1)[0]; + + var event = firstItem.event, + args = firstItem.args, + thisArg = firstItem.thisArg; + + var next = function next() { + self._isRunning = false; + self.run(); + }; + + if (!event) { + return next(); + } + + self._isRunning = true; + event.apply(thisArg, args).then(next)["catch"](next); + }; + + return Queue; + }(); + + var secondsToMilliseconds = function secondsToMilliseconds(seconds) { + return seconds * 1000; + }; + + var request$3 = function request(url, options) { + options = options || {}; + return deferred(function (resolve, reject) { + options = extend(options, { + url: url, + success: function success(responseText, xhr, status) { + resolve({ + responseText: responseText, + xhr: xhr, + status: status + }); + }, + fail: function fail(result, xhr, status) { + reject({ + result: result, + xhr: xhr, + status: status + }); + } + }); + request$2(options); + }); + }; + + var requestByUrlList = function requestByUrlList(urlList, options) { + if (isEmpty(urlList)) { + return Defer.reject(); + } + + var url = urlList[0]; + return request$3(url, options).then(function (result) { + result = result || {}; + result.urlList = urlList; + return result; + })["catch"](function (error) { + urlList.splice(0, 1); + + if (isEmpty(urlList)) { + return Defer.reject(error); + } else { + return requestByUrlList(urlList, options); + } + }); + }; + + var requestForFaster = function requestForFaster(urlList, option) { + option = option || {}; + var timeInterval = option.timeInterval || 0; + var faildCount = 0, + totalCount = urlList.length; + var requestXhrs = []; + var totalTimer = new Timer({ + timeout: 15 * 1000 + }); + var reqCountdownTimers = []; + + var clearAll = function clearAll() { + forEach(reqCountdownTimers, function (timer) { + timer.stop(); + }); + forEach(requestXhrs, function (xhr) { + xhr.abort(); + }); + reqCountdownTimers.length = 0; + requestXhrs.length = 0; + }; + + var isAllFaild = function isAllFaild() { + return faildCount === totalCount; + }; + + return deferred(function (resolve, reject) { + var _success = function success(url, index) { + clearAll(); + resolve({ + url: url, + index: index + }); + }; + + var _fail = function fail() { + clearAll(); + reject(); + }; + + forEach(urlList, function (url, index) { + var timer = new Timer({ + timeout: timeInterval * index + }); + timer.start(function () { + var xhr; + var opt = extend({ + url: url, + success: function success() { + _success(url, index); + }, + fail: function fail() { + faildCount++; + isAllFaild() && _fail(); + } + }, option); + xhr = request$2(opt); + requestXhrs.push(xhr); + }); + reqCountdownTimers.push(timer); + }); + totalTimer.start(_fail); + }); + }; + + var NetworkDetecter = function () { + function NetworkDetecter(option) { + this._option = void 0; + this._detectCount = 0; + this._timeoutId = void 0; + this._option = option; + } + + var _proto5 = NetworkDetecter.prototype; + + _proto5._detect = function _detect() { + var self = this; + var _detectCount = self._detectCount, + _option = self._option; + var url = _option.url, + timeout = _option.intervalTime, + max = _option.max; + _detectCount++; + return request$3(url).then(function () { + return; + }, function (_ref) { + var status = _ref.status; + + if (isEqual(status, 404)) { + return; + } + + var isAlreadyMax = max && isEqual(max, _detectCount); + + if (isAlreadyMax) { + return Defer.reject(); + } + + return deferTimeout(timeout).then(function (timeoutId) { + self._detectCount = _detectCount; + self._timeoutId = timeoutId; + return self._detect(); + }); + }); + }; + + _proto5.start = function start() { + return this._detect(); + }; + + _proto5.stop = function stop() { + var timeoutId = this._timeoutId; + + if (timeoutId) { + clearTimeout$1(timeoutId); + } + }; + + return NetworkDetecter; + }(); + + var toUpperCase = function toUpperCase(str, startIndex, endIndex) { + if (isUndefined(startIndex) || isUndefined(endIndex)) { + return str.toUpperCase(); + } + + var sliceStr = str.slice(startIndex, endIndex); + str = str.replace(sliceStr, function (text) { + return text.toUpperCase(); + }); + return str; + }; + + var getDomainByUrl = function getDomainByUrl(url) { + var StartMark = '://', + EndMark = '/'; + var urlProtocolIndex = indexOf(url, StartMark); + var hasProtocol = urlProtocolIndex > -1; + + if (hasProtocol) { + urlProtocolIndex = urlProtocolIndex + StartMark.length; + url = substring(url, urlProtocolIndex, url.length); + } + + var urlPathIndex = indexOf(url, EndMark); + var hasPath = urlPathIndex > -1; + + if (hasPath) { + url = substring(url, 0, urlPathIndex); + } + + return url; + }; + + var getValidUrl = function getValidUrl(url, option) { + option = option || {}; + var ProtocolMark = '://'; + var hasProtocol = isInclude(url, ProtocolMark); + var localProtocol = env.protocol.http; + var _option3 = option, + protocol = _option3.protocol; + + if (protocol) { + var domain = getDomainByUrl(url); + url = protocol + "//" + domain; + } + + if (hasProtocol) { + var urlProtocolIndex = indexOf(url, ProtocolMark) + 1; + var urlProtocol = substring(url, 0, urlProtocolIndex); + var isHttpUrl = urlProtocol === HTTP_PROTOCOL.HTTP; + var isLocalHttps = localProtocol === HTTP_PROTOCOL.HTTPS; + + if (isHttpUrl && isLocalHttps) { + var _domain = getDomainByUrl(url); + + return HTTP_PROTOCOL.HTTPS + "//" + _domain; + } else { + return url; + } + } else { + return localProtocol + "//" + url; + } + }; + + var quickSort = function quickSort(arr, event) { + var sort = function sort(array, left, right, event) { + event = event || function (a, b) { + return a <= b; + }; + + if (left < right) { + var x = array[right], + i = left - 1, + temp; + + for (var j = left; j <= right; j++) { + if (event(array[j], x)) { + i++; + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + + sort(array, left, i - 1, event); + sort(array, i + 1, right, event); + } + + return array; + }; + + return sort(arr, 0, arr.length - 1, event); + }; + + var unique = function unique(arr, event) { + var keyEvent = event || function (data) { + return data; + }; + + var hashTable = {}; + var newArr = []; + forEach(arr, function (data) { + var key = keyEvent(data); + + if (!hashTable[key]) { + hashTable[key] = true; + newArr.push(data); + } + }); + return newArr; + }; + + var isStackError = function isStackError(error) { + error = error || {}; + return error.stack && error.stack.toString; + }; + + var consoleError = function consoleError() { + var _console; + + return (_console = console).error.apply(_console, arguments); + }; + + var consoleLog = function consoleLog() { + var _console2; + + return (_console2 = console).log.apply(_console2, arguments); + }; + + var string10to64 = function string10to64(number) { + var chars = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZa0'.split(''), + radix = chars.length + 1, + qutient = +number, + arr = []; + + do { + var mod = qutient % radix; + qutient = (qutient - mod) / radix; + arr.unshift(chars[mod]); + } while (qutient); + + return arr.join(''); + }; + + var getUUID = function getUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + }; + + var getUUID22 = function getUUID22() { + var uuid = getUUID(); + uuid = uuid.replace(/-/g, '') + 'a'; + uuid = parseInt(uuid, 16); + uuid = string10to64(uuid); + + if (uuid.length > 22) { + uuid = uuid.slice(0, 22); + } else { + var len = 22 - uuid.length; + + for (var i = 0; i < len; i++) { + uuid = uuid + '0'; + } + } + + return uuid; + }; + + var isValidTimestamp = function isValidTimestamp(time) { + return isNumber(time) && time !== 0; + }; + + var formateDate = function formateDate(seperator) { + var date = new Date(); + var year = date.getFullYear(); + var month = date.getMonth() + 1; + var day = date.getDate(); + return tplEngine('{year}{seperator}{month}{seperator}{day}', { + year: year, + month: month, + day: day, + seperator: seperator + }); + }; + + var utils = { + Storage: storage$1, + Session: session, + Socket: Socket$2, + Cache: CacheStorage, + JSON: JSON$2, + Defer: Defer, + httpRequest: request$2, + request: request$3, + requestByUrlList: requestByUrlList, + requestForFaster: requestForFaster, + md5: md5, + DeferHandler: DeferHandler, + EventEmitter: EventEmitter, + Timer: Timer, + Queue: Queue, + consoleError: consoleError, + consoleLog: consoleLog, + noop: noop, + deferNoop: deferNoop, + setTimeout: setTimeout$1, + toJSON: toJSON, + parseJSON: parseJSON, + copy: copy, + isObject: isObject, + isArray: isArray, + isFunction: isFunction, + isArrayBuffer: isArrayBuffer, + isString: isString, + isBoolean: isBoolean, + isUndefined: isUndefined, + isNull: isNull, + isNumber: isNumber, + isNumberData: isNumberData, + isPromise: isPromise, + getTypeName: getTypeName, + isPlus: isPlus, + isEmpty: isEmpty, + isFalse: isFalse, + isEqual: isEqual, + isValidJSON: isValidJSON, + isSupportSocket: isSupportSocket, + ArrayBufferToArray: ArrayBufferToArray, + ArrayBufferToUint8Array: ArrayBufferToUint8Array, + indexOf: indexOf, + lastIndexOf: lastIndexOf, + isInclude: isInclude, + substring: substring, + getKeys: getKeys, + getValues: getValues, + getTimestamp: getTimestamp, + getCurrentTimestamp: getCurrentTimestamp, + formatTime: formatTime, + parse16To10: parse16To10, + forEach: forEach, + map: map, + filter: filter, + extend: extend, + extendAllowNull: extendAllowNull, + extendInShallow: extendInShallow, + deferred: deferred, + tplEngine: tplEngine, + getRandomNum: getRandomNum, + int64ToTimestamp: int64ToTimestamp, + batchInt64ToTimestamp: batchInt64ToTimestamp, + encodeURI: encodeURI, + decodeURI: decodeURI, + secondsToMilliseconds: secondsToMilliseconds, + NetworkDetecter: NetworkDetecter, + toUpperCase: toUpperCase, + getDomainByUrl: getDomainByUrl, + getValidUrl: getValidUrl, + quickSort: quickSort, + unique: unique, + isStackError: isStackError, + getUUID: getUUID, + getUUID22: getUUID22, + isValidTimestamp: isValidTimestamp, + formateDate: formateDate + }; + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + var _PUBLISH_TOPIC_TO_CON, _CONVERSATION_TYPE_TO, _CONVERSATION_TYPE_TO2, _CONVERSATION_TYPE_TO3, _CONVERSATION_TYPE_TO4; + var SUCCESS_CODE = 0; + var PULL_MSG_TYPE = { + NORMAL: 1, + CHATROOM: 2 + }; + var MESSAGE_NAME = { + CONN_ACK: 'ConnAckMessage', + DISCONNECT: 'DisconnectMessage', + PING_REQ: 'PingReqMessage', + PING_RESP: 'PingRespMessage', + PUBLISH: 'PublishMessage', + PUB_ACK: 'PubAckMessage', + QUERY: 'QueryMessage', + QUERY_CON: 'QueryConMessage', + QUERY_ACK: 'QueryAckMessage' + }; + var QOS = { + AT_MOST_ONCE: 0, + AT_LEAST_ONCE: 1, + EXACTLY_ONCE: 2, + DEFAULT: 3, + '0': 'AT_MOST_ONCE', + '1': 'AT_LEAST_ONCE', + '2': 'EXACTLY_ONCE', + '3': 'DEFAULT' + }; + var OPERATE_TYPE = { + CONNECT: 1, + '1': 'CONNECT', + CONNACK: 2, + '2': 'CONNACK', + PUBLISH: 3, + '3': 'PUBLISH', + PUBACK: 4, + '4': 'PUBACK', + QUERY: 5, + '5': 'QUERY', + QUERYACK: 6, + '6': 'QUERYACK', + QUERYCON: 7, + '7': 'QUERYCON', + SUBSCRIBE: 8, + '8': 'SUBSCRIBE', + SUBACK: 9, + '9': 'SUBACK', + UNSUBSCRIBE: 10, + '10': 'UNSUBSCRIBE', + UNSUBACK: 11, + '11': 'UNSUBACK', + PINGREQ: 12, + '12': 'PINGREQ', + PINGRESP: 13, + '13': 'PINGRESP', + DISCONNECT: 14, + '14': 'DISCONNECT' + }; + var MESSAGE_TAG = { + NONE: 0, + PERSIT_ONLY: 1, + COUNT_ONLY: 2, + PERSIT_AND_COUNT: 3 + }; + var PUBLISH_TOPIC = { + PRIVATE: 'ppMsgP', + GROUP: 'pgMsgP', + CHATROOM: 'chatMsg', + CUSTOMER_SERVICE: 'pcMsgP', + RECALL: 'recallMsg', + NOTIFY_PULL_MSG: 's_ntf', + RECEIVE_MSG: 's_msg', + SYNC_STATUS: 's_stat', + SERVER_NOTIFY: 's_cmd', + SETTING_NOTIFY: 's_us' + }; + var PUBLISH_STATUS_TOPIC = { + PRIVATE: 'ppMsgS', + GROUP: 'pgMsgS' + }; + var QUERY_TOPIC = { + GET_SYNC_TIME: 'qrySessionsAtt', + PULL_MSG: 'pullMsg', + GET_CONVERSATION_LIST: 'qrySessions', + REMOVE_CONVERSATION_LIST: 'delSessions', + DELETE_MESSAGES: 'delMsg', + CLEAR_UNREAD_COUNT: 'updRRTime', + PULL_USER_SETTING: 'pullUS', + PULL_CHRM_MSG: 'chrmPull', + JOIN_CHATROOM: 'joinChrm', + QUIT_CHATROOM: 'exitChrm', + GET_CHATROOM_INFO: 'queryChrmI', + UPDATE_CHATROOM_KV: 'setKV', + DELETE_CHATROOM_KV: 'delKV', + PULL_CHATROOM_KV: 'pullKV', + GET_OLD_CONVERSATION_LIST: 'qryRelation', + REMOVE_OLD_CONVERSATION: 'delRelation', + GET_CONVERSATION_STATUS: 'pullSeAtts', + SET_CONVERSATION_STATUS: 'setSeAtt', + GET_UPLOAD_FILE_TOKEN: 'qnTkn', + GET_UPLOAD_FILE_URL: 'qnUrl', + CLEAR_MESSAGES: { + PRIVATE: 'cleanPMsg', + GROUP: 'cleanGMsg', + CUSTOMER_SERVICE: 'cleanCMsg', + SYSTEM: 'cleanSMsg' + }, + JOIN_RTC_ROOM: 'rtcRJoin_data', + QUIT_RTC_ROOM: 'rtcRExit', + PING_RTC: 'rtcPing', + SET_RTC_DATA: 'rtcSetData', + GET_RTC_DATA: 'rtcQryData', + DEL_RTC_DATA: 'rtcDelData', + SET_RTC_OUT_DATA: 'rtcSetOutData', + GET_RTC_OUT_DATA: 'rtcQryUserOutData', + GET_RTC_TOKEN: 'rtcToken', + SET_RTC_STATE: 'rtcUserState', + GET_RTC_ROOM_INFO: 'rtcRInfo', + GET_RTC_USER_INFO_LIST: 'rtcUData', + SET_RTC_USER_INFO: 'rtcUPut', + DEL_RTC_USER_INFO: 'rtcUDel', + GET_RTC_USER_LIST: 'rtcUList' + }; + var QUERY_HISTORY_TOPIC = { + PRIVATE: 'qryPMsg', + GROUP: 'qryGMsg', + CHATROOM: 'qryCHMsg', + CUSTOMER_SERVICE: 'qryCMsg', + SYSTEM: 'qrySMsg' + }; + var SERVER_NOTIFY_TYPE = { + KV_CHANGED: 2, + CONVERSATION_STATUS_CHANGED: 3 + }; + var CHATROOM_KV_STATUS_CODE = { + AUTO_DELETE: 0x0001, + OVERWRITE: 0x0002, + OPERATE: 0x0004 + }; + var PUBLISH_TOPIC_TO_CONVERSATION_TYPE = (_PUBLISH_TOPIC_TO_CON = {}, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.PRIVATE] = CONVERSATION_TYPE.PRIVATE, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.GROUP] = CONVERSATION_TYPE.GROUP, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.CHATROOM] = CONVERSATION_TYPE.CHATROOM, _PUBLISH_TOPIC_TO_CON[PUBLISH_TOPIC.CUSTOMER_SERVICE] = CONVERSATION_TYPE.CUSTOMER_SERVICE, _PUBLISH_TOPIC_TO_CON); + var CONVERSATION_TYPE_TO_PUBLISH_TOPIC = (_CONVERSATION_TYPE_TO = {}, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.PRIVATE] = PUBLISH_TOPIC.PRIVATE, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.GROUP] = PUBLISH_TOPIC.GROUP, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.CHATROOM] = PUBLISH_TOPIC.CHATROOM, _CONVERSATION_TYPE_TO[CONVERSATION_TYPE.CUSTOMER_SERVICE] = PUBLISH_TOPIC.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO); + var CONVERSATION_TYPE_TO_PUBLISH_STATUS_TOPIC = (_CONVERSATION_TYPE_TO2 = {}, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.PRIVATE] = PUBLISH_STATUS_TOPIC.PRIVATE, _CONVERSATION_TYPE_TO2[CONVERSATION_TYPE.GROUP] = PUBLISH_STATUS_TOPIC.GROUP, _CONVERSATION_TYPE_TO2); + var CONVERSATION_TYPE_TO_QUERY_HISTORY_TOPIC = (_CONVERSATION_TYPE_TO3 = {}, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.PRIVATE] = QUERY_HISTORY_TOPIC.PRIVATE, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.GROUP] = QUERY_HISTORY_TOPIC.GROUP, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.CHATROOM] = QUERY_HISTORY_TOPIC.CHATROOM, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.CUSTOMER_SERVICE] = QUERY_HISTORY_TOPIC.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO3[CONVERSATION_TYPE.SYSTEM] = QUERY_HISTORY_TOPIC.SYSTEM, _CONVERSATION_TYPE_TO3); + var CONVERSATION_TYPE_TO_CLEAR_MESSAGE_TOPIC = (_CONVERSATION_TYPE_TO4 = {}, _CONVERSATION_TYPE_TO4[CONVERSATION_TYPE.PRIVATE] = QUERY_TOPIC.CLEAR_MESSAGES.PRIVATE, _CONVERSATION_TYPE_TO4[CONVERSATION_TYPE.GROUP] = QUERY_TOPIC.CLEAR_MESSAGES.GROUP, _CONVERSATION_TYPE_TO4[CONVERSATION_TYPE.CUSTOMER_SERVICE] = QUERY_TOPIC.CLEAR_MESSAGES.CUSTOMER_SERVICE, _CONVERSATION_TYPE_TO4[CONVERSATION_TYPE.SYSTEM] = QUERY_TOPIC.CLEAR_MESSAGES.SYSTEM, _CONVERSATION_TYPE_TO4); + var USER_SETTING_STATUS = { + ADD: 1, + UPDATE: 2, + DELETE: 3 + }; + var CONVERSATION_STATUS_CONFIG = { + ENABLED: '1', + DISABLED: '0' + }; + var CONVERSATION_STATUS_TYPE = { + DO_NOT_DISTURB: 1, + TOP: 2 + }; + + var Header = function () { + function Header(_type, _retain, _qos, _dup) { + this.type = void 0; + this.retain = false; + this.qos = QOS.AT_LEAST_ONCE; + this.dup = false; + this.syncMsg = false; + var isPlusType = utils.isPlus(_type); + + if (_type && isPlusType && arguments.length === 1) { + this.retain = (_type & 1) > 0; + this.qos = (_type & 6) >> 1; + this.dup = (_type & 8) > 0; + this.type = _type >> 4 & 15; + this.syncMsg = (_type & 8) === 8; + } else { + this.type = _type; + this.retain = _retain === undefined ? false : _retain; + this.qos = _qos === undefined ? QOS.AT_LEAST_ONCE : _qos; + this.dup = _dup === undefined ? false : _dup; + } + } + + var _proto = Header.prototype; + + _proto.encode = function encode() { + var self = this; + var validQosList = [QOS.AT_MOST_ONCE, QOS.AT_LEAST_ONCE, QOS.EXACTLY_ONCE, QOS.DEFAULT]; + utils.forEach(validQosList, function (qos) { + if (self.qos === QOS[qos]) { + self.qos = qos; + } + }); + + var _byte = self.type << 4; + + _byte |= self.retain ? 1 : 0; + _byte |= self.qos << 1; + _byte |= self.dup ? 8 : 0; + return _byte; + }; + + return Header; + }(); + + var BinaryHelper = { + writeUTF: function writeUTF(str, isGetBytes) { + var back = [], + byteSize = 0; + utils.forEach(str, function (_char, i) { + var code = str.charCodeAt(i); + + if (code >= 0 && code <= 127) { + byteSize += 1; + back.push(code); + } else if (code >= 128 && code <= 2047) { + byteSize += 2; + back.push(192 | 31 & code >> 6); + back.push(128 | 63 & code); + } else if (code >= 2048 && code <= 65535) { + byteSize += 3; + back.push(224 | 15 & code >> 12); + back.push(128 | 63 & code >> 6); + back.push(128 | 63 & code); + } + }); + utils.forEach(back, function (_char2, i) { + if (_char2 > 255) { + back[i] &= 255; + } + }); + + if (isGetBytes) { + return back; + } + + if (byteSize <= 255) { + return [0, byteSize].concat(back); + } else { + return [byteSize >> 8, byteSize & 255].concat(back); + } + }, + readUTF: function readUTF(arr) { + var UTF = ''; + + for (var i = 0, len = arr.length; i < len; i++) { + var _char3 = arr[i]; + + if (_char3 < 0) { + arr[i] += 256; + } + + var one = arr[i].toString(2), + v = one.match(/^1+?(?=0)/); + + if (v && one.length === 8) { + var bytesLength = v[0].length, + store = ''; + + for (var st = 0; st < bytesLength; st++) { + store += arr[st + i].toString(2).slice(2); + } + + UTF += String.fromCharCode(parseInt(store, 2)); + i += bytesLength - 1; + } else { + UTF += String.fromCharCode(arr[i]); + } + } + + return UTF; + } + }; + + var RongStreamReader = function () { + function RongStreamReader(arr) { + this.pool = void 0; + this.position = 0; + this.poolLen = 0; + this.pool = arr; + this.poolLen = arr.length; + } + + var _proto2 = RongStreamReader.prototype; + + _proto2.check = function check() { + return this.position >= this.pool.length; + }; + + _proto2.readInt = function readInt() { + var self = this; + + if (self.check()) { + return -1; + } + + var end = ''; + + for (var i = 0; i < 4; i++) { + var t = self.pool[self.position++].toString(16); + + if (t.length === 1) { + t = '0' + t; + } + + end += t.toString(); + } + + return utils.parse16To10(end); + }; + + _proto2.readLong = function readLong() { + var self = this; + + if (self.check()) { + return -1; + } + + var end = ''; + + for (var i = 0; i < 8; i++) { + var t = self.pool[self.position++].toString(16); + + if (t.length === 1) { + t = '0' + t; + } + + end += t; + } + + return utils.parse16To10(end); + }; + + _proto2.readByte = function readByte() { + if (this.check()) { + return -1; + } + + var val = this.pool[this.position++]; + + if (val > 255) { + val &= 255; + } + + return val; + }; + + _proto2.readUTF = function readUTF() { + if (this.check()) { + return ''; + } + + var big = this.readByte() << 8 | this.readByte(); + var pool = this.pool.subarray(this.position, this.position += big); + return BinaryHelper.readUTF(pool); + }; + + _proto2.readAll = function readAll() { + return this.pool.subarray(this.position, this.poolLen); + }; + + return RongStreamReader; + }(); + + var RongStreamWriter = function () { + function RongStreamWriter() { + this.pool = []; + this.position = 0; + this.writen = 0; + } + + var _proto3 = RongStreamWriter.prototype; + + _proto3.write = function write(_byte2) { + if (utils.isArray(_byte2)) { + this.pool = this.pool.concat(_byte2); + } else if (utils.isPlus(_byte2)) { + if (_byte2 > 255) { + _byte2 &= 255; + } + + this.pool.push(_byte2); + this.writen++; + } + + return _byte2; + }; + + _proto3.writeArr = function writeArr(_byte3) { + this.pool = this.pool.concat(_byte3); + return _byte3; + }; + + _proto3.writeUTF = function writeUTF(str) { + var val = BinaryHelper.writeUTF(str); + this.pool = this.pool.concat(val); + this.writen += val.length; + }; + + _proto3.getBytesArray = function getBytesArray() { + return this.pool; + }; + + return RongStreamWriter; + }(); + + var IDENTIFIER = { + PUB: 'pub', + QUERY: 'qry' + }; + + var _getIdentifier = function getIdentifier(messageId, identifier) { + if (messageId && identifier) { + return identifier + '_' + messageId; + } else if (messageId) { + return messageId; + } else { + return utils.getCurrentTimestamp(); + } + }; + + var BaseReader = function () { + function BaseReader(header) { + this._name = void 0; + this._header = void 0; + this.lengthSize = 0; + this.messageId = void 0; + this.timestamp = void 0; + this.identifier = void 0; + this._header = header; + } + + var _proto = BaseReader.prototype; + + _proto.getIdentifier = function getIdentifier() { + var messageId = this.messageId, + identifier = this.identifier; + return _getIdentifier(messageId, identifier); + }; + + _proto.read = function read(stream, length) { + this.readMessage(stream, length); + }; + + _proto.readMessage = function readMessage(stream, length) { + return { + stream: stream, + length: length + }; + }; + + return BaseReader; + }(); + + var BaseWriter = function () { + function BaseWriter(headerType) { + this._header = void 0; + this.lengthSize = 0; + this.data = void 0; + this.messageId = void 0; + this.topic = void 0; + this.targetId = void 0; + this.identifier = void 0; + this._header = new Header(headerType, false, QOS.AT_MOST_ONCE, false); + } + + var _proto2 = BaseWriter.prototype; + + _proto2.getIdentifier = function getIdentifier() { + var messageId = this.messageId, + identifier = this.identifier; + return _getIdentifier(messageId, identifier); + }; + + _proto2.write = function write(stream) { + var headerCode = this.getHeaderFlag(); + stream.write(headerCode); + this.writeMessage(stream); + }; + + _proto2.writeMessage = function writeMessage(stream) { + return stream; + }; + + _proto2.setHeaderQos = function setHeaderQos(qos) { + this._header.qos = qos; + }; + + _proto2.getHeaderFlag = function getHeaderFlag() { + return this._header.encode(); + }; + + _proto2.getLengthSize = function getLengthSize() { + return this.lengthSize; + }; + + _proto2.getBufferData = function getBufferData() { + var stream = new RongStreamWriter(); + this.write(stream); + var val = stream.getBytesArray(); + var binary = new Int8Array(val); + return binary; + }; + + _proto2.getCometData = function getCometData() { + var data = this.data || {}; + return utils.toJSON(data); + }; + + return BaseWriter; + }(); + + var ConnAckReader = function (_BaseReader) { + _inheritsLoose(ConnAckReader, _BaseReader); + + function ConnAckReader() { + var _this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this = _BaseReader.call.apply(_BaseReader, [this].concat(args)) || this; + _this._name = MESSAGE_NAME.CONN_ACK; + _this.status = void 0; + _this.userId = void 0; + _this.timestamp = void 0; + return _this; + } + + var _proto3 = ConnAckReader.prototype; + + _proto3.readMessage = function readMessage(stream, msgLength) { + stream.readByte(); + this.status = +stream.readByte(); + + if (msgLength > ConnAckReader.MESSAGE_LENGTH) { + this.userId = stream.readUTF(); + stream.readUTF(); + this.timestamp = stream.readLong(); + } + }; + + return ConnAckReader; + }(BaseReader); + + ConnAckReader.MESSAGE_LENGTH = 2; + + var DisconnectReader = function (_BaseReader2) { + _inheritsLoose(DisconnectReader, _BaseReader2); + + function DisconnectReader() { + var _this2; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + _this2 = _BaseReader2.call.apply(_BaseReader2, [this].concat(args)) || this; + _this2._name = MESSAGE_NAME.DISCONNECT; + _this2.status = void 0; + return _this2; + } + + var _proto4 = DisconnectReader.prototype; + + _proto4.readMessage = function readMessage(stream) { + stream.readByte(); + this.status = +stream.readByte(); + }; + + return DisconnectReader; + }(BaseReader); + + DisconnectReader.MESSAGE_LENGTH = 2; + + var PingReqWriter = function (_BaseWriter) { + _inheritsLoose(PingReqWriter, _BaseWriter); + + function PingReqWriter() { + var _this3; + + _this3 = _BaseWriter.call(this, OPERATE_TYPE.PINGREQ) || this; + _this3._name = MESSAGE_NAME.PING_REQ; + return _this3; + } + + return PingReqWriter; + }(BaseWriter); + + var PingRespReader = function (_BaseReader3) { + _inheritsLoose(PingRespReader, _BaseReader3); + + function PingRespReader() { + var _this4; + + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + _this4 = _BaseReader3.call.apply(_BaseReader3, [this].concat(args)) || this; + _this4._name = MESSAGE_NAME.PING_RESP; + return _this4; + } + + return PingRespReader; + }(BaseReader); + + var RetryableReader = function (_BaseReader4) { + _inheritsLoose(RetryableReader, _BaseReader4); + + function RetryableReader() { + var _this5; + + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + _this5 = _BaseReader4.call.apply(_BaseReader4, [this].concat(args)) || this; + _this5.messageId = void 0; + return _this5; + } + + var _proto5 = RetryableReader.prototype; + + _proto5.readMessage = function readMessage(stream) { + var msgId = stream.readByte() * 256 + stream.readByte(); + this.messageId = parseInt(msgId, 10); + }; + + return RetryableReader; + }(BaseReader); + + var RetryableWriter = function (_BaseWriter2) { + _inheritsLoose(RetryableWriter, _BaseWriter2); + + function RetryableWriter() { + var _this6; + + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + _this6 = _BaseWriter2.call.apply(_BaseWriter2, [this].concat(args)) || this; + _this6.messageId = void 0; + return _this6; + } + + var _proto6 = RetryableWriter.prototype; + + _proto6.writeMessage = function writeMessage(stream) { + var id = this.messageId; + var lsb = id & 255; + var msb = (id & 65280) >> 8; + stream.write(msb); + stream.write(lsb); + }; + + return RetryableWriter; + }(BaseWriter); + + var PublishReader = function (_RetryableReader) { + _inheritsLoose(PublishReader, _RetryableReader); + + function PublishReader() { + var _this7; + + for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + args[_key6] = arguments[_key6]; + } + + _this7 = _RetryableReader.call.apply(_RetryableReader, [this].concat(args)) || this; + _this7._name = MESSAGE_NAME.PUBLISH; + _this7.topic = void 0; + _this7.data = void 0; + _this7.targetId = void 0; + _this7.date = void 0; + _this7.syncMsg = false; + _this7.identifier = IDENTIFIER.PUB; + return _this7; + } + + var _proto7 = PublishReader.prototype; + + _proto7.readMessage = function readMessage(stream) { + this.date = stream.readInt(); + this.topic = stream.readUTF(); + this.targetId = stream.readUTF(); + RetryableReader.prototype.readMessage.apply(this, arguments); + this.data = stream.readAll(); + }; + + return PublishReader; + }(RetryableReader); + + var PublishWriter = function (_RetryableWriter) { + _inheritsLoose(PublishWriter, _RetryableWriter); + + function PublishWriter(topic, data, targetId) { + var _this8; + + _this8 = _RetryableWriter.call(this, OPERATE_TYPE.PUBLISH) || this; + _this8._name = MESSAGE_NAME.PUBLISH; + _this8.topic = void 0; + _this8.data = void 0; + _this8.targetId = void 0; + _this8.date = void 0; + _this8.syncMsg = false; + _this8.identifier = IDENTIFIER.PUB; + _this8.topic = topic; + _this8.data = utils.isString(data) ? BinaryHelper.writeUTF(data) : data; + _this8.targetId = targetId; + return _this8; + } + + var _proto8 = PublishWriter.prototype; + + _proto8.writeMessage = function writeMessage(stream) { + stream.writeUTF(this.topic); + stream.writeUTF(this.targetId); + RetryableWriter.prototype.writeMessage.apply(this, arguments); + stream.write(this.data); + }; + + return PublishWriter; + }(RetryableWriter); + + var PubAckReader = function (_RetryableReader2) { + _inheritsLoose(PubAckReader, _RetryableReader2); + + function PubAckReader() { + var _this9; + + for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + _this9 = _RetryableReader2.call.apply(_RetryableReader2, [this].concat(args)) || this; + _this9._name = MESSAGE_NAME.PUB_ACK; + _this9.status = void 0; + _this9.date = 0; + _this9.data = void 0; + _this9.millisecond = 0; + _this9.messageUId = void 0; + _this9.timestamp = 0; + _this9.identifier = IDENTIFIER.PUB; + return _this9; + } + + var _proto9 = PubAckReader.prototype; + + _proto9.readMessage = function readMessage(stream) { + RetryableReader.prototype.readMessage.call(this, stream); + this.date = stream.readInt(); + this.status = stream.readByte() * 256 + stream.readByte(); + this.millisecond = stream.readByte() * 256 + stream.readByte(); + this.timestamp = this.date * 1000 + this.millisecond; + this.messageUId = stream.readUTF(); + }; + + return PubAckReader; + }(RetryableReader); + + var PubAckWriter = function (_RetryableWriter2) { + _inheritsLoose(PubAckWriter, _RetryableWriter2); + + function PubAckWriter(messageId) { + var _this10; + + _this10 = _RetryableWriter2.call(this, OPERATE_TYPE.PUBACK) || this; + _this10._name = MESSAGE_NAME.PUB_ACK; + _this10.status = void 0; + _this10.date = 0; + _this10.millisecond = 0; + _this10.messageUId = void 0; + _this10.timestamp = 0; + _this10.messageId = messageId; + return _this10; + } + + var _proto10 = PubAckWriter.prototype; + + _proto10.writeMessage = function writeMessage(stream) { + RetryableWriter.prototype.writeMessage.call(this, stream); + }; + + return PubAckWriter; + }(RetryableWriter); + + var QueryWriter = function (_RetryableWriter3) { + _inheritsLoose(QueryWriter, _RetryableWriter3); + + function QueryWriter(topic, data, targetId) { + var _this11; + + _this11 = _RetryableWriter3.call(this, OPERATE_TYPE.QUERY) || this; + _this11._name = MESSAGE_NAME.QUERY; + _this11.topic = void 0; + _this11.data = void 0; + _this11.targetId = void 0; + _this11.identifier = IDENTIFIER.QUERY; + _this11.topic = topic; + _this11.data = utils.isString(data) ? BinaryHelper.writeUTF(data) : data; + _this11.targetId = targetId; + return _this11; + } + + var _proto11 = QueryWriter.prototype; + + _proto11.writeMessage = function writeMessage(stream) { + stream.writeUTF(this.topic); + stream.writeUTF(this.targetId); + RetryableWriter.prototype.writeMessage.call(this, stream); + stream.write(this.data); + }; + + return QueryWriter; + }(RetryableWriter); + + var QueryConWriter = function (_RetryableWriter4) { + _inheritsLoose(QueryConWriter, _RetryableWriter4); + + function QueryConWriter(messageId) { + var _this12; + + _this12 = _RetryableWriter4.call(this, OPERATE_TYPE.QUERYCON) || this; + _this12._name = MESSAGE_NAME.QUERY_CON; + _this12.messageId = messageId; + return _this12; + } + + return QueryConWriter; + }(RetryableWriter); + + var QueryAckReader = function (_RetryableReader3) { + _inheritsLoose(QueryAckReader, _RetryableReader3); + + function QueryAckReader() { + var _this13; + + for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { + args[_key8] = arguments[_key8]; + } + + _this13 = _RetryableReader3.call.apply(_RetryableReader3, [this].concat(args)) || this; + _this13._name = MESSAGE_NAME.QUERY_ACK; + _this13.data = void 0; + _this13.status = void 0; + _this13.date = void 0; + _this13.identifier = IDENTIFIER.QUERY; + return _this13; + } + + var _proto12 = QueryAckReader.prototype; + + _proto12.readMessage = function readMessage(stream) { + RetryableReader.prototype.readMessage.call(this, stream); + this.date = stream.readInt(); + this.status = stream.readByte() * 256 + stream.readByte(); + this.data = stream.readAll(); + }; + + return QueryAckReader; + }(RetryableReader); + + var getReaderByHeader = function getReaderByHeader(header) { + var type = header.type, + msg = new BaseReader(header); + + switch (type) { + case OPERATE_TYPE.CONNACK: + msg = new ConnAckReader(header); + break; + + case OPERATE_TYPE.PUBLISH: + msg = new PublishReader(header); + msg.syncMsg = header.syncMsg; + break; + + case OPERATE_TYPE.PUBACK: + msg = new PubAckReader(header); + break; + + case OPERATE_TYPE.QUERYACK: + msg = new QueryAckReader(header); + break; + + case OPERATE_TYPE.SUBACK: + case OPERATE_TYPE.UNSUBACK: + case OPERATE_TYPE.PINGRESP: + msg = new PingRespReader(header); + break; + + case OPERATE_TYPE.DISCONNECT: + msg = new DisconnectReader(header); + break; + + default: + throw new Error('No support for deserializing ' + type + ' messages'); + } + + return msg; + }; + + var readWSBuffer = function readWSBuffer(data) { + var arr = new Uint8Array(data); + var stream = new RongStreamReader(arr); + var flags = stream.readByte(), + header = new Header(flags); + var msg = getReaderByHeader(header); + msg.read(stream, arr.length - 1); + return msg; + }; + + var readCometData = function readCometData(data) { + var flags = data.headerCode, + header = new Header(flags); + var msg = getReaderByHeader(header); + utils.forEach(data, function (item, key) { + if (key in msg) { + msg[key] = item; + } + }); + return msg; + }; + + var ENGINE_EVENT = { + WATCH: 'watch', + UN_WATCH: 'unwatch', + CONNECT: 'connect', + RECONNECT: 'reconnect', + DISCONNECT: 'disconnect', + CHANGE_USER: 'changeUser', + GET_CONNECTION_STATUS: 'getConnectionStatus', + GET_CONNECTION_USER_ID: 'getConnectionUserId', + GET_CONNECTED_TIME: 'getConnectedTime', + GET_APP_INFO: 'getAppInfo', + GET_CONVERSATION_LIST: 'getConversationList', + REMOVE_CONVERSATION_LIST: 'removeConversationList', + REMOVE_CONVERSATION: 'removeConversation', + GET_TOTAL_UNREAD_COUNT: 'getTotalUnreadCount', + CLEAR_UNREAD_COUNT: 'clearUnreadCount', + GET_UNREAD_COUNT: 'getUnreadCount', + GET_LOCAL_CONVERSATION: 'getLocalConversation', + SET_CONVERSATION_STATUS_LIST: 'setConversationStatusList', + SEND_MESSAGE: 'sendMessage', + GET_HISTORY_MSGS: 'getHistoryMessages', + DELETE_MESSAGES: 'deleteHistoryMessages', + CLEAR_MESSAGES: 'clearHistoryMessages', + RECALL_MESSAGE: 'recallMessage', + JOIN_CHATROOM: 'joinChatRoom', + QUIT_CHATROOM: 'quitChatRoom', + GET_CHATROOM_INFO: 'getChatRoomInfo', + GET_CHATROOM_MSGS: 'getChatRoomHistoryMessages', + SET_KV: 'setChatRoomKV', + FORCE_SET_KV: 'forceSetChatRoomKV', + DEL_KV: 'removeChatRoomKV', + FORCE_DEL_KV: 'forceRemoveChatRoomKV', + GET_KV: 'getChatRoomKV', + GET_ALL_KV: 'getAllChatRoomKV', + JOIN_RTC: 'joinRTCRoom', + QUIT_RTC: 'quitRTCRoom', + PING_RTC: 'RTCPing', + GET_RTC_ROOM_INFO: 'getRTCRoomInfo', + SET_RTC_DATA: 'setRTCData', + GET_RTC_DATA: 'getRTCData', + DEL_RTC_DATA: 'removeRTCData', + SET_RTC_OUT_DATA: 'setRTCOutData', + GET_RTC_OUT_DATA: 'getRTCOutData', + GET_RTC_TOKEN: 'getRTCToken', + SET_RTC_STATE: 'setRTCState', + GET_RTC_USER_INFO_LIST: 'getRTCUserInfoList', + SET_RTC_USER_INFO: 'setRTCUserInfo', + DEL_RTC_USER_INFO: 'removeRTCUserInfo', + GET_RTC_USER_LIST: 'getRTCUserList', + GET_UPLOAD_TOKEN: 'getFileToken', + GET_UPLOAD_URL: 'getFileUrl' + }; + var ENGINE_EVENT_NEED_CONNECTED = [ENGINE_EVENT.GET_CONVERSATION_LIST, ENGINE_EVENT.REMOVE_CONVERSATION_LIST, ENGINE_EVENT.REMOVE_CONVERSATION, ENGINE_EVENT.GET_TOTAL_UNREAD_COUNT, ENGINE_EVENT.CLEAR_UNREAD_COUNT, ENGINE_EVENT.SEND_MESSAGE, ENGINE_EVENT.GET_HISTORY_MSGS, ENGINE_EVENT.DELETE_MESSAGES, ENGINE_EVENT.CLEAR_MESSAGES, ENGINE_EVENT.RECALL_MESSAGE, ENGINE_EVENT.JOIN_CHATROOM, ENGINE_EVENT.QUIT_CHATROOM, ENGINE_EVENT.GET_CHATROOM_INFO, ENGINE_EVENT.GET_CHATROOM_MSGS]; + var ENGINE_EVENT_NEED_DISCONNECTED = [ENGINE_EVENT.CONNECT, ENGINE_EVENT.RECONNECT]; + var IM_EVENT = { + STATUS: 'status', + MESSAGE: 'message', + CONVERSATION: 'conversation', + SETTING: 'setting' + }; + var TRANSPORT_EVENT = { + SIGNAL: 'signal', + STATUS: 'status' + }; + var SERVER_EVENT_NAME = { + STATUS: 'status', + NOTIFY_PULL: 'notifyPull', + DIRECT_MSG: 'directMessage', + CHRM_KV_CHANGED: 'chatRoomKV', + CHRM_KV_SET: 'chatRoomKVSet', + MESSAGE_SEND: 'sendMessage', + JOIN_CHATROOM: 'joinChatRoom', + BEFORE_JOIN_CHATROOM: 'beforeJoinChatRoom', + USER_SETTING_CHANGED: 'userSetting', + CONVERSATION_STATUS_CHANGED: 'converStatusChanged', + CONVERSATION_STATUS_SETED: 'converStatusSeted' + }; + + var _APP_ENGINE_EVENT_LOG; + var PLATFORM$1 = 'Web'; + var LEVEL = { + FATAL: 0, + ERROR: 1, + WARN: 2, + INFO: 3, + DEBUG: 4 + }; + var STORE_SIZE = { + ADVANCED: 500, + LOW: 500 + }; + var LOG_TYPE = { + 'IM': 'IM', + 'RTC': 'RTC' + }; + var TAG = { + L_GET_NAVI_T: 'L-get_navi-T', + L_GET_NAVI_R: 'L-get_navi-R', + L_PING_WS_T: 'L-ping_ws-T', + L_PING_WS_R: 'L-ping_ws-R', + L_NETWORK_CHANGED_S: 'L-network_changed-S', + L_DECODE_MSG_E: 'L-decode_msg-E', + L_RECONNECT_T: 'L-reconnect-T', + L_RECONNECT_R: 'L-reconnect-R', + L_PULL_CHRM_KV_T: 'L-pull-chrm-kv-T', + L_PULL_CHRM_KV_R: 'L-pull-chrm-kv-R', + L_PING_S: 'L-ping-S', + L_CRASH_F: 'L-crash_web-F', + A_INIT_O: 'A-init-O', + A_CONNECT_T: 'A-connect-T', + A_CONNECT_R: 'A-connect-R', + A_DISCONNECT_T: 'A-disconnect-T', + A_DISCONNECT_R: 'A-disconnect-R', + A_RECONNECT_T: 'A-reconnect-T', + A_RECONNECT_R: 'A-reconnect-R', + A_JOIN_CHATROOM_T: 'A-join_chatroom-T', + A_JOIN_CHATROOM_R: 'A-join_chatroom-R', + A_QUIT_CHATROOM_T: 'A-quit_chatroom-T', + A_QUIT_CHATROOM_R: 'A-quit_chatroom-R', + P_NOTIFY_CHRM_KV_S: 'P-notify-chrm-kv-R', + G_CRASH_E: 'G-crash-E', + G_UPLOAD_LOG_S: 'G-upload_log-S', + G_UPLOAD_LOG_E: 'G-upload_log-E' + }; + var APP_ENGINE_EVENT_LOG_TAG = (_APP_ENGINE_EVENT_LOG = {}, _APP_ENGINE_EVENT_LOG[ENGINE_EVENT.CONNECT] = { + req: TAG.A_CONNECT_T, + resp: TAG.A_CONNECT_R + }, _APP_ENGINE_EVENT_LOG[ENGINE_EVENT.DISCONNECT] = { + req: TAG.A_DISCONNECT_T, + resp: TAG.A_DISCONNECT_R + }, _APP_ENGINE_EVENT_LOG[ENGINE_EVENT.RECONNECT] = { + req: TAG.A_RECONNECT_T, + resp: TAG.A_RECONNECT_R + }, _APP_ENGINE_EVENT_LOG[ENGINE_EVENT.JOIN_CHATROOM] = { + req: TAG.A_JOIN_CHATROOM_T, + resp: TAG.A_JOIN_CHATROOM_R + }, _APP_ENGINE_EVENT_LOG[ENGINE_EVENT.QUIT_CHATROOM] = { + req: TAG.A_QUIT_CHATROOM_T, + resp: TAG.A_QUIT_CHATROOM_R + }, _APP_ENGINE_EVENT_LOG); + var REPORT_TYPE = { + REALTIME: 0, + FULL: 1 + }; + var CSV_LOG_TPL = '{sessionId},{time},{type},{level},{tag},{content}\n'; + var REALTIME_URL_TPL = '{protocol}{url}?version={version}&appkey={appkey}&userId={userId}&deviceId={deviceId}&deviceInfo={deviceInfo}&platform={platform}'; + var MSGNOTIF_URL_TPL = '{protocol}{url}?version={version}&appkey={appkey}&userId={userId}&logId={logId}&deviceId={deviceId}&deviceInfo={deviceInfo}&platform={platform}'; + var LOG_CMD_MSG_SENDER = 'rongcloudsystem'; + var NO_FULL_LOG = 'nodata'; + var REQUEST_TIMEOUT = 15000; + var DEFAULT_SERVER_OPTION = { + isOpen: true, + url: 'logcollection.ronghub.com', + realtimeLevel: LEVEL.ERROR, + realtimeInterval: 20000, + realtimeMaxTimes: 5, + fullInterval: 5000, + fullMaxTimes: 3, + fullLevel: LEVEL.DEBUG + }; + + var isEmpty$1 = utils.isEmpty, + tplEngine$1 = utils.tplEngine, + getRandomNum$1 = utils.getRandomNum; + + var getTransporterUrl = function getTransporterUrl(option) { + var domain = option.domain, + appkey = option.appkey, + token = option.token, + connectType = option.connectType, + protocol = option.protocol; + var isComet = connectType === CONNECT_TYPE.COMET; + var cmpTpl = CMP_URL_TPL; + + if (isEmpty$1(protocol)) { + protocol = isComet ? env.protocol.http : env.protocol.ws; + } + + var tplOption = { + domain: domain, + appkey: appkey, + protocol: protocol, + apiVer: getRandomNum$1(1e6), + token: utils.encodeURI(token) + }; + + if (env.isMini) { + cmpTpl = MINI_CMP_URL_TPL; + utils.extend(tplOption, { + platform: PLATFORM_TYPE.MINI + }); + } + + return tplEngine$1(cmpTpl, tplOption); + }; + + var isGroup = function isGroup(type) { + return type === CONVERSATION_TYPE.GROUP; + }; + + var isChatRoom = function isChatRoom(type) { + return type === CONVERSATION_TYPE.CHATROOM; + }; + + var getConversationTypeList = function getConversationTypeList() { + return utils.getValues(CONVERSATION_TYPE); + }; + + var isValidConversationType = function isValidConversationType(type) { + var conversationTypeList = getConversationTypeList(); + return utils.isNumber(type) && utils.isInclude(conversationTypeList, type); + }; + + var getSessionId = function getSessionId(option) { + var isStatusMessage = option.isStatusMessage; + var isPersited = option.isPersited, + isCounted = option.isCounted, + isMentiond = option.isMentiond; + + if (isStatusMessage) { + isPersited = isCounted = false; + } + + var sessionId = 0; + + if (isPersited) { + sessionId = sessionId | 0x01; + } + + if (isCounted) { + sessionId = sessionId | 0x02; + } + + if (isMentiond) { + sessionId = sessionId | 0x04; + } + + return sessionId; + }; + + var getPersitedAndCountedBySessionId = function getPersitedAndCountedBySessionId(sessionId) { + var isPersited, isCounted; + + switch (sessionId) { + case MESSAGE_TAG.COUNT_ONLY: + isPersited = false; + isCounted = true; + break; + + case MESSAGE_TAG.PERSIT_ONLY: + isPersited = true; + isCounted = false; + break; + + case MESSAGE_TAG.NONE: + isPersited = isCounted = false; + break; + + case MESSAGE_TAG.PERSIT_AND_COUNT: + default: + isPersited = isCounted = true; + break; + } + + return { + isPersited: isPersited, + isCounted: isCounted + }; + }; + + var getMessageOptionByStatus = function getMessageOptionByStatus(status) { + var isPersited = true, + isCounted = true, + isMentiond = false; + isPersited = !!(status & 0x10); + isCounted = !!(status & 0x20); + isMentiond = !!(status & 0x40); + return { + isPersited: isPersited, + isCounted: isCounted, + isMentiond: isMentiond + }; + }; + + var SignalId = { + ids: {}, + temp: '{appkey}_{userId}', + get: function get(option) { + var key = utils.tplEngine(SignalId.temp, option); + var id = SignalId.ids[key] || 0; + id++; + SignalId.ids[key] = id; + return id; + }, + clear: function clear(option) { + var key = utils.tplEngine(SignalId.temp, option); + SignalId.ids[key] = 0; + }, + isExceedLimit: function isExceedLimit(id) { + return id > MAX_SINGAL_ID; + } + }; + + var RCSocket = function () { + function RCSocket(options) { + this._socket = void 0; + this.eventEmitter = new utils.EventEmitter(); + this.KEY = { + OPEN: 'open', + MSG: 'msg', + ERROR: 'error', + CLOSE: 'close' + }; + var self = this; + var KEY = self.KEY; + self._socket = new utils.Socket(options); + + self._socket.onOpen(function (data) { + self.eventEmitter.emit(KEY.OPEN, data); + }); + + self._socket.onMessage(function (data) { + self.eventEmitter.emit(KEY.MSG, data); + }); + + self._socket.onError(function (data) { + data = self._formatCloseData(data); + self.eventEmitter.emit(KEY.ERROR, data); + }); + + self._socket.onClose(function (data) { + data = self._formatCloseData(data); + self.eventEmitter.emit(KEY.CLOSE, data); + }); + } + + var _proto = RCSocket.prototype; + + _proto._formatCloseData = function _formatCloseData(data) { + if (env.isMini) { + data = data || {}; + var _data = data, + errMsg = _data.errMsg; + data.code = MINI_ERROR_MSG_TO_STATUS[errMsg]; + } + + return data; + }; + + _proto.send = function send(data) { + return this._socket.send(data); + }; + + _proto.close = function close() { + this.eventEmitter.clear(); + + this._socket.close(); + }; + + _proto.onOpen = function onOpen(event) { + this.eventEmitter.on(this.KEY.OPEN, event); + }; + + _proto.onMessage = function onMessage(event) { + this.eventEmitter.on(this.KEY.MSG, event); + }; + + _proto.onError = function onError(event) { + this.eventEmitter.on(this.KEY.ERROR, event); + }; + + _proto.onClose = function onClose(event) { + this.eventEmitter.on(this.KEY.CLOSE, event); + }; + + return RCSocket; + }(); + + var RCStorage = function () { + function RCStorage(suffix) { + var _ref; + + this._cache = void 0; + this.STORAGE_KEY = void 0; + var storageKey = suffix ? STORAGE_ROOT_KEY + suffix : STORAGE_ROOT_KEY; + var localCache = utils.Storage.get(storageKey) || {}; + this._cache = new utils.Cache((_ref = {}, _ref[storageKey] = localCache, _ref)); + this.STORAGE_KEY = storageKey; + } + + var _proto2 = RCStorage.prototype; + + _proto2._get = function _get() { + var KEY = this.STORAGE_KEY; + return this._cache.get(KEY) || {}; + }; + + _proto2._set = function _set(cache) { + var KEY = this.STORAGE_KEY; + cache = cache || {}; + + this._cache.set(KEY, cache); + + utils.Storage.set(KEY, cache); + }; + + _proto2.set = function set(key, value) { + var localValue = this._get(); + + localValue[key] = value; + + this._set(localValue); + }; + + _proto2.remove = function remove(key) { + var localValue = this._get(); + + delete localValue[key]; + + this._set(localValue); + }; + + _proto2.clear = function clear() { + var KEY = this.STORAGE_KEY; + utils.Storage.remove(KEY); + + this._cache.remove(KEY); + }; + + _proto2.get = function get(key) { + var localValue = this._get(); + + return localValue[key]; + }; + + _proto2.getKeys = function getKeys() { + var localValue = this._get(); + + return utils.getKeys(localValue); + }; + + _proto2.getValues = function getValues() { + return this._get() || {}; + }; + + return RCStorage; + }(); + + var formatSyncTime = function formatSyncTime(_syncTime) { + _syncTime = _syncTime || {}; + _syncTime.inboxTime = _syncTime.inboxTime || 0; + _syncTime.sendboxTime = _syncTime.sendboxTime || 0; + return _syncTime; + }; + + var MessageTimeSyner = function () { + function MessageTimeSyner(option) { + this._syncTime = void 0; + this._storage = void 0; + option = option || {}; + var _option = option, + startSyncTime = _option.startSyncTime; + + this._initStorage(option); + + if (startSyncTime) { + this._syncTime = formatSyncTime(startSyncTime); + } + } + + var _proto3 = MessageTimeSyner.prototype; + + _proto3._initStorage = function _initStorage(option) { + var appkey = option.appkey, + userId = option.userId; + var ROOT_KEY = utils.tplEngine(STORAGE_SYNC_TIME.ROOT_KEY_TPL, { + appkey: appkey, + userId: userId + }); + var storage = new RCStorage(ROOT_KEY); + var syncTime = { + sendboxTime: storage.get(STORAGE_SYNC_TIME.SUB_KEY.SENDBOX), + inboxTime: storage.get(STORAGE_SYNC_TIME.SUB_KEY.INBOX) + }; + this._storage = storage; + this._syncTime = formatSyncTime(syncTime); + }; + + _proto3.setInbox = function setInbox(time) { + var beforeTime = this._syncTime.inboxTime || 0; + + if (beforeTime < time) { + this._syncTime.inboxTime = time; + + this._storage.set(STORAGE_SYNC_TIME.SUB_KEY.INBOX, time); + } + }; + + _proto3.setSendbox = function setSendbox(time) { + var beforeTime = this._syncTime.sendboxTime || 0; + + if (beforeTime < time) { + this._syncTime.sendboxTime = time; + + this._storage.set(STORAGE_SYNC_TIME.SUB_KEY.SENDBOX, time); + } + }; + + _proto3.setByMessage = function setByMessage(msg) { + var messageDirection = msg.messageDirection, + sentTime = msg.sentTime; + var isSelfSend = messageDirection === MESSAGE_DIRECTION.SEND; + isSelfSend ? this.setSendbox(sentTime) : this.setInbox(sentTime); + }; + + _proto3.get = function get() { + return formatSyncTime(this._syncTime); + }; + + return MessageTimeSyner; + }(); + + var ChatRoomMessageTimeSyner = function () { + function ChatRoomMessageTimeSyner() { + this._pullTimes = {}; + } + + var _proto4 = ChatRoomMessageTimeSyner.prototype; + + _proto4.set = function set(chrmId, time) { + this._pullTimes[chrmId] = time; + }; + + _proto4.get = function get(chrmId) { + return this._pullTimes[chrmId] || 0; + }; + + _proto4.setByMessage = function setByMessage(msg) { + var sentTime = msg.sentTime; + var chrmId = msg.targetId; + var beforeTime = this.get(chrmId); + + if (beforeTime < sentTime) { + this.set(chrmId, sentTime); + } + }; + + return ChatRoomMessageTimeSyner; + }(); + + var getUIDByToken = function getUIDByToken(token) { + return utils.md5(token).slice(8, 16); + }; + + var isIncludeNavi = function isIncludeNavi(token) { + return utils.isInclude(token, NAVI_SEPARATOR_IN_TOKEN); + }; + + var getNaviListByToken = function getNaviListByToken(token) { + var navDomainList = []; + + if (isIncludeNavi(token)) { + var separatorIndex = utils.indexOf(token, NAVI_SEPARATOR_IN_TOKEN); + var navsText = token.substring(separatorIndex + 1, token.length); + var domainList = navsText.split(DOMAIN_SEPARATOR_IN_NAVLIST); + utils.forEach(domainList, function (domain) { + if (!isEmpty$1(domain)) { + navDomainList.push(domain); + } + }); + } + + return navDomainList; + }; + + var getCMPDomainList = function getCMPDomainList(option, customOption) { + var server = option.server, + backupServer = option.backupServer; + server = server || ''; + backupServer = backupServer || ''; + var backupCMPList = backupServer.split(DOMAIN_SEPARATOR_IN_CMPLIST); + var cmpList = []; + + if (!utils.isEmpty(server)) { + cmpList.push(server); + } + + utils.forEach(backupCMPList, function (cmp) { + if (!utils.isEmpty(cmp)) { + cmpList.push(cmp); + } + }); + + if (!utils.isUndefined(customOption.customCMP) && !utils.isEmpty(customOption.customCMP)) { + cmpList = customOption.customCMP; + } + + return cmpList; + }; + + var getValidToken = function getValidToken(token) { + if (isIncludeNavi(token)) { + var separatorIndex = utils.indexOf(token, NAVI_SEPARATOR_IN_TOKEN); + token = token.substring(0, separatorIndex + 1); + } + + return token; + }; + + var getConnectType = function getConnectType(option) { + var connectType = option.connectType; + var isSpecifiedSocket = connectType === CONNECT_TYPE.WEBSOCKET; + var isSocket = isSpecifiedSocket && utils.isSupportSocket(); + return isSocket ? CONNECT_TYPE.WEBSOCKET : CONNECT_TYPE.COMET; + }; + + var isConnected = function isConnected(status) { + return utils.isEqual(status, CONNECTION_STATUS.CONNECTED); + }; + + var isConnecting = function isConnecting(status) { + return utils.isEqual(status, CONNECTION_STATUS.CONNECTING); + }; + + var isDisconnected = function isDisconnected(status) { + return !isConnected(status) && !isConnecting(status); + }; + + var getNavReqOption = function getNavReqOption(option, user) { + option = utils.copy(option); + option.token = user.token; + return option; + }; + + var getPingTimeout = function getPingTimeout(timeSpentConnect) { + var timeout = timeSpentConnect * 3; + + if (timeout < IM_PING_MIN_TIMEOUT) { + return IM_PING_MIN_TIMEOUT; + } + + if (timeout > IM_PING_MAX_TIMEOUT) { + return IM_PING_MAX_TIMEOUT; + } + + return timeout; + }; + + var DelayTimer = { + _delayTime: 0, + setTime: function setTime(time) { + var currentTime = utils.getCurrentTimestamp(); + DelayTimer._delayTime = currentTime - time; + }, + getTime: function getTime() { + var delayTime = DelayTimer._delayTime; + var currentTime = utils.getCurrentTimestamp(); + return currentTime - delayTime; + } + }; + + var isInValidConversationData = function isInValidConversationData(conversation) { + return !conversation.type || !conversation.targetId || !utils.isObject(conversation.latestMessage) || utils.isUndefined(conversation.unreadMessageCount); + }; + + var fixConversationData = function fixConversationData(conversation) { + conversation = conversation || {}; + var _conversation = conversation, + targetId = _conversation.targetId, + type = _conversation.type; + var defaultType = CONVERSATION_TYPE.PRIVATE, + defaultId = '', + defaultMsg = { + messageType: MESSAGE_TYPE.TEXT, + sentTime: DelayTimer.getTime(), + content: { + content: '' + }, + senderUserId: targetId, + targetId: targetId, + type: type + }; + conversation.type = type || defaultType; + conversation.targetId = targetId || defaultId; + conversation.latestMessage = conversation.latestMessage || defaultMsg; + return conversation; + }; + + var sortConversationList = function sortConversationList(conversationList) { + if (utils.isEmpty(conversationList)) { + return []; + } + + return utils.quickSort(conversationList, function (before, after) { + before = before || {}; + after = after || {}; + var beforeLatestMessage = before.latestMessage || {}, + afterLatestMessage = after.latestMessage || {}, + beforeLatestSentTime = beforeLatestMessage.sentTime || 0, + afterLatestSentTime = afterLatestMessage.sentTime || 0; + var flag = false; + + if (before.isTop && !after.isTop) { + flag = false; + } else if (!before.isTop && after.isTop) { + flag = true; + } else { + flag = afterLatestSentTime <= beforeLatestSentTime; + } + + return flag; + }); + }; + + var splitConversationListByIsTop = function splitConversationListByIsTop(conversationList) { + var topConversationList = [], + unToppedConversationList = []; + utils.forEach(conversationList, function (conversation) { + var isTop = conversation.isTop || false; + + if (isTop) { + topConversationList.push(conversation); + } else { + unToppedConversationList.push(conversation); + } + }); + return { + topConversationList: topConversationList || [], + unToppedConversationList: unToppedConversationList || [] + }; + }; + + var sortConList = function sortConList(conversationList) { + if (utils.isEmpty(conversationList)) { + return []; + } + + var splitConversationList = splitConversationListByIsTop(conversationList); + + var _sortListBySentTime = function _sortListBySentTime(convers) { + return utils.quickSort(convers, function (before, after) { + before = before || {}; + after = after || {}; + var beforeLatestMessage = before.latestMessage || {}, + afterLatestMessage = after.latestMessage || {}, + beforeLatestSentTime = beforeLatestMessage.sentTime || 0, + afterLatestSentTime = afterLatestMessage.sentTime || 0; + return afterLatestSentTime <= beforeLatestSentTime; + }); + }; + + var topConversationList = _sortListBySentTime(splitConversationList.topConversationList); + + var unToppedConversationList = _sortListBySentTime(splitConversationList.unToppedConversationList); + + topConversationList.push.apply(topConversationList, unToppedConversationList); + return topConversationList; + }; + + var isSupportStatusMessage = function isSupportStatusMessage(type) { + return !!CONVERSATION_TYPE_TO_PUBLISH_STATUS_TOPIC[type]; + }; + + var getConversationKey = function getConversationKey(option) { + var type = option.type, + targetId = option.targetId; + return type + '_' + targetId; + }; + + var getConversationByKey = function getConversationByKey(key) { + key = key || ''; + var arr = key.split('_'); + + if (arr.length === 2) { + return { + type: arr[0], + targetId: arr[1] + }; + } else { + return { + type: CONVERSATION_TYPE.PRIVATE, + targetId: '' + }; + } + }; + + var getChatRoomKVOptStatus = function getChatRoomKVOptStatus(entity, action) { + var status = 0; + + if (entity.isAutoDelete) { + status = status | CHATROOM_KV_STATUS_CODE.AUTO_DELETE; + } + + if (entity.isOverwrite) { + status = status | CHATROOM_KV_STATUS_CODE.OVERWRITE; + } + + if (utils.isEqual(action, CHATROOM_ENTRY_TYPE.DELETE)) { + status = status | CHATROOM_KV_STATUS_CODE.OPERATE; + } + + return status; + }; + + var getChatRoomKVByStatus = function getChatRoomKVByStatus(status) { + var isDeleteOpt = !!(status & CHATROOM_KV_STATUS_CODE.OPERATE); + return { + isAutoDelete: !!(status & CHATROOM_KV_STATUS_CODE.AUTO_DELETE), + isOverwrite: !!(status & CHATROOM_KV_STATUS_CODE.OVERWRITE), + type: isDeleteOpt ? CHATROOM_ENTRY_TYPE.DELETE : CHATROOM_ENTRY_TYPE.UPDATE + }; + }; + + var TextCompressor = { + _dataType: { + Tail: 0x30, + Compressed: 0x40, + NormalExt: 0x50, + Normal: 0x60, + Mark: 0x70 + }, + _chars: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + _scale: 62, + _max: 238327, + _indexOf: function _indexOf(map, source, fromIndex) { + var result = { + length: 0, + offset: -1 + }; + + if (fromIndex >= source.length - 1) { + return result; + } + + var c1 = source.charAt(fromIndex); + var c2 = source.charAt(fromIndex + 1); + var items = map[c1 + c2]; + + if (items[0] === fromIndex) { + return result; + } + + var space1 = source.length - fromIndex; + + for (var i = 0, len = items.length; i < len; i++) { + var item = items[i]; + var space2 = fromIndex - item; + + if (space2 > TextCompressor._max) { + continue; + } + + var end = Math.min(space1, space2); + + if (end <= result.length) { + break; + } + + if (result.length > 2) { + if (source.charAt(item + result.length - 1) !== source.charAt(fromIndex + result.length - 1)) { + continue; + } + } + + var m = 2; + + for (var j = m; j < end; j++) { + if (source.charAt(item + j) === source.charAt(fromIndex + j)) { + m++; + } else { + break; + } + } + + if (m >= result.length) { + result.length = m; + result.offset = item; + } + } + + return result; + }, + _numberEncode: function _numberEncode(num) { + var result = [], + remainder = 0; + + do { + remainder = num % TextCompressor._scale; + result.push(TextCompressor._chars.charAt(remainder)); + num = (num - remainder) / TextCompressor._scale; + } while (num > 0); + + return result.join(''); + }, + _numberDecode: function _numberDecode(str) { + var num = 0, + index = 0; + + for (var i = str.length - 1; i >= 0; i--) { + index = TextCompressor._chars.indexOf(str.charAt(i)); + + if (index === -1) { + throw new Error('decode number error, data is \'' + str + '\''); + } + + num = num * TextCompressor._scale + index; + } + + return num; + }, + compress: function compress(data) { + var map = {}; + + for (var p = 0; p < data.length - 1; p++) { + var c1 = data.charAt(p); + var c2 = data.charAt(p + 1); + var c = c1 + c2; + + if (!map.hasOwnProperty(c)) { + map[c] = [p]; + continue; + } + + map[c].push(p); + } + + var compressedData = [], + normalBlockBuffer = []; + + var encodeNormalBlock = function encodeNormalBlock() { + if (normalBlockBuffer.length > 0) { + var normalBlock = normalBlockBuffer.join(''); + normalBlockBuffer = []; + + if (normalBlock.length > 26) { + var normalExtBlockLength = TextCompressor._numberEncode(normalBlock.length); + + var normalExtBlockHeader = String.fromCharCode(TextCompressor._dataType.NormalExt | normalExtBlockLength.length); + compressedData.push(normalExtBlockHeader + normalExtBlockLength); + } else { + var normalBlockHeader = String.fromCharCode(TextCompressor._dataType.Normal | normalBlock.length); + compressedData.push(normalBlockHeader); + } + + compressedData.push(normalBlock); + } + }; + + var i = 0; + + while (i < data.length) { + var r = TextCompressor._indexOf(map, data, i); + + if (r.length < 2) { + normalBlockBuffer.push(data.charAt(i++)); + continue; + } + + if (r.length < 4) { + normalBlockBuffer.push(data.substr(i, r.length)); + i += r.length; + continue; + } + + var offset = TextCompressor._numberEncode(i - r.offset); + + var length = TextCompressor._numberEncode(r.length); + + if (offset.length + length.length >= r.length) { + normalBlockBuffer.push(data.substr(i, r.length)); + i += r.length; + continue; + } + + encodeNormalBlock(); + var compressedBlockHeader = String.fromCharCode(TextCompressor._dataType.Compressed | offset.length << 2 | length.length); + compressedData.push(compressedBlockHeader + offset + length); + i += r.length; + } + + encodeNormalBlock(); + + var dataLengthTo62 = TextCompressor._numberEncode(data.length); + + var tailBlockHeader = String.fromCharCode(TextCompressor._dataType.Tail | dataLengthTo62.length); + compressedData.push(tailBlockHeader + dataLengthTo62); + return compressedData.join(''); + }, + uncompress: function uncompress(data) { + var i = 0; + var result = ''; + + label1: do { + var header = data.charCodeAt(i++); + var headerType = header & TextCompressor._dataType.Mark; + var headerVal = header & 0xF; + + switch (headerType) { + case TextCompressor._dataType.Compressed: + var p1 = headerVal >> 2; + var p2 = headerVal & 3; + + if (p1 === 0 || p2 === 0) { + throw new Error('Data parsing error,at ' + i); + } + + var offset = TextCompressor._numberDecode(data.substr(i, p1)); + + var len = TextCompressor._numberDecode(data.substr(i += p1, p2)); + + offset = result.length - offset; + + if (offset + len > result.length) { + throw new Error('Data parsing error,at ' + i); + } + + i += p2; + result += result.substr(offset, len); + break; + + case TextCompressor._dataType.Tail: + var num = TextCompressor._numberDecode(data.substr(i, headerVal)); + + if (num !== result.length) { + throw new Error('Data parsing error,at ' + i); + } + + i += headerVal; + break label1; + + case TextCompressor._dataType.NormalExt: + var normalNum = TextCompressor._numberDecode(data.substr(i, headerVal)); + + result += data.substr(i += headerVal, normalNum); + i += normalNum; + break; + + case TextCompressor._dataType.Normal: + result += data.substr(i, headerVal); + i += headerVal; + break; + + case TextCompressor._dataType.Mark: + if (headerVal > 10) { + throw new Error('Data parsing error,at ' + i); + } + + result += data.substr(i, 16 + headerVal); + i += 16 + headerVal; + break; + + default: + throw new Error('Data parsing error,at ' + i + ' header:' + headerType); + } + } while (i < data.length); + + return result; + } + }; + + var isBelowIE = function isBelowIE(version) { + var system = env.system; + var flag = system.model === 'IE' && Number(system.version) < version ? true : false; + return flag; + }; + + var stringToCsv = function stringToCsv(str) { + var csvStr = str.replace(/"/g, '""'); + var tpl = '"{csvStr}"'; + return tplEngine$1(tpl, { + csvStr: csvStr + }); + }; + + var getWebSessionId = function getWebSessionId() { + var sessionId = utils.Session.get(STORAGE_SESSION_ID_KEY); + + if (utils.isEmpty(sessionId)) { + sessionId = utils.getUUID22().slice(0, 10); + utils.Session.set(STORAGE_SESSION_ID_KEY, sessionId); + } + + return sessionId; + }; + + var getDeviceId = function getDeviceId() { + var deviceId = utils.Storage.get(STORAGE_DEVICE_ID_KEY); + + if (utils.isEmpty(deviceId)) { + deviceId = utils.getUUID22(); + utils.Storage.set(STORAGE_DEVICE_ID_KEY, deviceId); + } + + return deviceId; + }; + + var getDeviceInfo = function getDeviceInfo() { + var tpl = '{brower}|{version}|{sessionId}'; + return tplEngine$1(tpl, { + brower: env.system.model, + version: env.system.version, + sessionId: getWebSessionId() + }); + }; + + var getReportLogUrl = function getReportLogUrl(params) { + var entireUrl = '', + protocol = env.protocol.http + '//'; + var urlConf = { + protocol: protocol, + url: params.url, + version: SDK_VERSION, + appkey: params.appkey, + deviceId: getDeviceId(), + deviceInfo: getDeviceInfo(), + platform: PLATFORM$1, + userId: params.userId + }; + + switch (params.type) { + case REPORT_TYPE.REALTIME: + entireUrl = tplEngine$1(REALTIME_URL_TPL, urlConf); + break; + + case REPORT_TYPE.FULL: + entireUrl = tplEngine$1(MSGNOTIF_URL_TPL, utils.extend(urlConf, { + logId: params.logId + })); + break; + + default: + break; + } + + return entireUrl; + }; + + var isLogCommandMsg = function isLogCommandMsg(msg) { + var content = msg.content; + return msg.messageType === MESSAGE_TYPE.LOG_COMMAND && msg.senderUserId === LOG_CMD_MSG_SENDER && content.platform === 'Web'; + }; + + var isValidChatRoomKey = function isValidChatRoomKey(key) { + if (!utils.isString(key)) { + return; + } + + var isValid = /^[A-Za-z0-9_=+-]+$/.test(key), + keyLen = key.length, + isLimit = keyLen <= CHATROOM_KEY_LENGTH.MAX && keyLen >= CHATROOM_KEY_LENGTH.MIN; + return isValid && isLimit; + }; + + var isValidChatRoomValue = function isValidChatRoomValue(value) { + if (!utils.isString(value)) { + return; + } + + var valLen = value.length; + return valLen <= CHATROOM_VALUE_LENGTH.MAX && valLen >= CHATROOM_VALUE_LENGTH.MIN; + }; + + var genUploadFileName = function genUploadFileName(type, fileName) { + var tpl = '{type}__RC-{date}_{random}_{timestamp}{uuid}{extension}'; + var random = Math.floor(Math.random() * 1000 % 10000); + var uuid = utils.getUUID(); + var fileNameArr, extension; + + if (fileName) { + fileNameArr = fileName.split('.'); + extension = '.' + fileNameArr[fileNameArr.length - 1]; + } + + return tplEngine$1(tpl, { + type: type, + date: utils.formateDate('-'), + random: random, + uuid: uuid, + timestamp: DelayTimer.getTime(), + extension: extension || '' + }); + }; + + var getUploadFileDomains = function getUploadFileDomains(navi) { + var uploadServer = navi.uploadServer, + bosAddr = navi.bosAddr; + return { + qiniu: uploadServer, + bos: bosAddr + }; + }; + + var mergeConversationList = function mergeConversationList(option) { + option = option || {}; + var _option2 = option, + conversationList = _option2.conversationList, + updatedConversationList = _option2.updatedConversationList; + var allConversationList = updatedConversationList.concat(conversationList); + var hashTable = {}; + var newList = []; + var invalidDataIndexList = []; + utils.forEach(allConversationList, function (conversation) { + if (!utils.isObject(conversation)) { + return; + } + + var key = getConversationKey(conversation), + hashItem = hashTable[key] || {}, + hashIndex = utils.isUndefined(hashItem.index) ? newList.length : hashItem.index, + hashVal = hashItem.val || {}, + cacheUpdatedItems = hashVal.updatedItems || {}, + updatedItems = conversation.updatedItems || {}; + conversation = utils.extend(conversation, hashVal); + utils.forEach(cacheUpdatedItems, function (item, key) { + conversation[key] = item.val; + }); + utils.forEach(updatedItems, function (item, key) { + var cacheItem = cacheUpdatedItems[key] || {}, + cacheItemUpdatedTime = cacheItem.time || 0; + + if (item.time > cacheItemUpdatedTime) { + conversation[key] = item.val; + } + }); + hashTable[key] = { + index: hashIndex, + val: conversation + }; + newList[hashIndex] = conversation; + isInValidConversationData(conversation) && invalidDataIndexList.push(hashIndex); + }); + utils.forEach(invalidDataIndexList, function (invalidIndex) { + var conversation = newList[invalidIndex]; + newList[invalidIndex] = fixConversationData(conversation); + }); + newList = sortConList(newList); + return newList; + }; + + var common = { + isConnected: isConnected, + isConnecting: isConnecting, + isDisconnected: isDisconnected, + getConnectType: getConnectType, + getTransporterUrl: getTransporterUrl, + isGroup: isGroup, + isChatRoom: isChatRoom, + getConversationTypeList: getConversationTypeList, + isValidConversationType: isValidConversationType, + getUIDByToken: getUIDByToken, + getSessionId: getSessionId, + getMessageOptionByStatus: getMessageOptionByStatus, + getPersitedAndCountedBySessionId: getPersitedAndCountedBySessionId, + SignalId: SignalId, + MessageTimeSyner: MessageTimeSyner, + ChatRoomMessageTimeSyner: ChatRoomMessageTimeSyner, + getCMPDomainList: getCMPDomainList, + getNaviListByToken: getNaviListByToken, + getValidToken: getValidToken, + RCSocket: RCSocket, + RCStorage: RCStorage, + getNavReqOption: getNavReqOption, + getPingTimeout: getPingTimeout, + fixConversationData: fixConversationData, + sortConversationList: sortConversationList, + DelayTimer: DelayTimer, + isSupportStatusMessage: isSupportStatusMessage, + getConversationKey: getConversationKey, + getConversationByKey: getConversationByKey, + getChatRoomKVOptStatus: getChatRoomKVOptStatus, + getChatRoomKVByStatus: getChatRoomKVByStatus, + TextCompressor: TextCompressor, + isBelowIE: isBelowIE, + getReportLogUrl: getReportLogUrl, + isLogCommandMsg: isLogCommandMsg, + getWebSessionId: getWebSessionId, + getDeviceId: getDeviceId, + stringToCsv: stringToCsv, + isValidChatRoomKey: isValidChatRoomKey, + isValidChatRoomValue: isValidChatRoomValue, + genUploadFileName: genUploadFileName, + getUploadFileDomains: getUploadFileDomains, + mergeConversationList: mergeConversationList, + sortConList: sortConList + }; + + var EventEmitter$1 = utils.EventEmitter, + DeferHandler$1 = utils.DeferHandler, + Timer$1 = utils.Timer; + var RCSocket$1 = common.RCSocket; + var TransHandlerID = { + CONNECT: 'connect', + PING: 'ping' + }; + + var Heartbeat = function () { + function Heartbeat(transporter, option) { + this._transporter = void 0; + this._timer = void 0; + option = option || {}; + var timeout = option.timeout; + this._transporter = transporter; + this._timer = new Timer$1({ + type: TIMER_TYPE.INTERVAL, + timeout: timeout + }); + } + + var _proto = Heartbeat.prototype; + + _proto.check = function check(timeout) { + var _transporter = this._transporter; + var _deferHandler = _transporter._deferHandler; + var pingReqSignal = new PingReqWriter(); + + _transporter.sendSignal(pingReqSignal); + + return utils.deferred(function (resolve, reject) { + _deferHandler.add(TransHandlerID.PING, { + resolve: resolve, + reject: reject + }, { + timeout: timeout + }); + }); + }; + + _proto.start = function start(timeout, onError) { + var self = this; + + self._timer.start(function () { + self.check(timeout).then(utils.noop)["catch"](onError); + }); + }; + + _proto.stop = function stop() { + this._timer && this._timer.stop(); + }; + + return Heartbeat; + }(); + + var SocketTransporter = function () { + function SocketTransporter(option) { + this._socket = void 0; + this._option = void 0; + this._transporterEventEmiiter = new EventEmitter$1(); + this._deferHandler = new DeferHandler$1(); + this._heartbeat = new Heartbeat(this, { + timeout: IM_PING_INTERVAL_TIME + }); + this._connectedTime = void 0; + this._option = option; + } + + var _proto2 = SocketTransporter.prototype; + + _proto2._createSocket = function _createSocket(url) { + var self = this; + var _transporterEventEmiiter = self._transporterEventEmiiter; + var socket = new RCSocket$1({ + url: url + }); + + var onClose = function onClose(event) { + event = event || {}; + var code = event.code || TRANSPORTER_STATUS.CLOSE_ABNORMAL; + + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, code); + + self.disconnect(); + }; + + socket.onMessage(function (msg) { + var data = msg.data; + + if (!utils.isArrayBuffer(data)) { + throw new Error('Error socket signal'); + } + + var signal = readWSBuffer(data); + self.handleSignal(signal); + }); + socket.onError(onClose); + socket.onClose(onClose); + return socket; + }; + + _proto2._startHeartbeat = function _startHeartbeat(timeSpentConnect) { + var self = this; + var _heartbeat = self._heartbeat, + _transporterEventEmiiter = self._transporterEventEmiiter; + + _heartbeat.check(FIRST_PING_TIMEOUT).then(utils.noop)["catch"](function () { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.PING_FIRST_TIMEOUT); + + self.disconnect(); + }); + + var pingTimeout = common.getPingTimeout(timeSpentConnect); + + _heartbeat.start(pingTimeout, function () { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.PING_TIMEOUT); + + self.disconnect(); + }); + }; + + _proto2._stopHeartbeat = function _stopHeartbeat() { + this._heartbeat.stop(); + }; + + _proto2.watchSignal = function watchSignal(watcher) { + this._transporterEventEmiiter.on(TRANSPORT_EVENT.SIGNAL, watcher); + }; + + _proto2.watchStatus = function watchStatus(watcher) { + this._transporterEventEmiiter.on(TRANSPORT_EVENT.STATUS, watcher); + }; + + _proto2.connect = function connect(user, option) { + var self = this; + var _self$_option = self._option, + appkey = _self$_option.appkey, + connectType = _self$_option.connectType, + _deferHandler = self._deferHandler; + var token = user.token; + var domain = option.domain; + var url = common.getTransporterUrl({ + domain: domain, + appkey: appkey, + connectType: connectType, + token: token + }); + var timeBeforeConnect = utils.getCurrentTimestamp(); + self._socket = this._createSocket(url); + return utils.deferred(function (resolve, reject) { + _deferHandler.add(TransHandlerID.CONNECT, { + resolve: resolve, + reject: reject + }); + }).then(function (result) { + var timeAfterConnect = utils.getCurrentTimestamp(); + var timeSpentConnect = timeAfterConnect - timeBeforeConnect; + + self._startHeartbeat(timeSpentConnect); + + return result; + }); + }; + + _proto2.sendSignal = function sendSignal(writer) { + var binary = writer.getBufferData(); + + this._socket.send(binary.buffer); + }; + + _proto2.handleSignal = function handleSignal(signal) { + var _transporterEventEmiiter = this._transporterEventEmiiter, + _deferHandler = this._deferHandler; + + if (signal instanceof ConnAckReader) { + this.handleConnAck(signal); + } else if (signal instanceof PingRespReader) { + _deferHandler.resolve(TransHandlerID.PING); + } else { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.SIGNAL, signal); + } + + if (signal && utils.isValidTimestamp(signal.timestamp)) { + common.DelayTimer.setTime(signal.timestamp); + } + }; + + _proto2.handleConnAck = function handleConnAck(signal) { + var self = this; + var _deferHandler = self._deferHandler, + _transporterEventEmiiter = self._transporterEventEmiiter; + var status = signal.status; + var isConnected = status === SUCCESS_CODE; + var event = isConnected ? _deferHandler.resolve : _deferHandler.reject; + event.call(_deferHandler, TransHandlerID.CONNECT, signal); + + if (isConnected) { + self._connectedTime = utils.getCurrentTimestamp(); + } + + isConnected && _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.CONNECTED); + }; + + _proto2.disconnect = function disconnect() { + this._stopHeartbeat(); + + this._socket && this._socket.close(); + }; + + return SocketTransporter; + }(); + + var logEventEmitter = new utils.EventEmitter(); + var LogEventName = 'log'; + var LocalLogPrefix = '[Rong]'; + var ServerOption = DEFAULT_SERVER_OPTION; + var Option = { + isDebug: false, + isUploadToServer: true, + appkey: '', + userId: '', + isNetworkUnavailable: true + }; + var realTimeUploadHasStarted = false, + RealtimeUploadTimes = 1, + isRealtimeUploading = false, + fullLogId = ''; + + var isFirstDefaultUpload = function isFirstDefaultUpload(interval) { + return interval === 20000; + }; + + var getRealtimeUploadInterval = function getRealtimeUploadInterval(uploadTimes) { + var realtimeInterval = ServerOption.realtimeInterval; + return realtimeInterval * Math.pow(2, uploadTimes - 1); + }; + + var getFullUploadInterval = function getFullUploadInterval(uploadTimes) { + var fullInterval = ServerOption.fullInterval; + return fullInterval * Math.pow(2, uploadTimes - 1); + }; + + var getCSVForLog = function getCSVForLog(log) { + log = log || {}; + var content = log.content || {}; + utils.forEach(content, function (val, key) { + if (utils.isObject(val) || utils.isArray(val)) { + content[key] = utils.toJSON(val); + } + }); + content = utils.toJSON(content) || '""'; + content = common.stringToCsv(content); + return utils.tplEngine(CSV_LOG_TPL, { + sessionId: common.getWebSessionId(), + time: log.time, + type: log.type, + level: log.level, + tag: log.tag, + content: content + }); + }; + + var setServerOption = function setServerOption(serverData) { + var logSwitch = serverData.logSwitch, + logPolicy = serverData.logPolicy; + var isOpen = !!logSwitch; + if (utils.isEmpty(serverData)) return; + ServerOption.isOpen = isOpen; + + if (!isOpen) { + return; + } + + var logConf = utils.parseJSON(logPolicy || '') || {}; + var url = logConf.url, + level = logConf.level, + itv = logConf.itv, + times = logConf.times; + utils.extend(ServerOption, { + url: url, + realtimeLevel: Number(level), + realtimeInterval: Number(itv) * 1000, + realtimeMaxTimes: Number(times) + }); + }; + + var setServerResponseOption = function setServerResponseOption(resText) { + var resConf = utils.parseJSON(resText || ''); + var nextTime = resConf.nextTime, + level = resConf.level, + logSwitch = resConf.logSwitch; + if (utils.isEmpty(resConf)) return; + var isOpen = !!logSwitch; + ServerOption.isOpen = isOpen; + if (!isOpen) return; + utils.extend(ServerOption, { + realtimeLevel: Number(level), + realtimeInterval: Number(nextTime) * 1000 + }); + }; + + var getLogLevel = function getLogLevel(log) { + log = log || {}; + var _Option = Option, + isNetworkUnavailable = _Option.isNetworkUnavailable, + _log = log, + level = _log.level, + isLevelToDegrad = utils.isEqual(level, LEVEL.ERROR) || utils.isEqual(level, LEVEL.WARN); + + if (isNetworkUnavailable && isLevelToDegrad) { + log.level = LEVEL.INFO; + } + + return log; + }; + + var LogStore = { + _list: [], + MaxSize: common.isBelowIE(9) ? STORE_SIZE.LOW : STORE_SIZE.ADVANCED, + add: function add(log) { + log = getLogLevel(log); + + LogStore._list.push(log); + + var currentSize = LogStore._list.length, + maxSize = LogStore.MaxSize; + + if (currentSize > maxSize) { + LogStore._list.splice(0, currentSize - maxSize); + } + }, + get: function get(option) { + var type = option.type, + uploadLevel = option.level; + var _list = LogStore._list; + var uploadList = []; + utils.forEach(_list, function (log, index) { + var logTime = log.time || 0, + logLevel = log.level || LEVEL.DEBUG, + isUploadLevel = logLevel <= uploadLevel, + fullUploadOption = option.fullUploadOption || {}, + startTime = fullUploadOption.startTime || 0, + endTime = fullUploadOption.endTime || common.DelayTimer.getTime(); + var isUpload = isUploadLevel; + + switch (type) { + case REPORT_TYPE.REALTIME: + isUpload = isUpload && !log.isUploaded; + isUpload && (LogStore._list[index].isUploaded = true); + break; + + case REPORT_TYPE.FULL: + isUpload = isUpload && logTime >= startTime && logTime <= endTime; + break; + + default: + } + + if (isUpload) { + uploadList.push(log); + } + }); + return uploadList; + }, + clear: function clear() { + LogStore._list = []; + } + }; + + var upload = function upload(option) { + var url = option.url, + logList = option.logList, + type = option.type; + var requestUrl = common.getReportLogUrl({ + type: type, + appkey: Option.appkey || '', + userId: Option.userId || '', + url: url || ServerOption.url || DEFAULT_SERVER_OPTION.url, + logId: option.logId + }); + var csvLog = ''; + utils.forEach(logList, function (log) { + csvLog += getCSVForLog(log); + }); + + if (utils.isEmpty(csvLog) && type === REPORT_TYPE.REALTIME) { + return utils.Defer.reject(); + } + + if (utils.isEmpty(csvLog) && type === REPORT_TYPE.FULL) { + csvLog = NO_FULL_LOG; + } + + csvLog = common.TextCompressor.compress(csvLog); + return utils.request(requestUrl, { + method: REQUEST_METHOD.POST, + body: csvLog, + timeout: REQUEST_TIMEOUT + }); + }; + + var uploadRealtime = function uploadRealtime() { + if (isRealtimeUploading) { + return; + } + + var interval = getRealtimeUploadInterval(RealtimeUploadTimes); + var realtimeMaxTimes = ServerOption.realtimeMaxTimes, + realtimeLevel = ServerOption.realtimeLevel; + + if (RealtimeUploadTimes < realtimeMaxTimes) { + RealtimeUploadTimes++; + } + + if (isFirstDefaultUpload(interval)) { + RealtimeUploadTimes = 1; + } + + utils.setTimeout(function () { + var logList = LogStore.get({ + type: REPORT_TYPE.REALTIME, + level: realtimeLevel + }); + isRealtimeUploading = true; + upload({ + logList: logList, + type: REPORT_TYPE.REALTIME + }).then(function (response) { + isRealtimeUploading = false; + var responseText = response.responseText || '{}'; + var conf = response.responseText || {}; + setServerResponseOption(responseText); + + if (ServerOption.isOpen) { + RealtimeUploadTimes = utils.isEmpty(conf) ? RealtimeUploadTimes : 1; + uploadRealtime(); + } + })["catch"](function () { + isRealtimeUploading = false; + uploadRealtime(); + }); + }, interval); + }; + + var uploadFull = function uploadFull(uploadTimes, option, connectedTime) { + if (!Option.isUploadToServer || env.isMini) { + return; + } + + uploadTimes = uploadTimes || 0; + option = option || {}; + var _option = option, + uri = _option.uri, + logId = _option.logId; + var isFirst = uploadTimes === 0; + var interval = isFirst ? 0 : getFullUploadInterval(uploadTimes); + var fullMaxTimes = ServerOption.fullMaxTimes, + fullLevel = ServerOption.fullLevel; + if (fullLogId === logId) return; + + if (uploadTimes <= fullMaxTimes) { + uploadTimes++; + } else { + return; + } + + fullLogId = logId; + + (function (option) { + utils.setTimeout(function () { + var logList = LogStore.get({ + type: REPORT_TYPE.FULL, + level: fullLevel, + fullUploadOption: option + }); + if (logList.length === 0 && Number(option.endTime) < connectedTime) return; + upload({ + logId: logId, + url: uri, + logList: logList, + type: REPORT_TYPE.FULL + }).then(function () {})["catch"](function () { + uploadFull(uploadTimes, option, connectedTime); + }); + }, interval); + })(option); + }; + + var writeLocalLog = function writeLocalLog(log) { + var time = log.time; + var formatedTime = utils.formatTime(time); + var localLog = LocalLogPrefix + ":" + formatedTime + ": " + utils.toJSON(log); + logEventEmitter.emit(LogEventName, localLog); + + if (Option.isDebug) { + utils.consoleLog(localLog); + } + }; + + var Logger = { + _events: [], + LogStore: LogStore, + setOption: function setOption(option) { + Option = utils.extend(Option, option); + }, + setServerOption: setServerOption, + watchLog: function watchLog(event) { + logEventEmitter.on(LogEventName, event); + + Logger._events.push(event); + }, + write: function write(log) { + log = log || {}; + log.tag = log.tag || TAG.L_CRASH_F; + log.time = log.time || common.DelayTimer.getTime(); + log.type = log.type || LOG_TYPE.IM; + LogStore.add(log); + writeLocalLog(log); + }, + fatal: function fatal(tag, content) { + Logger.write({ + tag: tag, + content: content, + level: LEVEL.FATAL + }); + }, + error: function error(tag, content) { + Logger.write({ + tag: tag, + content: content, + level: LEVEL.ERROR + }); + }, + warn: function warn(tag, content) { + Logger.write({ + tag: tag, + content: content, + level: LEVEL.WARN + }); + }, + info: function info(tag, content) { + Logger.write({ + tag: tag, + content: content, + level: LEVEL.INFO + }); + }, + debug: function debug(tag, content) { + Logger.write({ + tag: tag, + content: content, + level: LEVEL.DEBUG + }); + }, + startRealtimeUpload: function startRealtimeUpload() { + if (realTimeUploadHasStarted) return; + + if (Option.isUploadToServer && !env.isMini) { + uploadRealtime(); + } + + realTimeUploadHasStarted = true; + }, + resetRealtimeUpload: function resetRealtimeUpload() { + RealtimeUploadTimes = 1; + }, + uploadFull: uploadFull + }; + + var EventEmitter$2 = utils.EventEmitter, + DeferHandler$2 = utils.DeferHandler, + httpRequest = utils.httpRequest, + request$4 = utils.request, + Defer$1 = utils.Defer; + + var CometTransporter = function () { + function CometTransporter(option) { + this._option = void 0; + this._transporterEventEmiiter = new EventEmitter$2(); + this._deferHandler = new DeferHandler$2(); + this._pid = utils.encodeURI(utils.getCurrentTimestamp() + Math.random() + ''); + this._domain = void 0; + this._sessionid = void 0; + this._xhrCache = new utils.Cache(); + this._pullSignalTimer = new utils.Timer({ + timeout: IM_COMET_PULLMSG_TIMEOUT + }); + this._isDisconnected = true; + this._option = option; + } + + var _proto = CometTransporter.prototype; + + _proto._startPullSignal = function _startPullSignal() { + var self = this; + var _domain = self._domain, + _sessionid = self._sessionid, + _pid = self._pid, + _transporterEventEmiiter = self._transporterEventEmiiter, + _pullSignalTimer = self._pullSignalTimer; + var timestamp = utils.getCurrentTimestamp(); + var protocol = env.protocol.http; + var url = utils.tplEngine(COMET_PULL_URL_TPL, { + protocol: protocol, + timestamp: timestamp, + domain: _domain, + sessionId: _sessionid, + pid: _pid + }); + var xhr = httpRequest({ + url: url, + body: { + pid: _pid + }, + timeout: IM_COMET_PULLMSG_TIMEOUT, + success: function success(responseText) { + _pullSignalTimer.stop(); + + var isSuccess = self.handleCometResponse(responseText); + + if (isSuccess) { + !self._isDisconnected && self._startPullSignal(); + } else if (!self._isDisconnected) { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.COMET_REQUEST_ERROR); + } + + self._xhrCache.remove(url); + }, + fail: function fail() { + _pullSignalTimer.stop(); + + if (!self._isDisconnected) { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.COMET_REQUEST_ERROR); + } + + self._xhrCache.remove(url); + } + }); + + _pullSignalTimer.start(function () { + if (!self._isDisconnected) { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, TRANSPORTER_STATUS.PING_TIMEOUT); + + self.disconnect(); + } + }); + + self._xhrCache.set(url, xhr); + }; + + _proto.watchSignal = function watchSignal(event) { + this._transporterEventEmiiter.on(TRANSPORT_EVENT.SIGNAL, event); + }; + + _proto.watchStatus = function watchStatus(event) { + this._transporterEventEmiiter.on(TRANSPORT_EVENT.STATUS, function (status) { + event && event(status); + }); + }; + + _proto.connect = function connect(user, option) { + var self = this; + var _transporterEventEmiiter = self._transporterEventEmiiter, + _pid = self._pid, + _self$_option = self._option, + appkey = _self$_option.appkey, + connectType = _self$_option.connectType; + var token = user.token; + var domain = option.domain; + var url = common.getTransporterUrl({ + domain: domain, + appkey: appkey, + token: token, + connectType: connectType + }); + self._domain = domain; + self._isDisconnected = false; + + var success = function success(_ref) { + var responseText = _ref.responseText; + + if (!utils.isValidJSON(responseText)) { + return Defer$1.reject(); + } + + var response = utils.isObject(responseText) ? responseText : utils.parseJSON(responseText); + var isConnectSuccess = utils.isEqual(response.status, SUCCESS_CODE); + + if (isConnectSuccess && utils.isObject(response) && utils.isValidTimestamp(response.timestamp)) { + common.DelayTimer.setTime(response.timestamp); + } + + return isConnectSuccess ? Defer$1.resolve(response) : Defer$1.reject(response); + }; + + return request$4(url, { + body: { + pid: _pid + } + }).then(success).then(function (response) { + _transporterEventEmiiter.emit(TRANSPORT_EVENT.STATUS, CONNECTION_STATUS.CONNECTED); + + self._sessionid = response.sessionid; + + self._startPullSignal(); + + return response; + }); + }; + + _proto.sendSignal = function sendSignal(writer) { + var self = this; + var _domain = self._domain, + _sessionid = self._sessionid, + _pid = self._pid; + var messageId = writer.messageId, + topic = writer.topic, + targetId = writer.targetId; + var headerCode = writer.getHeaderFlag(); + var protocol = env.protocol.http; + var TPL = topic ? COMET_REQ_HAS_TOPIC_URL_TPL : COMET_REQ_NO_TOPIC_URL_TPL; + var url = utils.tplEngine(TPL, { + protocol: protocol, + messageId: messageId, + headerCode: headerCode, + topic: topic, + targetId: targetId, + pid: _pid, + sessionId: _sessionid, + domain: _domain + }); + var currentTime = utils.getCurrentTimestamp() + ''; + var xhr = httpRequest({ + url: url, + method: REQUEST_METHOD.POST, + body: writer.getCometData(), + success: function success(responseText) { + var isSuccess = self.handleCometResponse(responseText); + + if (!isSuccess) { + self.handleError(messageId); + } + + self._xhrCache.remove(currentTime); + }, + fail: function fail(error) { + self.handleError(messageId); + + self._xhrCache.remove(currentTime); + + Logger.error(TAG.L_CRASH_F, { + content: { + info: 'comet error', + error: error + } + }); + } + }); + + self._xhrCache.set(currentTime, xhr); + }; + + _proto.handleCometResponse = function handleCometResponse(responseText) { + var self = this; + var _transporterEventEmiiter = self._transporterEventEmiiter; + var response = utils.isString(responseText) ? utils.parseJSON(responseText) : responseText; + + if (!response) { + return false; + } + + if (!response || !utils.isArray(response)) { + return true; + } + + utils.forEach(response, function (data) { + var sessionid = data.sessionid; + + if (sessionid) { + self._sessionid = sessionid; + } + + var signal = readCometData(data); + + _transporterEventEmiiter.emit(TRANSPORT_EVENT.SIGNAL, signal); + + if (signal && utils.isValidTimestamp(signal.timestamp)) { + common.DelayTimer.setTime(signal.timestamp); + } + }); + return true; + }; + + _proto.handleError = function handleError(messageId, status) { + var signal = { + messageId: messageId, + status: status || ERROR_CODE.TIMEOUT + }; + + this._transporterEventEmiiter.emit(TRANSPORT_EVENT.SIGNAL, signal); + }; + + _proto.disconnect = function disconnect() { + var self = this; + self._isDisconnected = true; + var _xhrCache = self._xhrCache, + _pullSignalTimer = self._pullSignalTimer; + + var xhrKeys = _xhrCache.getKeys(); + + _pullSignalTimer.stop(); + + utils.forEach(xhrKeys, function (key) { + var xhr = _xhrCache.get(key); + + xhr.abort(); + + _xhrCache.remove(key); + }); + }; + + return CometTransporter; + }(); + + var Transporter = (function (option) { + var connectType = option.connectType; + var isSocket = connectType === CONNECT_TYPE.WEBSOCKET; + var Transporter = isSocket ? SocketTransporter : CometTransporter; + return new Transporter(option); + }); + + var PBName = { + UpStreamMessage: 'UpStreamMessage', + DownStreamMessage: 'DownStreamMessage', + DownStreamMessages: 'DownStreamMessages', + SessionsAttQryInput: 'SessionsAttQryInput', + SessionsAttOutput: 'SessionsAttOutput', + SyncRequestMsg: 'SyncRequestMsg', + ChrmPullMsg: 'ChrmPullMsg', + NotifyMsg: 'NotifyMsg', + HistoryMsgInput: 'HistoryMsgInput', + HistoryMsgOuput: 'HistoryMsgOuput', + RelationQryInput: 'RelationQryInput', + RelationsOutput: 'RelationsOutput', + DeleteSessionsInput: 'DeleteSessionsInput', + SessionInfo: 'SessionInfo', + DeleteSessionsOutput: 'DeleteSessionsOutput', + RelationsInput: 'RelationsInput', + DeleteMsgInput: 'DeleteMsgInput', + CleanHisMsgInput: 'CleanHisMsgInput', + SessionMsgReadInput: 'SessionMsgReadInput', + ChrmInput: 'ChrmInput', + QueryChatRoomInfoInput: 'QueryChatRoomInfoInput', + QueryChatRoomInfoOutput: 'QueryChatRoomInfoOutput', + RtcInput: 'RtcInput', + RtcUserListOutput: 'RtcUserListOutput', + SetUserStatusInput: 'SetUserStatusInput', + RtcSetDataInput: 'RtcSetDataInput', + RtcDataInput: 'RtcDataInput', + RtcSetOutDataInput: 'RtcSetOutDataInput', + MCFollowInput: 'MCFollowInput', + RtcTokenOutput: 'RtcTokenOutput', + RtcQryOutput: 'RtcQryOutput', + RtcQryUserOutDataInput: 'RtcQryUserOutDataInput', + RtcUserOutDataOutput: 'RtcUserOutDataOutput', + RtcQueryListInput: 'RtcQueryListInput', + RtcRoomInfoOutput: 'RtcRoomInfoOutput', + RtcValueInfo: 'RtcValueInfo', + RtcKeyDeleteInput: 'RtcKeyDeleteInput', + GetQNupTokenInput: 'GetQNupTokenInput', + GetQNupTokenOutput: 'GetQNupTokenOutput', + GetQNdownloadUrlInput: 'GetQNdownloadUrlInput', + GetQNdownloadUrlOutput: 'GetQNdownloadUrlOutput', + SetChrmKV: 'SetChrmKV', + ChrmKVOutput: 'ChrmKVOutput', + QueryChrmKV: 'QueryChrmKV', + ChrmNotifyMsg: 'ChrmNotifyMsg', + SetUserSettingInput: 'SetUserSettingInput', + SetUserSettingOutput: 'SetUserSettingOutput', + PullUserSettingInput: 'PullUserSettingInput', + PullUserSettingOutput: 'PullUserSettingOutput', + UserSettingNotification: 'UserSettingNotification', + SessionReq: 'SessionReq', + SessionStates: 'SessionStates', + SessionState: 'SessionState', + SessionStateItem: 'SessionStateItem', + SessionStateModifyReq: 'SessionStateModifyReq', + SessionStateModifyResp: 'SessionStateModifyResp' + }; + + var _SSMsg; + var SSMsg = (_SSMsg = {}, _SSMsg[PBName.UpStreamMessage] = ['sessionId', 'classname', 'content', 'pushText', 'userId', 'configFlag', 'appData'], _SSMsg[PBName.DownStreamMessages] = ['list', 'syncTime', 'finished'], _SSMsg[PBName.DownStreamMessage] = ['fromUserId', 'type', 'groupId', 'classname', 'content', 'dataTime', 'status', 'msgId'], _SSMsg[PBName.SessionsAttQryInput] = ['nothing'], _SSMsg[PBName.SessionsAttOutput] = ['inboxTime', 'sendboxTime', 'totalUnreadCount'], _SSMsg[PBName.SyncRequestMsg] = ['syncTime', 'ispolling', 'isweb', 'isPullSend', 'isKeeping', 'sendBoxSyncTime'], _SSMsg[PBName.ChrmPullMsg] = ['syncTime', 'count'], _SSMsg[PBName.NotifyMsg] = ['type', 'time', 'chrmId'], _SSMsg[PBName.HistoryMsgInput] = ['targetId', 'time', 'count', 'order'], _SSMsg[PBName.HistoryMsgOuput] = ['list', 'syncTime', 'hasMsg'], _SSMsg[PBName.RelationQryInput] = ['type', 'count', 'startTime', 'order'], _SSMsg[PBName.RelationsOutput] = ['info'], _SSMsg[PBName.DeleteSessionsInput] = ['sessions'], _SSMsg[PBName.SessionInfo] = ['type', 'channelId'], _SSMsg[PBName.DeleteSessionsOutput] = ['nothing'], _SSMsg[PBName.RelationsInput] = ['type', 'msg', 'count', 'offset', 'startTime', 'endTime'], _SSMsg[PBName.DeleteMsgInput] = ['type', 'conversationId', 'msgs'], _SSMsg[PBName.CleanHisMsgInput] = ['targetId', 'dataTime', 'conversationType'], _SSMsg[PBName.SessionMsgReadInput] = ['type', 'msgTime', 'channelId'], _SSMsg[PBName.ChrmInput] = ['nothing'], _SSMsg[PBName.QueryChatRoomInfoInput] = ['count', 'order'], _SSMsg[PBName.QueryChatRoomInfoOutput] = ['userTotalNums', 'userInfos'], _SSMsg[PBName.GetQNupTokenInput] = ['type'], _SSMsg[PBName.GetQNdownloadUrlInput] = ['type', 'key', 'fileName'], _SSMsg[PBName.GetQNupTokenOutput] = ['deadline', 'token'], _SSMsg[PBName.GetQNdownloadUrlOutput] = ['downloadUrl'], _SSMsg[PBName.SetChrmKV] = ['entry', 'bNotify', 'notification', 'type'], _SSMsg[PBName.ChrmKVOutput] = ['entries', 'bFullUpdate', 'syncTime'], _SSMsg[PBName.QueryChrmKV] = ['timestamp'], _SSMsg[PBName.ChrmNotifyMsg] = ['type', 'time', 'chrmId'], _SSMsg[PBName.SetUserSettingInput] = ['version', 'value'], _SSMsg[PBName.SetUserSettingOutput] = ['version', 'reserve'], _SSMsg[PBName.PullUserSettingInput] = ['version', 'reserve'], _SSMsg[PBName.PullUserSettingOutput] = ['items', 'version'], _SSMsg); + + var Codec = {}; + utils.forEach(SSMsg, function (paramList, name) { + Codec[name] = function () {}; + + Codec[name].prototype.data = {}; + + Codec[name].prototype.getData = function () { + return this.data; + }; + + utils.forEach(paramList, function (param) { + var setEventName = 'set' + utils.toUpperCase(param, 0, 1); + + Codec[name].prototype[setEventName] = function (item) { + this.data[param] = item; + }; + }); + + Codec[name].decode = function (data) { + var decodeResult = {}; + + if (utils.isString(data)) { + data = utils.parseJSON(data); + } + + var _loop = function _loop(key) { + var getEventName = 'get' + utils.toUpperCase(key, 0, 1); + decodeResult[key] = data[key]; + + decodeResult[getEventName] = function () { + return data[key]; + }; + }; + + for (var key in data) { + _loop(key); + } + + return decodeResult; + }; + }); + + Codec.getModule = function (pbName) { + var modules = new Codec[pbName](); + + modules.getArrayData = function () { + return modules.getData(); + }; + + return modules; + }; + + function protobuf(a){var b=void 0,c=function(){function a(a,b,c){this.low=0|a,this.high=0|b,this.unsigned=!!c;}function b(a){return (a&&a.__isLong__)===!0}function e(a,b){var e,f,h;return b?(a>>>=0,(h=a>=0&&256>a)&&(f=d[a])?f:(e=g(a,0>(0|a)?-1:0,!0),h&&(d[a]=e),e)):(a|=0,(h=a>=-128&&128>a)&&(f=c[a])?f:(e=g(a,0>a?-1:0,!1),h&&(c[a]=e),e))}function f(a,b){if(isNaN(a)||!isFinite(a))return b?r:q;if(b){if(0>a)return r;if(a>=n)return w}else{if(-o>=a)return x;if(a+1>=o)return v}return 0>a?f(-a,b).neg():g(0|a%m,0|a/m,b)}function g(b,c,d){return new a(b,c,d)}function i(a,b,c){var d,e,g,j,k,l,m;if(0===a.length)throw Error("empty string");if("NaN"===a||"Infinity"===a||"+Infinity"===a||"-Infinity"===a)return q;if("number"==typeof b?(c=b,b=!1):b=!!b,c=c||10,2>c||c>36)throw RangeError("radix");if((d=a.indexOf("-"))>0)throw Error("interior hyphen");if(0===d)return i(a.substring(1),b,c).neg();for(e=f(h(c,8)),g=q,j=0;jk?(m=f(h(c,k)),g=g.mul(m).add(f(l))):(g=g.mul(e),g=g.add(f(l)));return g.unsigned=b,g}function j(b){return b instanceof a?b:"number"==typeof b?f(b):"string"==typeof b?i(b):g(b.low,b.high,b.unsigned)}var c,d,h,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y;return Object.defineProperty(a.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1}),a.isLong=b,c={},d={},a.fromInt=e,a.fromNumber=f,a.fromBits=g,h=Math.pow,a.fromString=i,a.fromValue=j,k=65536,l=1<<24,m=k*k,n=m*m,o=n/2,p=e(l),q=e(0),a.ZERO=q,r=e(0,!0),a.UZERO=r,s=e(1),a.ONE=s,t=e(1,!0),a.UONE=t,u=e(-1),a.NEG_ONE=u,v=g(-1,2147483647,!1),a.MAX_VALUE=v,w=g(-1,-1,!0),a.MAX_UNSIGNED_VALUE=w,x=g(0,-2147483648,!1),a.MIN_VALUE=x,y=a.prototype,y.toInt=function(){return this.unsigned?this.low>>>0:this.low},y.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},y.toString=function(a){var b,c,d,e,g,i,j,k,l;if(a=a||10,2>a||a>36)throw RangeError("radix");if(this.isZero())return "0";if(this.isNegative())return this.eq(x)?(b=f(a),c=this.div(b),d=c.mul(b).sub(this),c.toString(a)+d.toInt().toString(a)):"-"+this.neg().toString(a);for(e=f(h(a,6),this.unsigned),g=this,i="";;){if(j=g.div(e),k=g.sub(j.mul(e)).toInt()>>>0,l=k.toString(a),g=j,g.isZero())return l+i;for(;l.length<6;)l="0"+l;i=""+l+i;}},y.getHighBits=function(){return this.high},y.getHighBitsUnsigned=function(){return this.high>>>0},y.getLowBits=function(){return this.low},y.getLowBitsUnsigned=function(){return this.low>>>0},y.getNumBitsAbs=function(){var a,b;if(this.isNegative())return this.eq(x)?64:this.neg().getNumBitsAbs();for(a=0!=this.high?this.high:this.low,b=31;b>0&&0==(a&1<=0},y.isOdd=function(){return 1===(1&this.low)},y.isEven=function(){return 0===(1&this.low)},y.equals=function(a){return b(a)||(a=j(a)),this.unsigned!==a.unsigned&&1===this.high>>>31&&1===a.high>>>31?!1:this.high===a.high&&this.low===a.low},y.eq=y.equals,y.notEquals=function(a){return !this.eq(a)},y.neq=y.notEquals,y.lessThan=function(a){return this.comp(a)<0},y.lt=y.lessThan,y.lessThanOrEqual=function(a){return this.comp(a)<=0},y.lte=y.lessThanOrEqual,y.greaterThan=function(a){return this.comp(a)>0},y.gt=y.greaterThan,y.greaterThanOrEqual=function(a){return this.comp(a)>=0},y.gte=y.greaterThanOrEqual,y.compare=function(a){if(b(a)||(a=j(a)),this.eq(a))return 0;var c=this.isNegative(),d=a.isNegative();return c&&!d?-1:!c&&d?1:this.unsigned?a.high>>>0>this.high>>>0||a.high===this.high&&a.low>>>0>this.low>>>0?-1:1:this.sub(a).isNegative()?-1:1},y.comp=y.compare,y.negate=function(){return !this.unsigned&&this.eq(x)?x:this.not().add(s)},y.neg=y.negate,y.add=function(a){var c,d,e,f,h,i,k,l,m,n,o,p;return b(a)||(a=j(a)),c=this.high>>>16,d=65535&this.high,e=this.low>>>16,f=65535&this.low,h=a.high>>>16,i=65535&a.high,k=a.low>>>16,l=65535&a.low,m=0,n=0,o=0,p=0,p+=f+l,o+=p>>>16,p&=65535,o+=e+k,n+=o>>>16,o&=65535,n+=d+i,m+=n>>>16,n&=65535,m+=c+h,m&=65535,g(o<<16|p,m<<16|n,this.unsigned)},y.subtract=function(a){return b(a)||(a=j(a)),this.add(a.neg())},y.sub=y.subtract,y.multiply=function(a){var c,d,e,h,i,k,l,m,n,o,r,s;return this.isZero()?q:(b(a)||(a=j(a)),a.isZero()?q:this.eq(x)?a.isOdd()?x:q:a.eq(x)?this.isOdd()?x:q:this.isNegative()?a.isNegative()?this.neg().mul(a.neg()):this.neg().mul(a).neg():a.isNegative()?this.mul(a.neg()).neg():this.lt(p)&&a.lt(p)?f(this.toNumber()*a.toNumber(),this.unsigned):(c=this.high>>>16,d=65535&this.high,e=this.low>>>16,h=65535&this.low,i=a.high>>>16,k=65535&a.high,l=a.low>>>16,m=65535&a.low,n=0,o=0,r=0,s=0,s+=h*m,r+=s>>>16,s&=65535,r+=e*m,o+=r>>>16,r&=65535,r+=h*l,o+=r>>>16,r&=65535,o+=d*m,n+=o>>>16,o&=65535,o+=e*l,n+=o>>>16,o&=65535,o+=h*k,n+=o>>>16,o&=65535,n+=c*m+d*l+e*k+h*i,n&=65535,g(r<<16|s,n<<16|o,this.unsigned)))},y.mul=y.multiply,y.divide=function(a){var c,d,e,g,i,k,l,m;if(b(a)||(a=j(a)),a.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?r:q;if(this.unsigned){if(a.unsigned||(a=a.toUnsigned()),a.gt(this))return r;if(a.gt(this.shru(1)))return t;e=r;}else{if(this.eq(x))return a.eq(s)||a.eq(u)?x:a.eq(x)?s:(g=this.shr(1),c=g.div(a).shl(1),c.eq(q)?a.isNegative()?s:u:(d=this.sub(a.mul(c)),e=c.add(d.div(a))));if(a.eq(x))return this.unsigned?r:q;if(this.isNegative())return a.isNegative()?this.neg().div(a.neg()):this.neg().div(a).neg();if(a.isNegative())return this.div(a.neg()).neg();e=q;}for(d=this;d.gte(a);){for(c=Math.max(1,Math.floor(d.toNumber()/a.toNumber())),i=Math.ceil(Math.log(c)/Math.LN2),k=48>=i?1:h(2,i-48),l=f(c),m=l.mul(a);m.isNegative()||m.gt(d);)c-=k,l=f(c,this.unsigned),m=l.mul(a);l.isZero()&&(l=s),e=e.add(l),d=d.sub(m);}return e},y.div=y.divide,y.modulo=function(a){return b(a)||(a=j(a)),this.sub(this.div(a).mul(a))},y.mod=y.modulo,y.not=function(){return g(~this.low,~this.high,this.unsigned)},y.and=function(a){return b(a)||(a=j(a)),g(this.low&a.low,this.high&a.high,this.unsigned)},y.or=function(a){return b(a)||(a=j(a)),g(this.low|a.low,this.high|a.high,this.unsigned)},y.xor=function(a){return b(a)||(a=j(a)),g(this.low^a.low,this.high^a.high,this.unsigned)},y.shiftLeft=function(a){return b(a)&&(a=a.toInt()),0===(a&=63)?this:32>a?g(this.low<>>32-a,this.unsigned):g(0,this.low<a?g(this.low>>>a|this.high<<32-a,this.high>>a,this.unsigned):g(this.high>>a-32,this.high>=0?0:-1,this.unsigned)},y.shr=y.shiftRight,y.shiftRightUnsigned=function(a){var c,d;return b(a)&&(a=a.toInt()),a&=63,0===a?this:(c=this.high,32>a?(d=this.low,g(d>>>a|c<<32-a,c>>>a,this.unsigned)):32===a?g(c,0,this.unsigned):g(c>>>a-32,0,this.unsigned))},y.shru=y.shiftRightUnsigned,y.toSigned=function(){return this.unsigned?g(this.low,this.high,!1):this},y.toUnsigned=function(){return this.unsigned?this:g(this.low,this.high,!0)},y.toBytes=function(a){return a?this.toBytesLE():this.toBytesBE()},y.toBytesLE=function(){var a=this.high,b=this.low;return [255&b,255&b>>>8,255&b>>>16,255&b>>>24,255&a,255&a>>>8,255&a>>>16,255&a>>>24]},y.toBytesBE=function(){var a=this.high,b=this.low;return [255&a>>>24,255&a>>>16,255&a>>>8,255&a,255&b>>>24,255&b>>>16,255&b>>>8,255&b]},a}(),d=function(a){function f(a){var b=0;return function(){return b1024&&(b.push(e.apply(String,a)),a.length=0),Array.prototype.push.apply(a,arguments),void 0)}}function h(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?0/0:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j;}return (n?-1:1)*g*Math.pow(2,f-d)}function i(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=0>b||0===b&&0>1/b?1:0;for(b=Math.abs(b),isNaN(b)||1/0===b?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p;}var c,d,e,j,k,b=function(a,c,e){if("undefined"==typeof a&&(a=b.DEFAULT_CAPACITY),"undefined"==typeof c&&(c=b.DEFAULT_ENDIAN),"undefined"==typeof e&&(e=b.DEFAULT_NOASSERT),!e){if(a=0|a,0>a)throw RangeError("Illegal capacity");c=!!c,e=!!e;}this.buffer=0===a?d:new ArrayBuffer(a),this.view=0===a?null:new Uint8Array(this.buffer),this.offset=0,this.markedOffset=-1,this.limit=a,this.littleEndian=c,this.noAssert=e;};return b.VERSION="5.0.1",b.LITTLE_ENDIAN=!0,b.BIG_ENDIAN=!1,b.DEFAULT_CAPACITY=16,b.DEFAULT_ENDIAN=b.BIG_ENDIAN,b.DEFAULT_NOASSERT=!1,b.Long=a||null,c=b.prototype,c.__isByteBuffer__,Object.defineProperty(c,"__isByteBuffer__",{value:!0,enumerable:!1,configurable:!1}),d=new ArrayBuffer(0),e=String.fromCharCode,b.accessor=function(){return Uint8Array},b.allocate=function(a,c,d){return new b(a,c,d)},b.concat=function(a,c,d,e){var f,i,g,h,k,j;for(("boolean"==typeof c||"string"!=typeof c)&&(e=d,d=c,c=void 0),f=0,g=0,h=a.length;h>g;++g)b.isByteBuffer(a[g])||(a[g]=b.wrap(a[g],c)),i=a[g].limit-a[g].offset,i>0&&(f+=i);if(0===f)return new b(0,d,e);for(j=new b(f,d,e),g=0;h>g;)k=a[g++],i=k.limit-k.offset,0>=i||(j.view.set(k.view.subarray(k.offset,k.limit),j.offset),j.offset+=i);return j.limit=j.offset,j.offset=0,j},b.isByteBuffer=function(a){return (a&&a.__isByteBuffer__)===!0},b.type=function(){return ArrayBuffer},b.wrap=function(a,d,e,f){var g,h;if("string"!=typeof d&&(f=e,e=d,d=void 0),"string"==typeof a)switch("undefined"==typeof d&&(d="utf8"),d){case"base64":return b.fromBase64(a,e);case"hex":return b.fromHex(a,e);case"binary":return b.fromBinary(a,e);case"utf8":return b.fromUTF8(a,e);case"debug":return b.fromDebug(a,e);default:throw Error("Unsupported encoding: "+d)}if(null===a||"object"!=typeof a)throw TypeError("Illegal buffer");if(b.isByteBuffer(a))return g=c.clone.call(a),g.markedOffset=-1,g;if(a instanceof Uint8Array)g=new b(0,e,f),a.length>0&&(g.buffer=a.buffer,g.offset=a.byteOffset,g.limit=a.byteOffset+a.byteLength,g.view=new Uint8Array(a.buffer));else if(a instanceof ArrayBuffer)g=new b(0,e,f),a.byteLength>0&&(g.buffer=a,g.offset=0,g.limit=a.byteLength,g.view=a.byteLength>0?new Uint8Array(a):null);else{if("[object Array]"!==Object.prototype.toString.call(a))throw TypeError("Illegal buffer");for(g=new b(a.length,e,f),g.limit=a.length,h=0;h>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}for(d=b,e=a.length,f=e>>3,g=0,b+=this.writeVarint32(e,b);f--;)h=1&!!a[g++]|(1&!!a[g++])<<1|(1&!!a[g++])<<2|(1&!!a[g++])<<3|(1&!!a[g++])<<4|(1&!!a[g++])<<5|(1&!!a[g++])<<6|(1&!!a[g++])<<7,this.writeByte(h,b++);if(e>g){for(i=0,h=0;e>g;)h|=(1&!!a[g++])<>3,f=0,g=[],a+=c.length;e--;)h=this.readByte(a++),g[f++]=!!(1&h),g[f++]=!!(2&h),g[f++]=!!(4&h),g[f++]=!!(8&h),g[f++]=!!(16&h),g[f++]=!!(32&h),g[f++]=!!(64&h),g[f++]=!!(128&h);if(d>f)for(i=0,h=this.readByte(a++);d>f;)g[f++]=!!(1&h>>i++);return b&&(this.offset=a),g},c.readBytes=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+a>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+a+") <= "+this.buffer.byteLength)}return d=this.slice(b,b+a),c&&(this.offset+=a),d},c.writeBytes=c.append,c.writeInt8=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a|=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=1,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=1,this.view[b]=a,c&&(this.offset+=1),this},c.writeByte=c.writeInt8,c.readInt8=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+1+") <= "+this.buffer.byteLength)}return c=this.view[a],128===(128&c)&&(c=-(255-c+1)),b&&(this.offset+=1),c},c.readByte=c.readInt8,c.writeUint8=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=1,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=1,this.view[b]=a,c&&(this.offset+=1),this},c.writeUInt8=c.writeUint8,c.readUint8=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+1+") <= "+this.buffer.byteLength)}return c=this.view[a],b&&(this.offset+=1),c},c.readUInt8=c.readUint8,c.writeInt16=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a|=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=2,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=2,this.littleEndian?(this.view[b+1]=(65280&a)>>>8,this.view[b]=255&a):(this.view[b]=(65280&a)>>>8,this.view[b+1]=255&a),c&&(this.offset+=2),this},c.writeShort=c.writeInt16,c.readInt16=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+2+") <= "+this.buffer.byteLength)}return c=0,this.littleEndian?(c=this.view[a],c|=this.view[a+1]<<8):(c=this.view[a]<<8,c|=this.view[a+1]),32768===(32768&c)&&(c=-(65535-c+1)),b&&(this.offset+=2),c},c.readShort=c.readInt16,c.writeUint16=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=2,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=2,this.littleEndian?(this.view[b+1]=(65280&a)>>>8,this.view[b]=255&a):(this.view[b]=(65280&a)>>>8,this.view[b+1]=255&a),c&&(this.offset+=2),this},c.writeUInt16=c.writeUint16,c.readUint16=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+2>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+2+") <= "+this.buffer.byteLength)}return c=0,this.littleEndian?(c=this.view[a],c|=this.view[a+1]<<8):(c=this.view[a]<<8,c|=this.view[a+1]),b&&(this.offset+=2),c},c.readUInt16=c.readUint16,c.writeInt32=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a|=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=4,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=4,this.littleEndian?(this.view[b+3]=255&a>>>24,this.view[b+2]=255&a>>>16,this.view[b+1]=255&a>>>8,this.view[b]=255&a):(this.view[b]=255&a>>>24,this.view[b+1]=255&a>>>16,this.view[b+2]=255&a>>>8,this.view[b+3]=255&a),c&&(this.offset+=4),this},c.writeInt=c.writeInt32,c.readInt32=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+4+") <= "+this.buffer.byteLength)}return c=0,this.littleEndian?(c=this.view[a+2]<<16,c|=this.view[a+1]<<8,c|=this.view[a],c+=this.view[a+3]<<24>>>0):(c=this.view[a+1]<<16,c|=this.view[a+2]<<8,c|=this.view[a+3],c+=this.view[a]<<24>>>0),c|=0,b&&(this.offset+=4),c},c.readInt=c.readInt32,c.writeUint32=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=4,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=4,this.littleEndian?(this.view[b+3]=255&a>>>24,this.view[b+2]=255&a>>>16,this.view[b+1]=255&a>>>8,this.view[b]=255&a):(this.view[b]=255&a>>>24,this.view[b+1]=255&a>>>16,this.view[b+2]=255&a>>>8,this.view[b+3]=255&a),c&&(this.offset+=4),this},c.writeUInt32=c.writeUint32,c.readUint32=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+4+") <= "+this.buffer.byteLength)}return c=0,this.littleEndian?(c=this.view[a+2]<<16,c|=this.view[a+1]<<8,c|=this.view[a],c+=this.view[a+3]<<24>>>0):(c=this.view[a+1]<<16,c|=this.view[a+2]<<8,c|=this.view[a+3],c+=this.view[a]<<24>>>0),b&&(this.offset+=4),c},c.readUInt32=c.readUint32,a&&(c.writeInt64=function(b,c){var e,f,g,d="undefined"==typeof c;if(d&&(c=this.offset),!this.noAssert){if("number"==typeof b)b=a.fromNumber(b);else if("string"==typeof b)b=a.fromString(b);else if(!(b&&b instanceof a))throw TypeError("Illegal value: "+b+" (not an integer or Long)");if("number"!=typeof c||0!==c%1)throw TypeError("Illegal offset: "+c+" (not an integer)");if(c>>>=0,0>c||c+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+c+" (+"+0+") <= "+this.buffer.byteLength)}return "number"==typeof b?b=a.fromNumber(b):"string"==typeof b&&(b=a.fromString(b)),c+=8,e=this.buffer.byteLength,c>e&&this.resize((e*=2)>c?e:c),c-=8,f=b.low,g=b.high,this.littleEndian?(this.view[c+3]=255&f>>>24,this.view[c+2]=255&f>>>16,this.view[c+1]=255&f>>>8,this.view[c]=255&f,c+=4,this.view[c+3]=255&g>>>24,this.view[c+2]=255&g>>>16,this.view[c+1]=255&g>>>8,this.view[c]=255&g):(this.view[c]=255&g>>>24,this.view[c+1]=255&g>>>16,this.view[c+2]=255&g>>>8,this.view[c+3]=255&g,c+=4,this.view[c]=255&f>>>24,this.view[c+1]=255&f>>>16,this.view[c+2]=255&f>>>8,this.view[c+3]=255&f),d&&(this.offset+=8),this},c.writeLong=c.writeInt64,c.readInt64=function(b){var d,e,f,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+8+") <= "+this.buffer.byteLength)}return d=0,e=0,this.littleEndian?(d=this.view[b+2]<<16,d|=this.view[b+1]<<8,d|=this.view[b],d+=this.view[b+3]<<24>>>0,b+=4,e=this.view[b+2]<<16,e|=this.view[b+1]<<8,e|=this.view[b],e+=this.view[b+3]<<24>>>0):(e=this.view[b+1]<<16,e|=this.view[b+2]<<8,e|=this.view[b+3],e+=this.view[b]<<24>>>0,b+=4,d=this.view[b+1]<<16,d|=this.view[b+2]<<8,d|=this.view[b+3],d+=this.view[b]<<24>>>0),f=new a(d,e,!1),c&&(this.offset+=8),f},c.readLong=c.readInt64,c.writeUint64=function(b,c){var e,f,g,d="undefined"==typeof c;if(d&&(c=this.offset),!this.noAssert){if("number"==typeof b)b=a.fromNumber(b);else if("string"==typeof b)b=a.fromString(b);else if(!(b&&b instanceof a))throw TypeError("Illegal value: "+b+" (not an integer or Long)");if("number"!=typeof c||0!==c%1)throw TypeError("Illegal offset: "+c+" (not an integer)");if(c>>>=0,0>c||c+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+c+" (+"+0+") <= "+this.buffer.byteLength)}return "number"==typeof b?b=a.fromNumber(b):"string"==typeof b&&(b=a.fromString(b)),c+=8,e=this.buffer.byteLength,c>e&&this.resize((e*=2)>c?e:c),c-=8,f=b.low,g=b.high,this.littleEndian?(this.view[c+3]=255&f>>>24,this.view[c+2]=255&f>>>16,this.view[c+1]=255&f>>>8,this.view[c]=255&f,c+=4,this.view[c+3]=255&g>>>24,this.view[c+2]=255&g>>>16,this.view[c+1]=255&g>>>8,this.view[c]=255&g):(this.view[c]=255&g>>>24,this.view[c+1]=255&g>>>16,this.view[c+2]=255&g>>>8,this.view[c+3]=255&g,c+=4,this.view[c]=255&f>>>24,this.view[c+1]=255&f>>>16,this.view[c+2]=255&f>>>8,this.view[c+3]=255&f),d&&(this.offset+=8),this},c.writeUInt64=c.writeUint64,c.readUint64=function(b){var d,e,f,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+8+") <= "+this.buffer.byteLength)}return d=0,e=0,this.littleEndian?(d=this.view[b+2]<<16,d|=this.view[b+1]<<8,d|=this.view[b],d+=this.view[b+3]<<24>>>0,b+=4,e=this.view[b+2]<<16,e|=this.view[b+1]<<8,e|=this.view[b],e+=this.view[b+3]<<24>>>0):(e=this.view[b+1]<<16,e|=this.view[b+2]<<8,e|=this.view[b+3],e+=this.view[b]<<24>>>0,b+=4,d=this.view[b+1]<<16,d|=this.view[b+2]<<8,d|=this.view[b+3],d+=this.view[b]<<24>>>0),f=new a(d,e,!0),c&&(this.offset+=8),f},c.readUInt64=c.readUint64),c.writeFloat32=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a)throw TypeError("Illegal value: "+a+" (not a number)");if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=4,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=4,i(this.view,a,b,this.littleEndian,23,4),c&&(this.offset+=4),this},c.writeFloat=c.writeFloat32,c.readFloat32=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+4+") <= "+this.buffer.byteLength)}return c=h(this.view,a,this.littleEndian,23,4),b&&(this.offset+=4),c},c.readFloat=c.readFloat32,c.writeFloat64=function(a,b){var d,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof a)throw TypeError("Illegal value: "+a+" (not a number)");if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return b+=8,d=this.buffer.byteLength,b>d&&this.resize((d*=2)>b?d:b),b-=8,i(this.view,a,b,this.littleEndian,52,8),c&&(this.offset+=8),this},c.writeDouble=c.writeFloat64,c.readFloat64=function(a){var c,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+8>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+8+") <= "+this.buffer.byteLength)}return c=h(this.view,a,this.littleEndian,52,8),b&&(this.offset+=8),c},c.readDouble=c.readFloat64,b.MAX_VARINT32_BYTES=5,b.calculateVarint32=function(a){return a>>>=0,128>a?1:16384>a?2:1<<21>a?3:1<<28>a?4:5},b.zigZagEncode32=function(a){return ((a|=0)<<1^a>>31)>>>0},b.zigZagDecode32=function(a){return 0|a>>>1^-(1&a)},c.writeVarint32=function(a,c){var f,e,g,d="undefined"==typeof c;if(d&&(c=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a|=0,"number"!=typeof c||0!==c%1)throw TypeError("Illegal offset: "+c+" (not an integer)");if(c>>>=0,0>c||c+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+c+" (+"+0+") <= "+this.buffer.byteLength)}for(e=b.calculateVarint32(a),c+=e,g=this.buffer.byteLength,c>g&&this.resize((g*=2)>c?g:c),c-=e,a>>>=0;a>=128;)f=128|127&a,this.view[c++]=f,a>>>=7;return this.view[c++]=a,d?(this.offset=c,this):e},c.writeVarint32ZigZag=function(a,c){return this.writeVarint32(b.zigZagEncode32(a),c)},c.readVarint32=function(a){var e,c,d,f,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+1+") <= "+this.buffer.byteLength)}c=0,d=0;do{if(!this.noAssert&&a>this.limit)throw f=Error("Truncated"),f.truncated=!0,f;e=this.view[a++],5>c&&(d|=(127&e)<<7*c),++c;}while(0!==(128&e));return d|=0,b?(this.offset=a,d):{value:d,length:c}},c.readVarint32ZigZag=function(a){var c=this.readVarint32(a);return "object"==typeof c?c.value=b.zigZagDecode32(c.value):c=b.zigZagDecode32(c),c},a&&(b.MAX_VARINT64_BYTES=10,b.calculateVarint64=function(b){"number"==typeof b?b=a.fromNumber(b):"string"==typeof b&&(b=a.fromString(b));var c=b.toInt()>>>0,d=b.shiftRightUnsigned(28).toInt()>>>0,e=b.shiftRightUnsigned(56).toInt()>>>0;return 0==e?0==d?16384>c?128>c?1:2:1<<21>c?3:4:16384>d?128>d?5:6:1<<21>d?7:8:128>e?9:10},b.zigZagEncode64=function(b){return "number"==typeof b?b=a.fromNumber(b,!1):"string"==typeof b?b=a.fromString(b,!1):b.unsigned!==!1&&(b=b.toSigned()),b.shiftLeft(1).xor(b.shiftRight(63)).toUnsigned()},b.zigZagDecode64=function(b){return "number"==typeof b?b=a.fromNumber(b,!1):"string"==typeof b?b=a.fromString(b,!1):b.unsigned!==!1&&(b=b.toSigned()),b.shiftRightUnsigned(1).xor(b.and(a.ONE).toSigned().negate()).toSigned()},c.writeVarint64=function(c,d){var f,g,h,i,j,e="undefined"==typeof d;if(e&&(d=this.offset),!this.noAssert){if("number"==typeof c)c=a.fromNumber(c);else if("string"==typeof c)c=a.fromString(c);else if(!(c&&c instanceof a))throw TypeError("Illegal value: "+c+" (not an integer or Long)");if("number"!=typeof d||0!==d%1)throw TypeError("Illegal offset: "+d+" (not an integer)");if(d>>>=0,0>d||d+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+d+" (+"+0+") <= "+this.buffer.byteLength)}switch("number"==typeof c?c=a.fromNumber(c,!1):"string"==typeof c?c=a.fromString(c,!1):c.unsigned!==!1&&(c=c.toSigned()),f=b.calculateVarint64(c),g=c.toInt()>>>0,h=c.shiftRightUnsigned(28).toInt()>>>0,i=c.shiftRightUnsigned(56).toInt()>>>0,d+=f,j=this.buffer.byteLength,d>j&&this.resize((j*=2)>d?j:d),d-=f,f){case 10:this.view[d+9]=1&i>>>7;case 9:this.view[d+8]=9!==f?128|i:127&i;case 8:this.view[d+7]=8!==f?128|h>>>21:127&h>>>21;case 7:this.view[d+6]=7!==f?128|h>>>14:127&h>>>14;case 6:this.view[d+5]=6!==f?128|h>>>7:127&h>>>7;case 5:this.view[d+4]=5!==f?128|h:127&h;case 4:this.view[d+3]=4!==f?128|g>>>21:127&g>>>21;case 3:this.view[d+2]=3!==f?128|g>>>14:127&g>>>14;case 2:this.view[d+1]=2!==f?128|g>>>7:127&g>>>7;case 1:this.view[d]=1!==f?128|g:127&g;}return e?(this.offset+=f,this):f},c.writeVarint64ZigZag=function(a,c){return this.writeVarint64(b.zigZagEncode64(a),c)},c.readVarint64=function(b){var d,e,f,g,h,i,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+1+") <= "+this.buffer.byteLength)}if(d=b,e=0,f=0,g=0,h=0,h=this.view[b++],e=127&h,128&h&&(h=this.view[b++],e|=(127&h)<<7,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],e|=(127&h)<<14,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],e|=(127&h)<<21,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],f=127&h,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],f|=(127&h)<<7,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],f|=(127&h)<<14,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],f|=(127&h)<<21,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],g=127&h,(128&h||this.noAssert&&"undefined"==typeof h)&&(h=this.view[b++],g|=(127&h)<<7,128&h||this.noAssert&&"undefined"==typeof h))))))))))throw Error("Buffer overrun");return i=a.fromBits(e|f<<28,f>>>4|g<<24,!1),c?(this.offset=b,i):{value:i,length:b-d}},c.readVarint64ZigZag=function(c){var d=this.readVarint64(c);return d&&d.value instanceof a?d.value=b.zigZagDecode64(d.value):d=b.zigZagDecode64(d),d}),c.writeCString=function(a,b){var d,e,g,c="undefined"==typeof b;if(c&&(b=this.offset),e=a.length,!this.noAssert){if("string"!=typeof a)throw TypeError("Illegal str: Not a string");for(d=0;e>d;++d)if(0===a.charCodeAt(d))throw RangeError("Illegal str: Contains NULL-characters");if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return e=k.calculateUTF16asUTF8(f(a))[1],b+=e+1,g=this.buffer.byteLength,b>g&&this.resize((g*=2)>b?g:b),b-=e+1,k.encodeUTF16toUTF8(f(a),function(a){this.view[b++]=a;}.bind(this)),this.view[b++]=0,c?(this.offset=b,this):e},c.readCString=function(a){var c,e,f,b="undefined"==typeof a;if(b&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+1+") <= "+this.buffer.byteLength)}return c=a,f=-1,k.decodeUTF8toUTF16(function(){if(0===f)return null;if(a>=this.limit)throw RangeError("Illegal range: Truncated data, "+a+" < "+this.limit);return f=this.view[a++],0===f?null:f}.bind(this),e=g(),!0),b?(this.offset=a,e()):{string:e(),length:a-c}},c.writeIString=function(a,b){var e,d,g,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("string"!=typeof a)throw TypeError("Illegal str: Not a string");if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}if(d=b,e=k.calculateUTF16asUTF8(f(a),this.noAssert)[1],b+=4+e,g=this.buffer.byteLength,b>g&&this.resize((g*=2)>b?g:b),b-=4+e,this.littleEndian?(this.view[b+3]=255&e>>>24,this.view[b+2]=255&e>>>16,this.view[b+1]=255&e>>>8,this.view[b]=255&e):(this.view[b]=255&e>>>24,this.view[b+1]=255&e>>>16,this.view[b+2]=255&e>>>8,this.view[b+3]=255&e),b+=4,k.encodeUTF16toUTF8(f(a),function(a){this.view[b++]=a;}.bind(this)),b!==d+4+e)throw RangeError("Illegal range: Truncated data, "+b+" == "+(b+4+e));return c?(this.offset=b,this):b-d},c.readIString=function(a){var d,e,f,c="undefined"==typeof a; + if(c&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+4>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+4+") <= "+this.buffer.byteLength)}return d=a,e=this.readUint32(a),f=this.readUTF8String(e,b.METRICS_BYTES,a+=4),a+=f.length,c?(this.offset=a,f.string):{string:f.string,length:a-d}},b.METRICS_CHARS="c",b.METRICS_BYTES="b",c.writeUTF8String=function(a,b){var d,e,g,c="undefined"==typeof b;if(c&&(b=this.offset),!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: "+b+" (not an integer)");if(b>>>=0,0>b||b+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+b+" (+"+0+") <= "+this.buffer.byteLength)}return e=b,d=k.calculateUTF16asUTF8(f(a))[1],b+=d,g=this.buffer.byteLength,b>g&&this.resize((g*=2)>b?g:b),b-=d,k.encodeUTF16toUTF8(f(a),function(a){this.view[b++]=a;}.bind(this)),c?(this.offset=b,this):b-e},c.writeString=c.writeUTF8String,b.calculateUTF8Chars=function(a){return k.calculateUTF16asUTF8(f(a))[0]},b.calculateUTF8Bytes=function(a){return k.calculateUTF16asUTF8(f(a))[1]},b.calculateString=b.calculateUTF8Bytes,c.readUTF8String=function(a,c,d){var e,i,f,h,j;if("number"==typeof c&&(d=c,c=void 0),e="undefined"==typeof d,e&&(d=this.offset),"undefined"==typeof c&&(c=b.METRICS_CHARS),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal length: "+a+" (not an integer)");if(a|=0,"number"!=typeof d||0!==d%1)throw TypeError("Illegal offset: "+d+" (not an integer)");if(d>>>=0,0>d||d+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+d+" (+"+0+") <= "+this.buffer.byteLength)}if(f=0,h=d,c===b.METRICS_CHARS){if(i=g(),k.decodeUTF8(function(){return a>f&&d>>=0,0>d||d+a>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+d+" (+"+a+") <= "+this.buffer.byteLength)}if(j=d+a,k.decodeUTF8toUTF16(function(){return j>d?this.view[d++]:null}.bind(this),i=g(),this.noAssert),d!==j)throw RangeError("Illegal range: Truncated data, "+d+" == "+j);return e?(this.offset=d,i()):{string:i(),length:d-h}}throw TypeError("Unsupported metrics: "+c)},c.readString=c.readUTF8String,c.writeVString=function(a,c){var g,h,e,i,d="undefined"==typeof c;if(d&&(c=this.offset),!this.noAssert){if("string"!=typeof a)throw TypeError("Illegal str: Not a string");if("number"!=typeof c||0!==c%1)throw TypeError("Illegal offset: "+c+" (not an integer)");if(c>>>=0,0>c||c+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+c+" (+"+0+") <= "+this.buffer.byteLength)}if(e=c,g=k.calculateUTF16asUTF8(f(a),this.noAssert)[1],h=b.calculateVarint32(g),c+=h+g,i=this.buffer.byteLength,c>i&&this.resize((i*=2)>c?i:c),c-=h+g,c+=this.writeVarint32(g,c),k.encodeUTF16toUTF8(f(a),function(a){this.view[c++]=a;}.bind(this)),c!==e+g+h)throw RangeError("Illegal range: Truncated data, "+c+" == "+(c+g+h));return d?(this.offset=c,this):c-e},c.readVString=function(a){var d,e,f,c="undefined"==typeof a;if(c&&(a=this.offset),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+1>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+1+") <= "+this.buffer.byteLength)}return d=a,e=this.readVarint32(a),f=this.readUTF8String(e.value,b.METRICS_BYTES,a+=e.length),a+=f.length,c?(this.offset=a,f.string):{string:f.string,length:a-d}},c.append=function(a,c,d){var e,f,g;if(("number"==typeof c||"string"!=typeof c)&&(d=c,c=void 0),e="undefined"==typeof d,e&&(d=this.offset),!this.noAssert){if("number"!=typeof d||0!==d%1)throw TypeError("Illegal offset: "+d+" (not an integer)");if(d>>>=0,0>d||d+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+d+" (+"+0+") <= "+this.buffer.byteLength)}return a instanceof b||(a=b.wrap(a,c)),f=a.limit-a.offset,0>=f?this:(d+=f,g=this.buffer.byteLength,d>g&&this.resize((g*=2)>d?g:d),d-=f,this.view.set(a.view.subarray(a.offset,a.limit),d),a.offset+=f,e&&(this.offset+=f),this)},c.appendTo=function(a,b){return a.append(this,b),this},c.assert=function(a){return this.noAssert=!a,this},c.capacity=function(){return this.buffer.byteLength},c.clear=function(){return this.offset=0,this.limit=this.buffer.byteLength,this.markedOffset=-1,this},c.clone=function(a){var c=new b(0,this.littleEndian,this.noAssert);return a?(c.buffer=new ArrayBuffer(this.buffer.byteLength),c.view=new Uint8Array(c.buffer)):(c.buffer=this.buffer,c.view=this.view),c.offset=this.offset,c.markedOffset=this.markedOffset,c.limit=this.limit,c},c.compact=function(a,b){var c,e,f;if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof b&&(b=this.limit),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal begin: Not an integer");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal end: Not an integer");if(b>>>=0,0>a||a>b||b>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+b+" <= "+this.buffer.byteLength)}return 0===a&&b===this.buffer.byteLength?this:(c=b-a,0===c?(this.buffer=d,this.view=null,this.markedOffset>=0&&(this.markedOffset-=a),this.offset=0,this.limit=0,this):(e=new ArrayBuffer(c),f=new Uint8Array(e),f.set(this.view.subarray(a,b)),this.buffer=e,this.view=f,this.markedOffset>=0&&(this.markedOffset-=a),this.offset=0,this.limit=c,this))},c.copy=function(a,c){if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof c&&(c=this.limit),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal begin: Not an integer");if(a>>>=0,"number"!=typeof c||0!==c%1)throw TypeError("Illegal end: Not an integer");if(c>>>=0,0>a||a>c||c>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+c+" <= "+this.buffer.byteLength)}if(a===c)return new b(0,this.littleEndian,this.noAssert);var d=c-a,e=new b(d,this.littleEndian,this.noAssert);return e.offset=0,e.limit=d,e.markedOffset>=0&&(e.markedOffset-=a),this.copyTo(e,0,a,c),e},c.copyTo=function(a,c,d,e){var f,g,h;if(!this.noAssert&&!b.isByteBuffer(a))throw TypeError("Illegal target: Not a ByteBuffer");if(c=(g="undefined"==typeof c)?a.offset:0|c,d=(f="undefined"==typeof d)?this.offset:0|d,e="undefined"==typeof e?this.limit:0|e,0>c||c>a.buffer.byteLength)throw RangeError("Illegal target range: 0 <= "+c+" <= "+a.buffer.byteLength);if(0>d||e>this.buffer.byteLength)throw RangeError("Illegal source range: 0 <= "+d+" <= "+this.buffer.byteLength);return h=e-d,0===h?a:(a.ensureCapacity(c+h),a.view.set(this.view.subarray(d,e),c),f&&(this.offset+=h),g&&(a.offset+=h),this)},c.ensureCapacity=function(a){var b=this.buffer.byteLength;return a>b?this.resize((b*=2)>a?b:a):this},c.fill=function(a,b,c){var d="undefined"==typeof b;if(d&&(b=this.offset),"string"==typeof a&&a.length>0&&(a=a.charCodeAt(0)),"undefined"==typeof b&&(b=this.offset),"undefined"==typeof c&&(c=this.limit),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal value: "+a+" (not an integer)");if(a|=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal begin: Not an integer");if(b>>>=0,"number"!=typeof c||0!==c%1)throw TypeError("Illegal end: Not an integer");if(c>>>=0,0>b||b>c||c>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+b+" <= "+c+" <= "+this.buffer.byteLength)}if(b>=c)return this;for(;c>b;)this.view[b++]=a;return d&&(this.offset=b),this},c.flip=function(){return this.limit=this.offset,this.offset=0,this},c.mark=function(a){if(a="undefined"==typeof a?this.offset:a,!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal offset: "+a+" (not an integer)");if(a>>>=0,0>a||a+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+a+" (+"+0+") <= "+this.buffer.byteLength)}return this.markedOffset=a,this},c.order=function(a){if(!this.noAssert&&"boolean"!=typeof a)throw TypeError("Illegal littleEndian: Not a boolean");return this.littleEndian=!!a,this},c.LE=function(a){return this.littleEndian="undefined"!=typeof a?!!a:!0,this},c.BE=function(a){return this.littleEndian="undefined"!=typeof a?!a:!1,this},c.prepend=function(a,c,d){var e,f,g,h,i;if(("number"==typeof c||"string"!=typeof c)&&(d=c,c=void 0),e="undefined"==typeof d,e&&(d=this.offset),!this.noAssert){if("number"!=typeof d||0!==d%1)throw TypeError("Illegal offset: "+d+" (not an integer)");if(d>>>=0,0>d||d+0>this.buffer.byteLength)throw RangeError("Illegal offset: 0 <= "+d+" (+"+0+") <= "+this.buffer.byteLength)}return a instanceof b||(a=b.wrap(a,c)),f=a.limit-a.offset,0>=f?this:(g=f-d,g>0?(h=new ArrayBuffer(this.buffer.byteLength+g),i=new Uint8Array(h),i.set(this.view.subarray(d,this.buffer.byteLength),f),this.buffer=h,this.view=i,this.offset+=g,this.markedOffset>=0&&(this.markedOffset+=g),this.limit+=g,d+=g):new Uint8Array(this.buffer),this.view.set(a.view.subarray(a.offset,a.limit),d-f),a.offset=a.limit,e&&(this.offset-=f),this)},c.prependTo=function(a,b){return a.prepend(this,b),this},c.printDebug=function(a){"function"!=typeof a&&(a=console.log.bind(console)),a(this.toString()+"\n-------------------------------------------------------------------\n"+this.toDebug(!0));},c.remaining=function(){return this.limit-this.offset},c.reset=function(){return this.markedOffset>=0?(this.offset=this.markedOffset,this.markedOffset=-1):this.offset=0,this},c.resize=function(a){var b,c;if(!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal capacity: "+a+" (not an integer)");if(a|=0,0>a)throw RangeError("Illegal capacity: 0 <= "+a)}return this.buffer.byteLength>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal end: Not an integer");if(b>>>=0,0>a||a>b||b>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+b+" <= "+this.buffer.byteLength)}return a===b?this:(Array.prototype.reverse.call(this.view.subarray(a,b)),this)},c.skip=function(a){if(!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal length: "+a+" (not an integer)");a|=0;}var b=this.offset+a;if(!this.noAssert&&(0>b||b>this.buffer.byteLength))throw RangeError("Illegal length: 0 <= "+this.offset+" + "+a+" <= "+this.buffer.byteLength);return this.offset=b,this},c.slice=function(a,b){if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof b&&(b=this.limit),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal begin: Not an integer");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal end: Not an integer");if(b>>>=0,0>a||a>b||b>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+b+" <= "+this.buffer.byteLength)}var c=this.clone();return c.offset=a,c.limit=b,c},c.toBuffer=function(a){var e,b=this.offset,c=this.limit;if(!this.noAssert){if("number"!=typeof b||0!==b%1)throw TypeError("Illegal offset: Not an integer");if(b>>>=0,"number"!=typeof c||0!==c%1)throw TypeError("Illegal limit: Not an integer");if(c>>>=0,0>b||b>c||c>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+b+" <= "+c+" <= "+this.buffer.byteLength)}return a||0!==b||c!==this.buffer.byteLength?b===c?d:(e=new ArrayBuffer(c-b),new Uint8Array(e).set(new Uint8Array(this.buffer).subarray(b,c),0),e):this.buffer},c.toArrayBuffer=c.toBuffer,c.toString=function(a,b,c){if("undefined"==typeof a)return "ByteBufferAB(offset="+this.offset+",markedOffset="+this.markedOffset+",limit="+this.limit+",capacity="+this.capacity()+")";switch("number"==typeof a&&(a="utf8",b=a,c=b),a){case"utf8":return this.toUTF8(b,c);case"base64":return this.toBase64(b,c);case"hex":return this.toHex(b,c);case"binary":return this.toBinary(b,c);case"debug":return this.toDebug();case"columns":return this.toColumns();default:throw Error("Unsupported encoding: "+a)}},j=function(){var d,e,a={},b=[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47],c=[];for(d=0,e=b.length;e>d;++d)c[b[d]]=d;return a.encode=function(a,c){for(var d,e;null!==(d=a());)c(b[63&d>>2]),e=(3&d)<<4,null!==(d=a())?(e|=15&d>>4,c(b[63&(e|15&d>>4)]),e=(15&d)<<2,null!==(d=a())?(c(b[63&(e|3&d>>6)]),c(b[63&d])):(c(b[63&e]),c(61))):(c(b[63&e]),c(61),c(61));},a.decode=function(a,b){function g(a){throw Error("Illegal character code: "+a)}for(var d,e,f;null!==(d=a());)if(e=c[d],"undefined"==typeof e&&g(d),null!==(d=a())&&(f=c[d],"undefined"==typeof f&&g(d),b(e<<2>>>0|(48&f)>>4),null!==(d=a()))){if(e=c[d],"undefined"==typeof e){if(61===d)break;g(d);}if(b((15&f)<<4>>>0|(60&e)>>2),null!==(d=a())){if(f=c[d],"undefined"==typeof f){if(61===d)break;g(d);}b((3&e)<<6>>>0|f);}}},a.test=function(a){return /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/.test(a)},a}(),c.toBase64=function(a,b){if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof b&&(b=this.limit),a=0|a,b=0|b,0>a||b>this.capacity||a>b)throw RangeError("begin, end");var c;return j.encode(function(){return b>a?this.view[a++]:null}.bind(this),c=g()),c()},b.fromBase64=function(a,c){if("string"!=typeof a)throw TypeError("str");var d=new b(3*(a.length/4),c),e=0;return j.decode(f(a),function(a){d.view[e++]=a;}),d.limit=e,d},b.btoa=function(a){return b.fromBinary(a).toBase64()},b.atob=function(a){return b.fromBase64(a).toBinary()},c.toBinary=function(a,b){if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof b&&(b=this.limit),a|=0,b|=0,0>a||b>this.capacity()||a>b)throw RangeError("begin, end");if(a===b)return "";for(var c=[],d=[];b>a;)c.push(this.view[a++]),c.length>=1024&&(d.push(String.fromCharCode.apply(String,c)),c=[]);return d.join("")+String.fromCharCode.apply(String,c)},b.fromBinary=function(a,c){if("string"!=typeof a)throw TypeError("str");for(var f,d=0,e=a.length,g=new b(e,c);e>d;){if(f=a.charCodeAt(d),f>255)throw RangeError("illegal char code: "+f);g.view[d++]=f;}return g.limit=e,g},c.toDebug=function(a){for(var d,b=-1,c=this.buffer.byteLength,e="",f="",g="";c>b;){if(-1!==b&&(d=this.view[b],e+=16>d?"0"+d.toString(16).toUpperCase():d.toString(16).toUpperCase(),a&&(f+=d>32&&127>d?String.fromCharCode(d):".")),++b,a&&b>0&&0===b%16&&b!==c){for(;e.length<51;)e+=" ";g+=e+f+"\n",e=f="";}e+=b===this.offset&&b===this.limit?b===this.markedOffset?"!":"|":b===this.offset?b===this.markedOffset?"[":"<":b===this.limit?b===this.markedOffset?"]":">":b===this.markedOffset?"'":a||0!==b&&b!==c?" ":"";}if(a&&" "!==e){for(;e.length<51;)e+=" ";g+=e+f+"\n";}return a?g:e},b.fromDebug=function(a,c,d){for(var i,j,e=a.length,f=new b(0|(e+1)/3,c,d),g=0,h=0,k=!1,l=!1,m=!1,n=!1,o=!1;e>g;){switch(i=a.charAt(g++)){case"!":if(!d){if(l||m||n){o=!0;break}l=m=n=!0;}f.offset=f.markedOffset=f.limit=h,k=!1;break;case"|":if(!d){if(l||n){o=!0;break}l=n=!0;}f.offset=f.limit=h,k=!1;break;case"[":if(!d){if(l||m){o=!0;break}l=m=!0;}f.offset=f.markedOffset=h,k=!1;break;case"<":if(!d){if(l){o=!0;break}l=!0;}f.offset=h,k=!1;break;case"]":if(!d){if(n||m){o=!0;break}n=m=!0;}f.limit=f.markedOffset=h,k=!1;break;case">":if(!d){if(n){o=!0;break}n=!0;}f.limit=h,k=!1;break;case"'":if(!d){if(m){o=!0;break}m=!0;}f.markedOffset=h,k=!1;break;case" ":k=!1;break;default:if(!d&&k){o=!0;break}if(j=parseInt(i+a.charAt(g++),16),!d&&(isNaN(j)||0>j||j>255))throw TypeError("Illegal str: Not a debug encoded string");f.view[h++]=j,k=!0;}if(o)throw TypeError("Illegal str: Invalid symbol at "+g)}if(!d){if(!l||!n)throw TypeError("Illegal str: Missing offset or limit");if(h>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal end: Not an integer");if(b>>>=0,0>a||a>b||b>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+b+" <= "+this.buffer.byteLength)}for(var d,c=new Array(b-a);b>a;)d=this.view[a++],16>d?c.push("0",d.toString(16)):c.push(d.toString(16));return c.join("")},b.fromHex=function(a,c,d){var g,e,f,h,i;if(!d){if("string"!=typeof a)throw TypeError("Illegal str: Not a string");if(0!==a.length%2)throw TypeError("Illegal str: Length not a multiple of 2")}for(e=a.length,f=new b(0|e/2,c),h=0,i=0;e>h;h+=2){if(g=parseInt(a.substring(h,h+2),16),!d&&(!isFinite(g)||0>g||g>255))throw TypeError("Illegal str: Contains non-hex characters");f.view[i++]=g;}return f.limit=i,f},k=function(){var a={};return a.MAX_CODEPOINT=1114111,a.encodeUTF8=function(a,b){var c=null;for("number"==typeof a&&(c=a,a=function(){return null});null!==c||null!==(c=a());)128>c?b(127&c):2048>c?(b(192|31&c>>6),b(128|63&c)):65536>c?(b(224|15&c>>12),b(128|63&c>>6),b(128|63&c)):(b(240|7&c>>18),b(128|63&c>>12),b(128|63&c>>6),b(128|63&c)),c=null;},a.decodeUTF8=function(a,b){for(var c,d,e,f,g=function(a){a=a.slice(0,a.indexOf(null));var b=Error(a.toString());throw b.name="TruncatedError",b.bytes=a,b};null!==(c=a());)if(0===(128&c))b(c);else if(192===(224&c))null===(d=a())&&g([c,d]),b((31&c)<<6|63&d);else if(224===(240&c))(null===(d=a())||null===(e=a()))&&g([c,d,e]),b((15&c)<<12|(63&d)<<6|63&e);else{if(240!==(248&c))throw RangeError("Illegal starting byte: "+c);(null===(d=a())||null===(e=a())||null===(f=a()))&&g([c,d,e,f]),b((7&c)<<18|(63&d)<<12|(63&e)<<6|63&f);}},a.UTF16toUTF8=function(a,b){for(var c,d=null;;){if(null===(c=null!==d?d:a()))break;c>=55296&&57343>=c&&null!==(d=a())&&d>=56320&&57343>=d?(b(1024*(c-55296)+d-56320+65536),d=null):b(c);}null!==d&&b(d);},a.UTF8toUTF16=function(a,b){var c=null;for("number"==typeof a&&(c=a,a=function(){return null});null!==c||null!==(c=a());)65535>=c?b(c):(c-=65536,b((c>>10)+55296),b(c%1024+56320)),c=null;},a.encodeUTF16toUTF8=function(b,c){a.UTF16toUTF8(b,function(b){a.encodeUTF8(b,c);});},a.decodeUTF8toUTF16=function(b,c){a.decodeUTF8(b,function(b){a.UTF8toUTF16(b,c);});},a.calculateCodePoint=function(a){return 128>a?1:2048>a?2:65536>a?3:4},a.calculateUTF8=function(a){for(var b,c=0;null!==(b=a());)c+=128>b?1:2048>b?2:65536>b?3:4;return c},a.calculateUTF16asUTF8=function(b){var c=0,d=0;return a.UTF16toUTF8(b,function(a){++c,d+=128>a?1:2048>a?2:65536>a?3:4;}),[c,d]},a}(),c.toUTF8=function(a,b){if("undefined"==typeof a&&(a=this.offset),"undefined"==typeof b&&(b=this.limit),!this.noAssert){if("number"!=typeof a||0!==a%1)throw TypeError("Illegal begin: Not an integer");if(a>>>=0,"number"!=typeof b||0!==b%1)throw TypeError("Illegal end: Not an integer");if(b>>>=0,0>a||a>b||b>this.buffer.byteLength)throw RangeError("Illegal range: 0 <= "+a+" <= "+b+" <= "+this.buffer.byteLength)}var c;try{k.decodeUTF8toUTF16(function(){return b>a?this.view[a++]:null}.bind(this),c=g());}catch(d){if(a!==b)throw RangeError("Illegal range: Truncated data, "+a+" != "+b)}return c()},b.fromUTF8=function(a,c,d){if(!d&&"string"!=typeof a)throw TypeError("Illegal str: Not a string");var e=new b(k.calculateUTF16asUTF8(f(a),!0)[1],c,d),g=0;return k.encodeUTF16toUTF8(f(a),function(a){e.view[g++]=a;}),e.limit=g,e},b}(c),e=function(b,c){var f,h,i,e={};return e.ByteBuffer=b,e.c=b,f=b,e.Long=c||null,e.VERSION="5.0.1",e.WIRE_TYPES={},e.WIRE_TYPES.VARINT=0,e.WIRE_TYPES.BITS64=1,e.WIRE_TYPES.LDELIM=2,e.WIRE_TYPES.STARTGROUP=3,e.WIRE_TYPES.ENDGROUP=4,e.WIRE_TYPES.BITS32=5,e.PACKABLE_WIRE_TYPES=[e.WIRE_TYPES.VARINT,e.WIRE_TYPES.BITS64,e.WIRE_TYPES.BITS32],e.TYPES={int32:{name:"int32",wireType:e.WIRE_TYPES.VARINT,defaultValue:0},uint32:{name:"uint32",wireType:e.WIRE_TYPES.VARINT,defaultValue:0},sint32:{name:"sint32",wireType:e.WIRE_TYPES.VARINT,defaultValue:0},int64:{name:"int64",wireType:e.WIRE_TYPES.VARINT,defaultValue:e.Long?e.Long.ZERO:void 0},uint64:{name:"uint64",wireType:e.WIRE_TYPES.VARINT,defaultValue:e.Long?e.Long.UZERO:void 0},sint64:{name:"sint64",wireType:e.WIRE_TYPES.VARINT,defaultValue:e.Long?e.Long.ZERO:void 0},bool:{name:"bool",wireType:e.WIRE_TYPES.VARINT,defaultValue:!1},"double":{name:"double",wireType:e.WIRE_TYPES.BITS64,defaultValue:0},string:{name:"string",wireType:e.WIRE_TYPES.LDELIM,defaultValue:""},bytes:{name:"bytes",wireType:e.WIRE_TYPES.LDELIM,defaultValue:null},fixed32:{name:"fixed32",wireType:e.WIRE_TYPES.BITS32,defaultValue:0},sfixed32:{name:"sfixed32",wireType:e.WIRE_TYPES.BITS32,defaultValue:0},fixed64:{name:"fixed64",wireType:e.WIRE_TYPES.BITS64,defaultValue:e.Long?e.Long.UZERO:void 0},sfixed64:{name:"sfixed64",wireType:e.WIRE_TYPES.BITS64,defaultValue:e.Long?e.Long.ZERO:void 0},"float":{name:"float",wireType:e.WIRE_TYPES.BITS32,defaultValue:0},"enum":{name:"enum",wireType:e.WIRE_TYPES.VARINT,defaultValue:0},message:{name:"message",wireType:e.WIRE_TYPES.LDELIM,defaultValue:null},group:{name:"group",wireType:e.WIRE_TYPES.STARTGROUP,defaultValue:null}},e.MAP_KEY_TYPES=[e.TYPES.int32,e.TYPES.sint32,e.TYPES.sfixed32,e.TYPES.uint32,e.TYPES.fixed32,e.TYPES.int64,e.TYPES.sint64,e.TYPES.sfixed64,e.TYPES.uint64,e.TYPES.fixed64,e.TYPES.bool,e.TYPES.string,e.TYPES.bytes],e.ID_MIN=1,e.ID_MAX=536870911,e.convertFieldsToCamelCase=!1,e.populateAccessors=!0,e.populateDefaults=!0,e.Util=function(){var a={};return a.IS_NODE=!("object"!=typeof process||"[object process]"!=process+""||process.browser),a.XHR=function(){var c,a=[function(){return new XMLHttpRequest},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],b=null;for(c=0;c]/g,RULE:/^(?:required|optional|repeated|map)$/,TYPE:/^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,NAME:/^[a-zA-Z_][a-zA-Z_0-9]*$/,TYPEDEF:/^[a-zA-Z][a-zA-Z_0-9]*$/,TYPEREF:/^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)+$/,FQTYPEREF:/^(?:\.[a-zA-Z][a-zA-Z_0-9]*)+$/,NUMBER:/^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,NUMBER_DEC:/^(?:[1-9][0-9]*|0)$/,NUMBER_HEX:/^0[xX][0-9a-fA-F]+$/,NUMBER_OCT:/^0[0-7]+$/,NUMBER_FLT:/^([0-9]*(\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,BOOL:/^(?:true|false)$/i,ID:/^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,NEGID:/^\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,WHITESPACE:/\s/,STRING:/(?:"([^"\\]*(?:\\.[^"\\]*)*)")|(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,STRING_DQ:/(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,STRING_SQ:/(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g},e.DotProto=function(a,b){function h(a,c){var d=-1,e=1;if("-"==a.charAt(0)&&(e=-1,a=a.substring(1)),b.NUMBER_DEC.test(a))d=parseInt(a);else if(b.NUMBER_HEX.test(a))d=parseInt(a.substring(2),16);else{if(!b.NUMBER_OCT.test(a))throw Error("illegal id value: "+(0>e?"-":"")+a);d=parseInt(a.substring(1),8);}if(d=0|e*d,!c&&0>d)throw Error("illegal id value: "+(0>e?"-":"")+a);return d}function i(a){var c=1;if("-"==a.charAt(0)&&(c=-1,a=a.substring(1)),b.NUMBER_DEC.test(a))return c*parseInt(a,10);if(b.NUMBER_HEX.test(a))return c*parseInt(a.substring(2),16);if(b.NUMBER_OCT.test(a))return c*parseInt(a.substring(1),8);if("inf"===a)return 1/0*c;if("nan"===a)return 0/0;if(b.NUMBER_FLT.test(a))return c*parseFloat(a);throw Error("illegal number value: "+(0>c?"-":"")+a)}function j(a,b,c){"undefined"==typeof a[b]?a[b]=c:(Array.isArray(a[b])||(a[b]=[a[b]]),a[b].push(c));}var f,g,c={},d=function(a){this.source=a+"",this.index=0,this.line=1,this.stack=[],this._stringOpen=null;},e=d.prototype;return e._readString=function(){var c,a='"'===this._stringOpen?b.STRING_DQ:b.STRING_SQ;if(a.lastIndex=this.index-1,c=a.exec(this.source),!c)throw Error("unterminated string");return this.index=a.lastIndex,this.stack.push(this._stringOpen),this._stringOpen=null,c[1]},e.next=function(){var a,c,d,e,f,g;if(this.stack.length>0)return this.stack.shift();if(this.index>=this.source.length)return null;if(null!==this._stringOpen)return this._readString();do{for(a=!1;b.WHITESPACE.test(d=this.source.charAt(this.index));)if("\n"===d&&++this.line,++this.index===this.source.length)return null;if("/"===this.source.charAt(this.index))if(++this.index,"/"===this.source.charAt(this.index)){for(;"\n"!==this.source.charAt(++this.index);)if(this.index==this.source.length)return null;++this.index,++this.line,a=!0;}else{if("*"!==(d=this.source.charAt(this.index)))return "/";do{if("\n"===d&&++this.line,++this.index===this.source.length)return null;c=d,d=this.source.charAt(this.index);}while("*"!==c||"/"!==d);++this.index,a=!0;}}while(a);if(this.index===this.source.length)return null;if(e=this.index,b.DELIM.lastIndex=0,f=b.DELIM.test(this.source.charAt(e++)),!f)for(;e"),f=this.tn.next(),!b.NAME.test(f))throw Error("illegal message field name: "+f);e.name=f,this.tn.skip("="),e.id=h(this.tn.next()),f=this.tn.peek(),"["===f&&this._parseFieldOptions(e),this.tn.skip(";");}else if(d="undefined"!=typeof d?d:this.tn.next(),"group"===d){if(g=this._parseMessage(a,e),!/^[A-Z]/.test(g.name))throw Error("illegal group name: "+g.name);e.type=g.name,e.name=g.name.toLowerCase(),this.tn.omit(";");}else{if(!b.TYPE.test(d)&&!b.TYPEREF.test(d))throw Error("illegal message field type: "+d);if(e.type=d,f=this.tn.next(),!b.NAME.test(f))throw Error("illegal message field name: "+f); + e.name=f,this.tn.skip("="),e.id=h(this.tn.next()),f=this.tn.peek(),"["===f&&this._parseFieldOptions(e),this.tn.skip(";");}return a.fields.push(e),e},g._parseMessageOneOf=function(a){var e,d,f,c=this.tn.next();if(!b.NAME.test(c))throw Error("illegal oneof name: "+c);for(d=c,f=[],this.tn.skip("{");"}"!==(c=this.tn.next());)e=this._parseMessageField(a,"optional",c),e.oneof=d,f.push(e.id);this.tn.omit(";"),a.oneofs[d]=f;},g._parseFieldOptions=function(a){this.tn.skip("[");for(var b,c=!0;"]"!==(b=this.tn.peek());)c||this.tn.skip(","),this._parseOption(a,!0),c=!1;this.tn.next();},g._parseEnum=function(a){var e,c={name:"",values:[],options:{}},d=this.tn.next();if(!b.NAME.test(d))throw Error("illegal name: "+d);for(c.name=d,this.tn.skip("{");"}"!==(d=this.tn.next());)if("option"===d)this._parseOption(c);else{if(!b.NAME.test(d))throw Error("illegal name: "+d);this.tn.skip("="),e={name:d,id:h(this.tn.next(),!0)},d=this.tn.peek(),"["===d&&this._parseFieldOptions({options:{}}),this.tn.skip(";"),c.values.push(e);}this.tn.omit(";"),a.enums.push(c);},g._parseExtensionRanges=function(){var c,d,e,b=[];do{for(d=[];;){switch(c=this.tn.next()){case"min":e=a.ID_MIN;break;case"max":e=a.ID_MAX;break;default:e=i(c);}if(d.push(e),2===d.length)break;if("to"!==this.tn.peek()){d.push(e);break}this.tn.next();}b.push(d);}while(this.tn.omit(","));return this.tn.skip(";"),b},g._parseExtend=function(a){var d,c=this.tn.next();if(!b.TYPEREF.test(c))throw Error("illegal extend reference: "+c);for(d={ref:c,fields:[]},this.tn.skip("{");"}"!==(c=this.tn.next());)if(b.RULE.test(c))this._parseMessageField(d,c);else{if(!b.TYPEREF.test(c))throw Error("illegal extend token: "+c);if(!this.proto3)throw Error("illegal field rule: "+c);this._parseMessageField(d,"optional",c);}return this.tn.omit(";"),a.messages.push(d),d},g.toString=function(){return "Parser at line "+this.tn.line},c.Parser=f,c}(e,e.Lang),e.Reflect=function(a){function k(b){if("string"==typeof b&&(b=a.TYPES[b]),"undefined"==typeof b.defaultValue)throw Error("default value for type "+b.name+" is not supported");return b==a.TYPES.bytes?new f(0):b.defaultValue}function l(b,c){if(b&&"number"==typeof b.low&&"number"==typeof b.high&&"boolean"==typeof b.unsigned&&b.low===b.low&&b.high===b.high)return new a.Long(b.low,b.high,"undefined"==typeof c?b.unsigned:c);if("string"==typeof b)return a.Long.fromString(b,c||!1,10);if("number"==typeof b)return a.Long.fromNumber(b,c||!1);throw Error("not convertible to Long")}function o(b,c){var d=c.readVarint32(),e=7&d,f=d>>>3;switch(e){case a.WIRE_TYPES.VARINT:do d=c.readUint8();while(128===(128&d));break;case a.WIRE_TYPES.BITS64:c.offset+=8;break;case a.WIRE_TYPES.LDELIM:d=c.readVarint32(),c.offset+=d;break;case a.WIRE_TYPES.STARTGROUP:o(f,c);break;case a.WIRE_TYPES.ENDGROUP:if(f===b)return !1;throw Error("Illegal GROUPEND after unknown group: "+f+" ("+b+" expected)");case a.WIRE_TYPES.BITS32:c.offset+=4;break;default:throw Error("Illegal wire type in unknown group "+b+": "+e)}return !0}var g,h,i,j,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,c={},d=function(a,b,c){this.builder=a,this.parent=b,this.name=c,this.className;},e=d.prototype;return e.fqn=function(){for(var a=this.name,b=this;;){if(b=b.parent,null==b)break;a=b.name+"."+a;}return a},e.toString=function(a){return (a?this.className+" ":"")+this.fqn()},e.build=function(){throw Error(this.toString(!0)+" cannot be built directly")},c.T=d,g=function(a,b,c,e,f){d.call(this,a,b,c),this.className="Namespace",this.children=[],this.options=e||{},this.syntax=f||"proto2";},h=g.prototype=Object.create(d.prototype),h.getChildren=function(a){var b,c,d;if(a=a||null,null==a)return this.children.slice();for(b=[],c=0,d=this.children.length;d>c;++c)this.children[c]instanceof a&&b.push(this.children[c]);return b},h.addChild=function(a){var b;if(b=this.getChild(a.name))if(b instanceof m.Field&&b.name!==b.originalName&&null===this.getChild(b.originalName))b.name=b.originalName;else{if(!(a instanceof m.Field&&a.name!==a.originalName&&null===this.getChild(a.originalName)))throw Error("Duplicate name in namespace "+this.toString(!0)+": "+a.name);a.name=a.originalName;}this.children.push(a);},h.getChild=function(a){var c,d,b="number"==typeof a?"id":"name";for(c=0,d=this.children.length;d>c;++c)if(this.children[c][b]===a)return this.children[c];return null},h.resolve=function(a,b){var g,d="string"==typeof a?a.split("."):a,e=this,f=0;if(""===d[f]){for(;null!==e.parent;)e=e.parent;f++;}do{do{if(!(e instanceof c.Namespace)){e=null;break}if(g=e.getChild(d[f]),!(g&&g instanceof c.T&&(!b||g instanceof c.Namespace))){e=null;break}e=g,f++;}while(fc;++c)e=b[c],e instanceof g&&(a[e.name]=e.build());return Object.defineProperty&&Object.defineProperty(a,"$options",{value:this.buildOpt()}),a},h.buildOpt=function(){var c,d,e,f,a={},b=Object.keys(this.options);for(c=0,d=b.length;d>c;++c)e=b[c],f=this.options[b[c]],a[e]=f;return a},h.getOption=function(a){return "undefined"==typeof a?this.options:"undefined"!=typeof this.options[a]?this.options[a]:null},c.Namespace=g,i=function(b,c,d,e){if(this.type=b,this.resolvedType=c,this.isMapKey=d,this.syntax=e,d&&a.MAP_KEY_TYPES.indexOf(b)<0)throw Error("Invalid map key type: "+b.name)},j=i.prototype,i.defaultFieldValue=k,j.verifyValue=function(c){var f,g,h,d=function(a,b){throw Error("Illegal value for "+this.toString(!0)+" of type "+this.type.name+": "+a+" ("+b+")")}.bind(this);switch(this.type){case a.TYPES.int32:case a.TYPES.sint32:case a.TYPES.sfixed32:return ("number"!=typeof c||c===c&&0!==c%1)&&d(typeof c,"not an integer"),c>4294967295?0|c:c;case a.TYPES.uint32:case a.TYPES.fixed32:return ("number"!=typeof c||c===c&&0!==c%1)&&d(typeof c,"not an integer"),0>c?c>>>0:c;case a.TYPES.int64:case a.TYPES.sint64:case a.TYPES.sfixed64:if(a.Long)try{return l(c,!1)}catch(e){d(typeof c,e.message);}else d(typeof c,"requires Long.js");case a.TYPES.uint64:case a.TYPES.fixed64:if(a.Long)try{return l(c,!0)}catch(e){d(typeof c,e.message);}else d(typeof c,"requires Long.js");case a.TYPES.bool:return "boolean"!=typeof c&&d(typeof c,"not a boolean"),c;case a.TYPES["float"]:case a.TYPES["double"]:return "number"!=typeof c&&d(typeof c,"not a number"),c;case a.TYPES.string:return "string"==typeof c||c&&c instanceof String||d(typeof c,"not a string"),""+c;case a.TYPES.bytes:return b.isByteBuffer(c)?c:b.wrap(c);case a.TYPES["enum"]:for(f=this.resolvedType.getChildren(a.Reflect.Enum.Value),h=0;h4294967295||0>c)&&d(typeof c,"not in range for uint32"),c;d(c,"not a valid enum value");case a.TYPES.group:case a.TYPES.message:if(c&&"object"==typeof c||d(typeof c,"object expected"),c instanceof this.resolvedType.clazz)return c;if(c instanceof a.Builder.Message){g={};for(h in c)c.hasOwnProperty(h)&&(g[h]=c[h]);c=g;}return new this.resolvedType.clazz(c)}throw Error("[INTERNAL] Illegal value for "+this.toString(!0)+": "+c+" (undefined type "+this.type+")")},j.calculateLength=function(b,c){if(null===c)return 0;var d;switch(this.type){case a.TYPES.int32:return 0>c?f.calculateVarint64(c):f.calculateVarint32(c);case a.TYPES.uint32:return f.calculateVarint32(c);case a.TYPES.sint32:return f.calculateVarint32(f.zigZagEncode32(c));case a.TYPES.fixed32:case a.TYPES.sfixed32:case a.TYPES["float"]:return 4;case a.TYPES.int64:case a.TYPES.uint64:return f.calculateVarint64(c);case a.TYPES.sint64:return f.calculateVarint64(f.zigZagEncode64(c));case a.TYPES.fixed64:case a.TYPES.sfixed64:return 8;case a.TYPES.bool:return 1;case a.TYPES["enum"]:return f.calculateVarint32(c);case a.TYPES["double"]:return 8;case a.TYPES.string:return d=f.calculateUTF8Bytes(c),f.calculateVarint32(d)+d;case a.TYPES.bytes:if(c.remaining()<0)throw Error("Illegal value for "+this.toString(!0)+": "+c.remaining()+" bytes remaining");return f.calculateVarint32(c.remaining())+c.remaining();case a.TYPES.message:return d=this.resolvedType.calculate(c),f.calculateVarint32(d)+d;case a.TYPES.group:return d=this.resolvedType.calculate(c),d+f.calculateVarint32(b<<3|a.WIRE_TYPES.ENDGROUP)}throw Error("[INTERNAL] Illegal value to encode in "+this.toString(!0)+": "+c+" (unknown type)")},j.encodeValue=function(b,c,d){var e,g;if(null===c)return d;switch(this.type){case a.TYPES.int32:0>c?d.writeVarint64(c):d.writeVarint32(c);break;case a.TYPES.uint32:d.writeVarint32(c);break;case a.TYPES.sint32:d.writeVarint32ZigZag(c);break;case a.TYPES.fixed32:d.writeUint32(c);break;case a.TYPES.sfixed32:d.writeInt32(c);break;case a.TYPES.int64:case a.TYPES.uint64:d.writeVarint64(c);break;case a.TYPES.sint64:d.writeVarint64ZigZag(c);break;case a.TYPES.fixed64:d.writeUint64(c);break;case a.TYPES.sfixed64:d.writeInt64(c);break;case a.TYPES.bool:"string"==typeof c?d.writeVarint32("false"===c.toLowerCase()?0:!!c):d.writeVarint32(c?1:0);break;case a.TYPES["enum"]:d.writeVarint32(c);break;case a.TYPES["float"]:d.writeFloat32(c);break;case a.TYPES["double"]:d.writeFloat64(c);break;case a.TYPES.string:d.writeVString(c);break;case a.TYPES.bytes:if(c.remaining()<0)throw Error("Illegal value for "+this.toString(!0)+": "+c.remaining()+" bytes remaining");e=c.offset,d.writeVarint32(c.remaining()),d.append(c),c.offset=e;break;case a.TYPES.message:g=(new f).LE(),this.resolvedType.encode(c,g),d.writeVarint32(g.offset),d.append(g.flip());break;case a.TYPES.group:this.resolvedType.encode(c,d),d.writeVarint32(b<<3|a.WIRE_TYPES.ENDGROUP);break;default:throw Error("[INTERNAL] Illegal value to encode in "+this.toString(!0)+": "+c+" (unknown type)")}return d},j.decode=function(b,c,d){if(c!=this.type.wireType)throw Error("Unexpected wire type for element");var e,f;switch(this.type){case a.TYPES.int32:return 0|b.readVarint32();case a.TYPES.uint32:return b.readVarint32()>>>0;case a.TYPES.sint32:return 0|b.readVarint32ZigZag();case a.TYPES.fixed32:return b.readUint32()>>>0;case a.TYPES.sfixed32:return 0|b.readInt32();case a.TYPES.int64:return b.readVarint64();case a.TYPES.uint64:return b.readVarint64().toUnsigned();case a.TYPES.sint64:return b.readVarint64ZigZag();case a.TYPES.fixed64:return b.readUint64();case a.TYPES.sfixed64:return b.readInt64();case a.TYPES.bool:return !!b.readVarint32();case a.TYPES["enum"]:return b.readVarint32();case a.TYPES["float"]:return b.readFloat();case a.TYPES["double"]:return b.readDouble();case a.TYPES.string:return b.readVString();case a.TYPES.bytes:if(f=b.readVarint32(),b.remaining()i;++i)this[e[i].name]=null;for(i=0,j=d.length;j>i;++i)k=d[i],this[k.name]=k.repeated?[]:k.map?new a.Map(k):null,!k.required&&"proto3"!==c.syntax||null===k.defaultValue||(this[k.name]=k.defaultValue);if(arguments.length>0)if(1!==arguments.length||null===b||"object"!=typeof b||!("function"!=typeof b.encode||b instanceof g)||Array.isArray(b)||b instanceof a.Map||f.isByteBuffer(b)||b instanceof ArrayBuffer||a.Long&&b instanceof a.Long)for(i=0,j=arguments.length;j>i;++i)"undefined"!=typeof(l=arguments[i])&&this.$set(d[i].name,l);else this.$set(b);},h=g.prototype=Object.create(a.Builder.Message.prototype);for(h.add=function(b,d,e){var f=c._fieldsByName[b];if(!e){if(!f)throw Error(this+"#"+b+" is undefined");if(!(f instanceof a.Reflect.Message.Field))throw Error(this+"#"+b+" is not a field: "+f.toString(!0));if(!f.repeated)throw Error(this+"#"+b+" is not a repeated field");d=f.verifyValue(d,!0);}return null===this[b]&&(this[b]=[]),this[b].push(d),this},h.$add=h.add,h.set=function(b,d,e){var f,g,h;if(b&&"object"==typeof b){e=d;for(f in b)b.hasOwnProperty(f)&&"undefined"!=typeof(d=b[f])&&this.$set(f,d,e);return this}if(g=c._fieldsByName[b],e)this[b]=d;else{if(!g)throw Error(this+"#"+b+" is not a field: undefined");if(!(g instanceof a.Reflect.Message.Field))throw Error(this+"#"+b+" is not a field: "+g.toString(!0));this[g.name]=d=g.verifyValue(d);}return g&&g.oneof&&(h=this[g.oneof.name],null!==d?(null!==h&&h!==g.name&&(this[h]=null),this[g.oneof.name]=g.name):h===b&&(this[g.oneof.name]=null)),this},h.$set=h.set,h.get=function(b,d){if(d)return this[b];var e=c._fieldsByName[b];if(!(e&&e instanceof a.Reflect.Message.Field))throw Error(this+"#"+b+" is not a field: undefined");if(!(e instanceof a.Reflect.Message.Field))throw Error(this+"#"+b+" is not a field: "+e.toString(!0));return this[e.name]},h.$get=h.get,i=0;ie;e++)if(h=this.children[e],h instanceof t||h instanceof m||h instanceof x){if(d.hasOwnProperty(h.name))throw Error("Illegal reflect child of "+this.toString(!0)+": "+h.toString(!0)+" cannot override static property '"+h.name+"'");d[h.name]=h.build();}else if(h instanceof m.Field)h.build(),this._fields.push(h),this._fieldsById[h.id]=h,this._fieldsByName[h.name]=h;else if(!(h instanceof m.OneOf||h instanceof w))throw Error("Illegal reflect child of "+this.toString(!0)+": "+this.children[e].toString(!0));return this.clazz=d},n.encode=function(a,b,c){var e,h,f,g,i,d=null;for(f=0,g=this._fields.length;g>f;++f)e=this._fields[f],h=a[e.name],e.required&&null===h?null===d&&(d=e):e.encode(c?h:e.verifyValue(h),b,a);if(null!==d)throw i=Error("Missing at least one required field for "+this.toString(!0)+": "+d),i.encoded=b,i;return b},n.calculate=function(a){for(var e,f,b=0,c=0,d=this._fields.length;d>c;++c){if(e=this._fields[c],f=a[e.name],e.required&&null===f)throw Error("Missing at least one required field for "+this.toString(!0)+": "+e);b+=e.calculate(f,a);}return b},n.decode=function(b,c,d){var g,h,i,j,e,f,k,l,m,n,p,q;for(c="number"==typeof c?c:-1,e=b.offset,f=new this.clazz;b.offset0;){if(g=b.readVarint32(),h=7&g,i=g>>>3,h===a.WIRE_TYPES.ENDGROUP){if(i!==d)throw Error("Illegal group end indicator for "+this.toString(!0)+": "+i+" ("+(d?d+" expected":"not a group")+")");break}if(j=this._fieldsById[i])j.repeated&&!j.options.packed?f[j.name].push(j.decode(h,b)):j.map?(l=j.decode(h,b),f[j.name].set(l[0],l[1])):(f[j.name]=j.decode(h,b),j.oneof&&(m=f[j.oneof.name],null!==m&&m!==j.name&&(f[m]=null),f[j.oneof.name]=j.name));else switch(h){case a.WIRE_TYPES.VARINT:b.readVarint32();break;case a.WIRE_TYPES.BITS32:b.offset+=4;break;case a.WIRE_TYPES.BITS64:b.offset+=8;break;case a.WIRE_TYPES.LDELIM:k=b.readVarint32(),b.offset+=k;break;case a.WIRE_TYPES.STARTGROUP:for(;o(i,b););break;default:throw Error("Illegal wire type for unknown field "+i+" in "+this.toString(!0)+"#decode: "+h)}}for(n=0,p=this._fields.length;p>n;++n)if(j=this._fields[n],null===f[j.name])if("proto3"===this.syntax)f[j.name]=j.defaultValue;else{if(j.required)throw q=Error("Missing at least one required field for "+this.toString(!0)+": "+j.name),q.decoded=f,q;a.populateDefaults&&null!==j.defaultValue&&(f[j.name]=j.defaultValue);}return f},c.Message=m,p=function(b,c,e,f,g,h,i,j,k,l){d.call(this,b,c,h),this.className="Message.Field",this.required="required"===e,this.repeated="repeated"===e,this.map="map"===e,this.keyType=f||null,this.type=g,this.resolvedType=null,this.id=i,this.options=j||{},this.defaultValue=null,this.oneof=k||null,this.syntax=l||"proto2",this.originalName=this.name,this.element=null,this.keyElement=null,!this.builder.options.convertFieldsToCamelCase||this instanceof m.ExtensionField||(this.name=a.Util.toCamelCase(this.name));},q=p.prototype=Object.create(d.prototype),q.build=function(){this.element=new i(this.type,this.resolvedType,!1,this.syntax),this.map&&(this.keyElement=new i(this.keyType,void 0,!0,this.syntax)),"proto3"!==this.syntax||this.repeated||this.map?"undefined"!=typeof this.options["default"]&&(this.defaultValue=this.verifyValue(this.options["default"])):this.defaultValue=i.defaultFieldValue(this.type);},q.verifyValue=function(b,c){var d,e,f;if(c=c||!1,d=function(a,b){throw Error("Illegal value for "+this.toString(!0)+" of type "+this.type.name+": "+a+" ("+b+")")}.bind(this),null===b)return this.required&&d(typeof b,"required"),"proto3"===this.syntax&&this.type!==a.TYPES.message&&d(typeof b,"proto3 field without field presence cannot be null"),null;if(this.repeated&&!c){for(Array.isArray(b)||(b=[b]),f=[],e=0;e0;case a.TYPES.bytes:return b.remaining()>0;case a.TYPES["enum"]:return 0!==b;case a.TYPES.message:return null!==b;default:return !0}},q.encode=function(b,c,d){var e,g,h,i,j;if(null===this.type||"object"!=typeof this.type)throw Error("[INTERNAL] Unresolved type in "+this.toString(!0)+": "+this.type);if(null===b||this.repeated&&0==b.length)return c;try{if(this.repeated)if(this.options.packed&&a.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType)>=0){for(c.writeVarint32(this.id<<3|a.WIRE_TYPES.LDELIM),c.ensureCapacity(c.offset+=1),g=c.offset,e=0;e1&&(j=c.slice(g,c.offset),g+=i-1,c.offset=g,c.append(j)),c.writeVarint32(h,g-i);}else for(e=0;e=0){for(d+=f.calculateVarint32(this.id<<3|a.WIRE_TYPES.LDELIM),g=0,e=0;e=0&&!d){for(f=c.readVarint32(),f=c.offset+f,h=[];c.offset0;)if(l=k.readVarint32(),b=7&l,m=l>>>3,1===m)j=this.keyElement.decode(k,b,m);else{if(2!==m)throw Error("Unexpected tag in map field key/value submessage");e=this.element.decode(k,b,m);}return [j,e]}return this.element.decode(c,b,this.id)},c.Message.Field=p,r=function(a,b,c,d,e,f,g){p.call(this,a,b,c,null,d,e,f,g),this.extension;},r.prototype=Object.create(p.prototype),c.Message.ExtensionField=r,s=function(a,b,c){d.call(this,a,b,c),this.fields=[];},c.Message.OneOf=s,t=function(a,b,c,d,e){g.call(this,a,b,c,d,e),this.className="Enum",this.object=null;},t.getName=function(a,b){var e,d,c=Object.keys(a);for(d=0;de;++e)c[d[e]["name"]]=d[e]["id"];return Object.defineProperty&&Object.defineProperty(c,"$options",{value:this.buildOpt(),enumerable:!1}),this.object=c},c.Enum=t,v=function(a,b,c,e){d.call(this,a,b,c),this.className="Enum.Value",this.id=e;},v.prototype=Object.create(d.prototype),c.Enum.Value=v,w=function(a,b,c,e){d.call(this,a,b,c),this.field=e;},w.prototype=Object.create(d.prototype),c.Extension=w,x=function(a,b,c,d){g.call(this,a,b,c,d),this.className="Service",this.clazz=null;},y=x.prototype=Object.create(g.prototype),y.build=function(b){return this.clazz&&!b?this.clazz:this.clazz=function(a,b){var g,c=function(b){a.Builder.Service.call(this),this.rpcImpl=b||function(a,b,c){setTimeout(c.bind(this,Error("Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services")),0);};},d=c.prototype=Object.create(a.Builder.Service.prototype),e=b.getChildren(a.Reflect.Service.RPCMethod);for(g=0;g0;){if(b=e.pop(),!Array.isArray(b))throw Error("not a valid namespace: "+JSON.stringify(b));for(;b.length>0;){if(f=b.shift(),d.isMessage(f)){if(g=new c.Message(this,this.ptr,f.name,f.options,f.isGroup,f.syntax),h={},f.oneofs&&Object.keys(f.oneofs).forEach(function(a){g.addChild(h[a]=new c.Message.OneOf(this,g,a));},this),f.fields&&f.fields.forEach(function(a){if(null!==g.getChild(0|a.id))throw Error("duplicate or invalid field id in "+g.name+": "+a.id);if(a.options&&"object"!=typeof a.options)throw Error("illegal field options in "+g.name+"#"+a.name);var b=null;if("string"==typeof a.oneof&&!(b=h[a.oneof]))throw Error("illegal oneof in "+g.name+"#"+a.name+": "+a.oneof);a=new c.Message.Field(this,g,a.rule,a.keytype,a.type,a.name,a.id,a.options,b,f.syntax),b&&b.fields.push(a),g.addChild(a);},this),i=[],f.enums&&f.enums.forEach(function(a){i.push(a);}),f.messages&&f.messages.forEach(function(a){i.push(a);}),f.services&&f.services.forEach(function(a){i.push(a);}),f.extensions&&(g.extensions="number"==typeof f.extensions[0]?[f.extensions]:f.extensions),this.ptr.addChild(g),i.length>0){e.push(b),b=i,i=null,this.ptr=g,g=null;continue}i=null;}else if(d.isEnum(f))g=new c.Enum(this,this.ptr,f.name,f.options,f.syntax),f.values.forEach(function(a){g.addChild(new c.Enum.Value(this,g,a.name,a.id));},this),this.ptr.addChild(g);else if(d.isService(f))g=new c.Service(this,this.ptr,f.name,f.options),Object.keys(f.rpc).forEach(function(a){var b=f.rpc[a];g.addChild(new c.Service.RPCMethod(this,g,a,b.request,b.response,!!b.request_stream,!!b.response_stream,b.options));},this),this.ptr.addChild(g);else{if(!d.isExtend(f))throw Error("not a valid definition: "+JSON.stringify(f));if(g=this.ptr.resolve(f.ref,!0))f.fields.forEach(function(b){var d,e,f,h;if(null!==g.getChild(0|b.id))throw Error("duplicate extended field id in "+g.name+": "+b.id); + if(g.extensions&&(d=!1,g.extensions.forEach(function(a){b.id>=a[0]&&b.id<=a[1]&&(d=!0);}),!d))throw Error("illegal extended field id in "+g.name+": "+b.id+" (not within valid ranges)");e=b.name,this.options.convertFieldsToCamelCase&&(e=a.Util.toCamelCase(e)),f=new c.Message.ExtensionField(this,g,b.rule,b.type,this.ptr.fqn()+"."+e,b.id,b.options),h=new c.Extension(this,this.ptr,b.name,f),f.extension=h,this.ptr.addChild(h),g.addChild(f);},this);else if(!/\.?google\.protobuf\./.test(f.ref))throw Error("extended message "+f.ref+" is not defined")}f=null,g=null;}b=null,this.ptr=this.ptr.parent;}return this.resolved=!1,this.result=null,this},e["import"]=function(b,c){var e,g,h,i,j,k,l,m,d="/";if("string"==typeof c){if(a.Util.IS_NODE,this.files[c]===!0)return this.reset();this.files[c]=!0;}else if("object"==typeof c){if(e=c.root,a.Util.IS_NODE,(e.indexOf("\\")>=0||c.file.indexOf("\\")>=0)&&(d="\\"),g=e+d+c.file,this.files[g]===!0)return this.reset();this.files[g]=!0;}if(b.imports&&b.imports.length>0){for(i=!1,"object"==typeof c?(this.importRoot=c.root,i=!0,h=this.importRoot,c=c.file,(h.indexOf("\\")>=0||c.indexOf("\\")>=0)&&(d="\\")):"string"==typeof c?this.importRoot?h=this.importRoot:c.indexOf("/")>=0?(h=c.replace(/\/[^\/]*$/,""),""===h&&(h="/")):c.indexOf("\\")>=0?(h=c.replace(/\\[^\\]*$/,""),d="\\"):h=".":h=null,j=0;j= time) { + return this._serverEngine.getConversationStatus(time); + } else { + return utils.Defer.reject(); + } + }; + + _proto._set = function _set(list) { + var self = this; + + if (utils.isUndefined(list)) { + return; + } + + var time = self._timeStorage.get(STORAGE_CONVERSATION_STATUS.SUB_KEY.TIME) || 0; + var listCount = list.length; + utils.forEach(list, function (statusItem, index) { + var updatedTime = statusItem.updatedTime || 0; + time = updatedTime > time ? updatedTime : time; + + self._eventEmitter.emit(EventName.CHANGED, { + statusItem: statusItem, + isLastInAPull: index === listCount - 1 + }); + }); + + self._timeStorage.set(STORAGE_CONVERSATION_STATUS.SUB_KEY.TIME, time); + }; + + return ConversationStatusManager; + }(); + + var EventName$1 = { + CHANGED: 'conversationChanged' + }; + + var ConversationManager = function () { + function ConversationManager(option, serverEngine) { + this._selfUserId = void 0; + this._store = void 0; + this._eventEmitter = new utils.EventEmitter(); + this._statusManager = void 0; + this._allConversationList = []; + this._updatedConversations = {}; + var self = this; + var statusManager = new ConversationStatusManager(serverEngine); + statusManager.watchChanged(function (_ref) { + var statusItem = _ref.statusItem, + isLastInAPull = _ref.isLastInAPull; + + self._addStatus(statusItem, isLastInAPull); + }); + self._store = new ConversationStore(option); + self._selfUserId = option.userId; + self._statusManager = statusManager; + } + + var _proto = ConversationManager.prototype; + + _proto.watch = function watch(events) { + var conversation = events.conversation; + + this._eventEmitter.on(EventName$1.CHANGED, conversation); + }; + + _proto.addMessage = function addMessage(msgArgs) { + var self = this; + var message = msgArgs.message, + isLastInAPull = msgArgs.isLastInAPull, + type = message.type, + isPersited = message.isPersited, + isSaveConversationType = utils.isInclude(TYPE_HAS_CONVERSATION, type); + + if (!isSaveConversationType) { + return; + } + + var hasChanged = false; + + var storageConversation = self._store.get(message); + + var calcEvents = [self._setUnreadCount, self._setMentiondInfo]; + utils.forEach(calcEvents, function (event) { + var _event$call = event.call(self, message, storageConversation), + hasCalcChanged = _event$call.hasChanged, + conversation = _event$call.conversation; + + hasChanged = hasChanged || hasCalcChanged; + storageConversation = conversation; + }); + + if (hasChanged) { + self._store.set(message, storageConversation); + } + + if (isPersited) { + var conversation = self._getConversationByMessage(message); + + conversation.updatedItems = { + latestMessage: { + time: message.sentTime, + val: message + } + }; + + self._setUpdatedConversation(conversation); + } + + var isNeedNotifyUpdate = utils.isUndefined(isLastInAPull) ? true : isLastInAPull; + + if (isNeedNotifyUpdate) { + self._notifyConversationChanged(); + } + }; + + _proto.get = function get(option) { + var conversation = this._store.get(option); + + var notificationStatus = conversation.notificationStatus, + isNotDisturb = utils.isEqual(notificationStatus, NOTIFICATION_STATUS.DO_NOT_DISTURB); + + if (isNotDisturb) { + conversation.unreadMessageCount = 0; + } + + return conversation; + }; + + _proto.read = function read(option) { + var self = this, + type = option.type, + targetId = option.targetId, + _store = self._store, + _updatedConversations = self._updatedConversations, + key = common.getConversationKey(option), + updatedConversation = _updatedConversations[key] || {}; + var storeConversation = _store.get(option) || {}, + _storeConversation = storeConversation, + unreadMessageCount = _storeConversation.unreadMessageCount, + hasMentiond = _storeConversation.hasMentiond; + + if (unreadMessageCount || hasMentiond) { + var updatedTime = common.DelayTimer.getTime(); + var updatedValues = { + type: type, + targetId: targetId, + unreadMessageCount: 0, + hasMentiond: false, + mentiondInfo: null, + updatedItems: { + unreadMessageCount: { + time: updatedTime, + val: 0 + }, + hasMentiond: { + time: updatedTime, + val: false + }, + mentiondInfo: { + time: updatedTime, + val: null + } + } + }; + storeConversation = utils.extendAllowNull(storeConversation, updatedValues); + + _store.set(option, storeConversation); + + _updatedConversations[key] = utils.extendAllowNull(updatedConversation, updatedValues); + + self._notifyConversationChanged(); + } + }; + + _proto.getTotalUnreadCount = function getTotalUnreadCount() { + var _store = this._store, + conversationList = _store.getValues(); + + var totalCount = 0; + utils.forEach(conversationList, function (_ref2) { + var unreadMessageCount = _ref2.unreadMessageCount; + unreadMessageCount = utils.isNumber(unreadMessageCount) ? unreadMessageCount : 0; + totalCount += unreadMessageCount; + }); + return totalCount; + }; + + _proto.getUnreadCount = function getUnreadCount(option) { + var _store = this._store; + var storeConversation = _store.get(option) || {}; + var unreadMessageCount = storeConversation.unreadMessageCount; + var count = utils.isNumber(unreadMessageCount) ? unreadMessageCount : 0; + return count; + }; + + _proto.close = function close() { + this._statusManager.close(); + }; + + _proto._getConversationByMessage = function _getConversationByMessage(message) { + var type = message.type, + targetId = message.targetId, + storeConversation = this._store.get(message); + + var conversation = utils.extend(storeConversation, { + type: type, + targetId: targetId, + latestMessage: message + }); + return conversation; + }; + + _proto._getUpdatedConversationList = function _getUpdatedConversationList() { + var self = this, + updatedConversations = self._updatedConversations, + list = []; + utils.forEach(updatedConversations, function (conversation) { + var storageItems = self._store.get(conversation); + + utils.forEach(storageItems, function (val, key) { + conversation[key] = val; + }); + list.push(conversation); + }); + return common.sortConversationList(list); + }; + + _proto._setUnreadCount = function _setUnreadCount(message, conversation) { + var content = message.content, + messageType = message.messageType, + sentTime = message.sentTime, + isCounted = message.isCounted, + messageDirection = message.messageDirection, + senderUserId = message.senderUserId, + isSelfSend = utils.isEqual(messageDirection, MESSAGE_DIRECTION.SEND) || utils.isEqual(senderUserId, this._selfUserId), + isRecall = utils.isEqual(messageType, RECALL_MESSAGE_TYPE), + hasContent = utils.isObject(content); + var hasChanged = false; + var lastUnreadTime = conversation.lastUnreadTime || 0, + unreadMessageCount = conversation.unreadMessageCount || 0, + hasBeenAdded = lastUnreadTime > sentTime; + + if (hasBeenAdded || isSelfSend) { + return { + hasChanged: hasChanged, + conversation: conversation + }; + } + + if (isCounted) { + conversation.unreadMessageCount = unreadMessageCount + 1; + conversation.lastUnreadTime = sentTime; + hasChanged = true; + } + + if (isRecall && hasContent) { + var isNotRead = lastUnreadTime >= content.sentTime; + + if (isNotRead && unreadMessageCount) { + conversation.unreadMessageCount = unreadMessageCount - 1; + hasChanged = true; + } + } + + return { + hasChanged: hasChanged, + conversation: conversation + }; + }; + + _proto._setMentiondInfo = function _setMentiondInfo(message, conversation) { + var content = message.content, + messageDirection = message.messageDirection, + isMentiond = message.isMentiond, + isSelfSend = utils.isEqual(messageDirection, MESSAGE_DIRECTION.RECEIVE), + hasContent = utils.isObject(content); + var hasChanged = false; + + if (isSelfSend) ; else if (isMentiond && hasContent && content.mentionedInfo) { + conversation.hasMentiond = true; + conversation.mentiondInfo = content.mentionedInfo; + hasChanged = true; + } + + return { + hasChanged: hasChanged, + conversation: conversation + }; + }; + + _proto._setUpdatedConversation = function _setUpdatedConversation(conversation) { + if (utils.isObject(conversation) && conversation.targetId && conversation.type) { + var self = this, + cacheKey = common.getConversationKey(conversation), + cacheConversation = self._updatedConversations[cacheKey]; + self._updatedConversations[cacheKey] = utils.extendAllowNull(cacheConversation, conversation); + } + }; + + _proto._notifyConversationChanged = function _notifyConversationChanged() { + var self = this, + _eventEmitter = self._eventEmitter, + updatedConversationList = self._getUpdatedConversationList(); + + if (utils.isEmpty(updatedConversationList)) ; else { + utils.setTimeout(function () { + _eventEmitter.emit(EventName$1.CHANGED, { + updatedConversationList: updatedConversationList + }); + + self._updatedConversations = {}; + }, 0); + } + }; + + _proto._addStatus = function _addStatus(conversationStatus, isLastInAPull) { + var type = conversationStatus.type, + targetId = conversationStatus.targetId, + updatedTime = conversationStatus.updatedTime, + notificationStatus = conversationStatus.notificationStatus, + isTop = conversationStatus.isTop, + option = { + type: type, + targetId: targetId + }; + var updatedItems = {}; + + if (!utils.isUndefined(notificationStatus)) { + updatedItems['notificationStatus'] = { + time: updatedTime, + val: notificationStatus + }; + } + + if (!utils.isUndefined(isTop)) { + updatedItems['isTop'] = { + time: updatedTime, + val: isTop + }; + } + + this._setUpdatedConversation({ + type: type, + targetId: targetId, + updatedItems: updatedItems + }); + + this._store.set(option, { + notificationStatus: notificationStatus, + isTop: isTop + }); + + if (isLastInAPull) { + this._notifyConversationChanged(); + } + }; + + return ConversationManager; + }(); + + var MessageTimeSyner$1 = common.MessageTimeSyner, + ChatRoomMessageTimeSyner$1 = common.ChatRoomMessageTimeSyner; + var EVENT_NAME$1 = { + MESSAGE_RECEIVED: 'msg-received' + }; + + var MessagePullManager = function () { + function MessagePullManager(serverEngine, option) { + var _serverEngine$watch; + + this._serverEngine = void 0; + this._pullQueue = void 0; + this._messageTimeSyner = void 0; + this._chatRoomMessageTimeSyner = new ChatRoomMessageTimeSyner$1(); + this._eventEmitter = new utils.EventEmitter(); + this._pullMessageTimer = new utils.Timer({ + type: TIMER_TYPE.INTERVAL, + timeout: PULL_MSG_TIME + }); + this._sentMsgCacheInPulling = {}; + this._handleDirectMessage = void 0; + this._handleNotifyPull = void 0; + this._handleJoinChatRoom = void 0; + this._handleSendMessage = void 0; + var self = this; + var appkey = serverEngine.option.appkey, + userId = serverEngine._selfUserId; + var startSyncTime = option.startSyncTime; + var pullQueue = new PullQueueManager({ + event: this._pullEvent, + thisArg: this, + onFinished: function onFinished() {}, + onError: function onError() {} + }); + + self._handleDirectMessage = function (message) { + !pullQueue.isLoading && self.notifyMessage({ + message: message, + hasMore: false + }); + }; + + self._handleNotifyPull = function (option) { + pullQueue.pull(option); + }; + + self._handleJoinChatRoom = function (_ref) { + var id = _ref.id, + count = _ref.count; + + if (utils.isEqual(count, CHATROOM_NOT_PULL_MSG_COUNT)) { + self._chatRoomMessageTimeSyner.set(id, common.DelayTimer.getTime()); + } else { + var type = PULL_MSG_TYPE.CHATROOM, + time = 0, + chrmId = id; + + self._chatRoomMessageTimeSyner.set(id, time); + + pullQueue.pull({ + type: type, + time: time, + chrmId: chrmId, + count: count + }); + } + }; + + self._handleSendMessage = function (message) { + pullQueue.isLoading ? self._setSentMsgCacheInPulling(message) : self._setPullTime(message); + }; + + serverEngine.watch((_serverEngine$watch = {}, _serverEngine$watch[SERVER_EVENT_NAME.DIRECT_MSG] = self._handleDirectMessage, _serverEngine$watch[SERVER_EVENT_NAME.NOTIFY_PULL] = self._handleNotifyPull, _serverEngine$watch[SERVER_EVENT_NAME.JOIN_CHATROOM] = self._handleJoinChatRoom, _serverEngine$watch[SERVER_EVENT_NAME.MESSAGE_SEND] = self._handleSendMessage, _serverEngine$watch)); + self._serverEngine = serverEngine; + self._pullQueue = pullQueue; + self._messageTimeSyner = new MessageTimeSyner$1({ + appkey: appkey, + userId: userId, + startSyncTime: startSyncTime + }); + + self._pullMessageTimer.start(pullQueue.pull, { + thisArg: pullQueue + }); + + pullQueue.pull(); + } + + var _proto = MessagePullManager.prototype; + + _proto.watchMessage = function watchMessage(event) { + this._eventEmitter.on(EVENT_NAME$1.MESSAGE_RECEIVED, event); + }; + + _proto.notifyMessage = function notifyMessage(messageArgs) { + var message = messageArgs.message; + + this._setPullTime(message); + + this._eventEmitter.emit(EVENT_NAME$1.MESSAGE_RECEIVED, messageArgs); + }; + + _proto.close = function close() { + var _this$_serverEngine$u; + + this._pullMessageTimer.stop(); + + this._sentMsgCacheInPulling = {}; + + this._serverEngine.unwatch((_this$_serverEngine$u = {}, _this$_serverEngine$u[SERVER_EVENT_NAME.DIRECT_MSG] = this._handleDirectMessage, _this$_serverEngine$u[SERVER_EVENT_NAME.NOTIFY_PULL] = this._handleNotifyPull, _this$_serverEngine$u[SERVER_EVENT_NAME.JOIN_CHATROOM] = this._handleJoinChatRoom, _this$_serverEngine$u[SERVER_EVENT_NAME.MESSAGE_SEND] = this._handleSendMessage, _this$_serverEngine$u)); + }; + + _proto._pullEvent = function _pullEvent(option) { + option = option || {}; + + var self = this, + _serverEngine = self._serverEngine, + _messageTimeSyner = self._messageTimeSyner, + _chatRoomMessageTimeSyner = self._chatRoomMessageTimeSyner, + _option = option, + type = _option.type, + chrmId = _option.chrmId, + serverPullTime = _option.time, + count = _option.count, + isPullChrmMsg = utils.isEqual(type, PULL_MSG_TYPE.CHATROOM), + msgSyncTime = _messageTimeSyner.get(), + currentReceiveTime = isPullChrmMsg ? _chatRoomMessageTimeSyner.get(chrmId) : msgSyncTime.inboxTime, + syncTime = utils.copy(msgSyncTime); + + if (serverPullTime && serverPullTime < currentReceiveTime) { + return utils.Defer.resolve(); + } + + var onMessage = function onMessage(_ref2) { + var message = _ref2.message, + finished = _ref2.finished, + isLastInAPull = _ref2.isLastInAPull; + + self._displatchMessages({ + message: message, + finished: finished, + isPullChrmMsg: isPullChrmMsg, + isLastInAPull: isLastInAPull, + normalSyncTime: syncTime, + chatRoomReceiveTime: currentReceiveTime + }); + }; + + if (isPullChrmMsg) { + return _serverEngine.pullChrmMessageList(chrmId, currentReceiveTime, count, { + onMessage: onMessage + }); + } else { + return _serverEngine.pullMessageList(syncTime, { + onMessage: onMessage + }); + } + }; + + _proto._displatchMessages = function _displatchMessages(option) { + var self = this, + message = option.message, + finished = option.finished, + isPullChrmMsg = option.isPullChrmMsg, + isLastInAPull = option.isLastInAPull, + _ref3 = option.normalSyncTime || {}, + inboxTime = _ref3.inboxTime, + sendboxTime = _ref3.sendboxTime, + sentTime = message.sentTime, + messageDirection = message.messageDirection, + messageUId = message.messageUId, + isSelfSend = messageDirection === MESSAGE_DIRECTION.SEND, + pullTime = isSelfSend ? sendboxTime : inboxTime; + + if (sentTime <= pullTime && !isPullChrmMsg) { + return; + } + + if (self._sentMsgCacheInPulling[messageUId]) { + return; + } + + self.notifyMessage({ + message: message, + hasMore: !finished, + isLastInAPull: isLastInAPull + }); + }; + + _proto._setPullTime = function _setPullTime(message) { + var isChatRoom = message.type === CONVERSATION_TYPE.CHATROOM; + isChatRoom ? this._chatRoomMessageTimeSyner.setByMessage(message) : this._messageTimeSyner.setByMessage(message); + }; + + _proto._setSentMsgCacheInPulling = function _setSentMsgCacheInPulling(message) { + var messageUId = message.messageUId; + + if (utils.isUndefined(messageUId)) { + return; + } + + this._sentMsgCacheInPulling[messageUId] = message; + }; + + _proto._consumeSentMsgCacheInPulling = function _consumeSentMsgCacheInPulling() { + var self = this; + var _sentMsgCacheInPulling = self._sentMsgCacheInPulling; + utils.forEach(_sentMsgCacheInPulling, function (message) { + self._setPullTime(message); + }); + self._sentMsgCacheInPulling = {}; + }; + + return MessagePullManager; + }(); + + var ChatRoomKVStore = function () { + function ChatRoomKVStore(chrmId, currentUserId) { + this._chatRoomId = void 0; + this._kvCaches = {}; + this._currentUserId = void 0; + this._chatRoomId = chrmId; + this._currentUserId = currentUserId; + } + + var _proto = ChatRoomKVStore.prototype; + + _proto.setEntries = function setEntries(data) { + data = data || {}; + var self = this; + var _data = data, + kvList = _data.kvEntries, + isFullUpdate = _data.isFullUpdate; + kvList = kvList || []; + isFullUpdate = isFullUpdate || false; + isFullUpdate && self.clear(); + utils.forEach(kvList, function (kv) { + self.setEntry(kv, { + isFullUpdate: isFullUpdate + }); + }); + }; + + _proto.setEntry = function setEntry(kv, option) { + option = option || {}; + var _option = option, + isFullUpdate = _option.isFullUpdate, + key = kv.key, + type = kv.type, + isOverwrite = kv.isOverwrite, + userId = kv.userId, + latestUserId = this.getSetUserId(key), + isDeleteOpt = utils.isEqual(type, CHATROOM_ENTRY_TYPE.DELETE), + isSameAtLastSetUser = utils.isEqual(latestUserId, userId), + isKeyNotExist = !this.isExisted(key); + var event = isDeleteOpt ? this.remove : this.add; + + if (isFullUpdate) { + event.call(this, kv); + } else if (isOverwrite || isSameAtLastSetUser || isKeyNotExist) { + event.call(this, kv); + } + }; + + _proto.add = function add(kv) { + var key = kv.key; + kv.isDeleted = false; + this._kvCaches[key] = kv; + }; + + _proto.remove = function remove(kv) { + var key = kv.key; + var cacheKV = this.get(key) || {}; + cacheKV.isDeleted = true; + this._kvCaches[key] = cacheKV; + }; + + _proto.clear = function clear() { + this._kvCaches = {}; + }; + + _proto.get = function get(key) { + return this._kvCaches[key]; + }; + + _proto.getSetUserId = function getSetUserId(key) { + var cache = this.get(key) || {}; + return cache.userId; + }; + + _proto.getValue = function getValue(key) { + var kv = this._kvCaches[key] || {}; + var isDeleted = kv.isDeleted; + return isDeleted ? null : kv.value; + }; + + _proto.getAll = function getAll() { + var kvEntries = {}; + utils.forEach(this._kvCaches, function (kv, key) { + if (!kv.isDeleted) { + kvEntries[key] = kv.value; + } + }); + return kvEntries; + }; + + _proto.getUpdatedTime = function getUpdatedTime() { + var maxTime = 0; + utils.forEach(this._kvCaches, function (entry) { + var timestamp = entry.timestamp || 0; + + if (maxTime < timestamp) { + maxTime = timestamp; + } + }); + return maxTime; + }; + + _proto.isExisted = function isExisted(key) { + var cache = this.get(key) || {}; + var value = cache.value, + isDeletedOnLatestOperate = cache.isDeleted; + return value && !isDeletedOnLatestOperate; + }; + + return ChatRoomKVStore; + }(); + + var storeCaches = {}; + + var get = function get(chrmId) { + return storeCaches[chrmId]; + }; + + var set$1 = function set(chrmId, data, currentUserId) { + var kvStore = get(chrmId); + + if (utils.isEmpty(kvStore)) { + kvStore = new ChatRoomKVStore(chrmId, currentUserId); + } + + kvStore.setEntries(data); + storeCaches[chrmId] = kvStore; + }; + + var getValue = function getValue(chrmId, key) { + var kvStore = get(chrmId); + var value = kvStore ? kvStore.getValue(key) : null; + return value; + }; + + var getAll = function getAll(chrmId) { + var kvStore = get(chrmId); + var kvs = {}; + + if (kvStore) { + kvs = kvStore.getAll(); + } + + return kvs; + }; + + var clear = function clear(chrmId) { + var kvStore = get(chrmId) || {}; + kvStore.clear && kvStore.clear(); + }; + + var ChatRoomKVStore$1 = { + get: get, + set: set$1, + getValue: getValue, + getAll: getAll, + clear: clear + }; + + var PullTimeCache = { + _caches: {}, + set: function set(chrmId, time) { + PullTimeCache._caches[chrmId] = time; + }, + get: function get(chrmId) { + return PullTimeCache._caches[chrmId] || 0; + }, + clear: function clear(chrmId) { + PullTimeCache._caches[chrmId] = 0; + } + }; + + var ChatRoomKVManager = function () { + function ChatRoomKVManager(serverEngine) { + var _serverEngine$watch; + + this._serverEngine = void 0; + this._pullQueue = void 0; + this._handleChrmKVSet = void 0; + this._handleChrmKVChanged = void 0; + this._handleBeforeJoinChrm = void 0; + var self = this; + var userId = serverEngine._selfUserId; + var pullQueue = new PullQueueManager({ + event: this._pullEvent, + thisArg: this, + onFinished: function onFinished(data, option) { + if (!data || !option.chrmId) { + return; + } + + var chrmId = option.chrmId; + + if (data.isFullUpdate) { + self._reset(chrmId); + } + + Logger.info(TAG.L_PULL_CHRM_KV_R, { + data: data, + option: option + }); + ChatRoomKVStore$1.set(chrmId, data, userId); + PullTimeCache.set(chrmId, data.syncTime || 0); + } + }); + + self._handleChrmKVSet = function (_ref) { + var id = _ref.id, + data = _ref.data; + ChatRoomKVStore$1.set(id, data, userId); + }; + + self._handleChrmKVChanged = function (data) { + self.pull(data); + }; + + self._handleBeforeJoinChrm = function (_ref2) { + var id = _ref2.id; + + self._reset(id); + }; + + serverEngine.watch((_serverEngine$watch = {}, _serverEngine$watch[SERVER_EVENT_NAME.CHRM_KV_SET] = self._handleChrmKVSet, _serverEngine$watch[SERVER_EVENT_NAME.CHRM_KV_CHANGED] = self._handleChrmKVChanged, _serverEngine$watch[SERVER_EVENT_NAME.BEFORE_JOIN_CHATROOM] = self._handleBeforeJoinChrm, _serverEngine$watch)); + this._serverEngine = serverEngine; + this._pullQueue = pullQueue; + } + + var _proto = ChatRoomKVManager.prototype; + + _proto._reset = function _reset(chrmId) { + ChatRoomKVStore$1.clear(chrmId); + PullTimeCache.clear(chrmId); + }; + + _proto._pullEvent = function _pullEvent(data) { + var time = data.time, + chrmId = data.chrmId, + currentTime = PullTimeCache.get(chrmId), + isUpdated = currentTime > time; + Logger.info(TAG.L_PULL_CHRM_KV_T, { + currentTime: currentTime, + serverTime: time, + isUpdated: isUpdated, + data: data + }); + + if (isUpdated) { + Logger.info(TAG.L_PULL_CHRM_KV_R, { + info: 'kv is updated. not pull again' + }); + return utils.Defer.resolve(); + } + + return this._serverEngine.pullChatRoomKV({ + id: chrmId + }, currentTime); + }; + + _proto.pull = function pull(data) { + this._pullQueue.pull(data); + }; + + _proto.getValue = function getValue(chrmId, key) { + return ChatRoomKVStore$1.getValue(chrmId, key); + }; + + _proto.getAll = function getAll(chrmId) { + return ChatRoomKVStore$1.getAll(chrmId); + }; + + _proto.close = function close() { + var _self$_serverEngine$u; + + var self = this; + + self._serverEngine.unwatch((_self$_serverEngine$u = {}, _self$_serverEngine$u[SERVER_EVENT_NAME.CHRM_KV_SET] = self._handleChrmKVSet, _self$_serverEngine$u[SERVER_EVENT_NAME.CHRM_KV_CHANGED] = self._handleChrmKVChanged, _self$_serverEngine$u[SERVER_EVENT_NAME.BEFORE_JOIN_CHATROOM] = self._handleBeforeJoinChrm, _self$_serverEngine$u)); + }; + + return ChatRoomKVManager; + }(); + + var SettingStore = function () { + function SettingStore(appkey, userId) { + this._storage = void 0; + var storageKey = utils.tplEngine(STORAGE_USER_SETTING.ROOT_KEY_TPL, { + appkey: appkey, + userId: userId + }); + this._storage = new common.RCStorage(storageKey); + } + + var _proto = SettingStore.prototype; + + _proto.set = function set(serverData) { + var self = this, + _storage = self._storage, + settings = serverData.settings, + oldSettingItems = _storage.get(STORAGE_USER_SETTING.SUB_KEY.SETTINGS) || {}; + var newSettingItems = oldSettingItems, + isChanged = false; + utils.forEach(settings, function (newSetting, key) { + newSetting = newSetting || {}; + var oldSetting = oldSettingItems[key] || {}, + _newSetting = newSetting, + newVersion = _newSetting.version, + status = _newSetting.status, + newValue = _newSetting.value, + oldGlobalVersion = _storage.get(STORAGE_USER_SETTING.SUB_KEY.VERSION) || 0, + isNeedUpdateItem = newVersion > (oldSetting.version || 0), + isNeedUpdateVersion = newVersion > oldGlobalVersion; + + if (!isNeedUpdateItem) { + return; + } + + isChanged = true; + + switch (status) { + case USER_SETTING_STATUS.ADD: + case USER_SETTING_STATUS.UPDATE: + newSettingItems[key] = { + value: newValue, + version: newVersion + }; + break; + + case USER_SETTING_STATUS.DELETE: + delete newSettingItems[key]; + break; + + default: + } + + if (isNeedUpdateVersion) { + _storage.set(STORAGE_USER_SETTING.SUB_KEY.VERSION, newVersion); + } + }); + + if (!isChanged) { + return; + } + + if (utils.isEmpty(newSettingItems)) { + _storage.remove(STORAGE_USER_SETTING.SUB_KEY.SETTINGS); + } else { + _storage.set(STORAGE_USER_SETTING.SUB_KEY.SETTINGS, newSettingItems); + } + }; + + _proto.getSetting = function getSetting() { + var settings = this._storage.get(STORAGE_USER_SETTING.SUB_KEY.SETTINGS) || {}; + return utils.map(settings, function (set) { + set = set || {}; + return set.value; + }); + }; + + _proto.getVersion = function getVersion() { + return this._storage.get(STORAGE_USER_SETTING.SUB_KEY.VERSION) || 0; + }; + + return SettingStore; + }(); + + var EventNames = { + CHANGED: 'change' + }; + + var SettingManager = function () { + function SettingManager(serverEngine, option) { + var _serverEngine$watch; + + this._serverEngine = void 0; + this._settingStore = void 0; + this._pullQueue = void 0; + this._eventEmitter = new utils.EventEmitter(); + this._handleNotifySettingChanged = void 0; + var self = this, + appkey = option.appkey, + userId = option.userId, + isAutoPull = option.isAutoPull, + settingStore = new SettingStore(appkey, userId), + localVersion = settingStore.getVersion() || 0; + var pullQueue = new PullQueueManager({ + event: serverEngine.getUserSettings, + thisArg: serverEngine, + onFinished: function onFinished(serverData) { + if (serverData && serverData.version) { + self._settingStore.set(serverData); + + self._eventEmitter.emit(EventNames.CHANGED, self.get()); + } + } + }); + + self._handleNotifySettingChanged = function (notifyData) { + var version = notifyData.version, + localVersion = self._settingStore.getVersion(); + + if (version >= localVersion) { + pullQueue.pull(localVersion); + } + }; + + self._settingStore = new SettingStore(appkey, userId); + self._pullQueue = pullQueue; + self._serverEngine = serverEngine; + serverEngine.watch((_serverEngine$watch = {}, _serverEngine$watch[SERVER_EVENT_NAME.USER_SETTING_CHANGED] = self._handleNotifySettingChanged, _serverEngine$watch)); + isAutoPull && pullQueue.pull(localVersion); + } + + var _proto = SettingManager.prototype; + + _proto.watchSettingChanged = function watchSettingChanged(event) { + this._eventEmitter.on(EventNames.CHANGED, event); + }; + + _proto.get = function get() { + return this._settingStore.getSetting() || {}; + }; + + _proto.close = function close() { + var _this$_serverEngine$u; + + this._serverEngine.unwatch((_this$_serverEngine$u = {}, _this$_serverEngine$u[SERVER_EVENT_NAME.USER_SETTING_CHANGED] = self._handleNotifySettingChanged, _this$_serverEngine$u)); + }; + + return SettingManager; + }(); + + var WebIMEngine = function () { + function WebIMEngine(option) { + this._option = void 0; + this._user = void 0; + this._naviManager = void 0; + this._cmpManager = new CMPManager(); + this._conversationManager = void 0; + this._messageManager = void 0; + this._chatRoomKVManager = void 0; + this._userSettingManager = void 0; + this._serverEngine = void 0; + this._imEventEmitter = new utils.EventEmitter(); + this._connectionStatus = CONNECTION_STATUS.DISCONNECTED; + this._connectedDomain = void 0; + this._networkDetecter = void 0; + var self = this; + var detect = option.detect; + var serverEngine = new ServerEngine(option); + serverEngine.watch({ + status: function status(_status) { + self._handleConnectionStatus(_status); + } + }); + this._serverEngine = serverEngine; + this._option = option; + this._networkDetecter = new utils.NetworkDetecter(detect); + utils.forEach(ServerEngine.prototype, function (event, eventName) { + var server = serverEngine, + web = self; + var selfEvent = web[eventName], + serverEvent = server[eventName]; + + if (!selfEvent && serverEvent && utils.isFunction(serverEvent)) { + web[eventName] = function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return serverEvent.call.apply(serverEvent, [server].concat(args)); + }; + } + }); + } + + var _proto = WebIMEngine.prototype; + + _proto._notifyMessage = function _notifyMessage(event) { + var self = this; + var message = event.message; + var _serverEngine = self._serverEngine; + + var connectedTime = _serverEngine.getConnectedTime(); + + if (common.isLogCommandMsg(message)) { + var content = message.content; + Logger.uploadFull(0, content, connectedTime); + return; + } + + this._conversationManager.addMessage(event); + + this._imEventEmitter.emit(IM_EVENT.MESSAGE, event); + }; + + _proto._handleConnectionStatus = function _handleConnectionStatus(status) { + var _cmpManager = this._cmpManager, + _naviManager = this._naviManager, + _connectedDomain = this._connectedDomain; + var isNeedUpdateCMPList = utils.isInclude(TRANSPORTER_STATUS_NEED_UPDATE_CMP, status); + var isNeedReconnect = utils.isInclude(TRANSPORTER_STATUS_NEED_RECONNECT, status); + + if (isNeedUpdateCMPList) { + _cmpManager.addInvalid(_connectedDomain); + + if (_cmpManager.isAllInvalid()) { + _naviManager.clear(); + + _cmpManager.clearInvalid(); + } + } + + if (isNeedReconnect) { + this.disconnect(); + this.reconnect(); + } + + var connectionStatus = TRANSPORTER_STATUS_TO_CONNECTION_STATUS[status] || status; + this._connectionStatus = connectionStatus; + + this._imEventEmitter.emit(IM_EVENT.STATUS, { + status: connectionStatus + }); + }; + + _proto._handleConnectError = function _handleConnectError(errorInfo) { + var _user = this._user; + var code = errorInfo.code || errorInfo.status; + this.disconnect(); + + if (code === ERROR_INFO.CONN_REDIRECTED.code) { + this._naviManager.clear(); + + return this.connect(_user); + } + + this._connectionStatus = CONNECTION_STATUS.DISCONNECTED; + return utils.Defer.reject(errorInfo); + }; + + _proto._afterConnect = function _afterConnect(connectUser, syncTime) { + var self = this, + _serverEngine = self._serverEngine, + appkey = self._option.appkey, + _imEventEmitter = self._imEventEmitter, + _naviManager = self._naviManager, + id = connectUser.id, + localNavi = _naviManager.getLocalConfig() || {}; + Logger.setOption({ + userId: id + }); + self._user.id = id; + var conversationManager = new ConversationManager({ + appkey: appkey, + userId: id + }, _serverEngine); + conversationManager.watch({ + conversation: function conversation(_ref) { + var updatedConversationList = _ref.updatedConversationList; + + _imEventEmitter.emit(IM_EVENT.CONVERSATION, { + updatedConversationList: updatedConversationList + }); + } + }); + self._conversationManager = conversationManager; + var messageManager = new MessagePullManager(_serverEngine, { + startSyncTime: syncTime + }); + messageManager.watchMessage(function (event) { + self._notifyMessage(event); + }); + self._messageManager = messageManager; + self._chatRoomKVManager = new ChatRoomKVManager(_serverEngine); + var isAutoPull = !!Number(localNavi.openUS); + var userSettingManager = new SettingManager(_serverEngine, { + appkey: appkey, + userId: id, + isAutoPull: isAutoPull + }); + userSettingManager.watchSettingChanged(function (config) { + config = config || {}; + var _config = config, + voipCallInfo = _config.VoipInfo; + + _naviManager.setLocalConfig({ + voipCallInfo: utils.toJSON(voipCallInfo) + }); + + self._imEventEmitter.emit(IM_EVENT.SETTING, config); + }); + self._userSettingManager = userSettingManager; + }; + + _proto.watch = function watch(watchers) { + var _events; + + var statusWatcher = watchers.status, + messageWatcher = watchers.message, + conversationWatcher = watchers.conversation; + var self = this; + var events = (_events = {}, _events[IM_EVENT.STATUS] = statusWatcher, _events[IM_EVENT.MESSAGE] = messageWatcher, _events[IM_EVENT.CONVERSATION] = conversationWatcher, _events); + utils.forEach(events, function (event, eventName) { + utils.isFunction(event) && self._imEventEmitter.on(eventName, event); + }); + }; + + _proto.unwatch = function unwatch(watchers) { + var _imEventEmitter = this._imEventEmitter; + var offEventNameObj = { + status: 'IM_EVENT.STATUS', + message: 'IM_EVENT.MESSAGE', + conversation: 'IM_EVENT.CONVERSATION' + }; + + if (watchers) { + utils.forEach(watchers, function (val, key) { + if (offEventNameObj[key]) { + _imEventEmitter.off(key, val); + } + }); + } else { + _imEventEmitter.clear(); + } + }; + + _proto.getConnectionStatus = function getConnectionStatus() { + return this._connectionStatus; + }; + + _proto.getConnectionUserId = function getConnectionUserId() { + var user = this._user || {}; + return user.id; + }; + + _proto.getAppInfo = function getAppInfo() { + var _option = this._option, + _naviManager = this._naviManager, + _userSettingManager = this._userSettingManager; + return utils.extendInShallow(_option, { + navi: _naviManager.getLocalConfig(), + serverConfig: _userSettingManager ? _userSettingManager.get() : {} + }); + }; + + _proto.connect = function connect(user) { + Logger.startRealtimeUpload(); + var self = this; + var _option = self._option, + _serverEngine = self._serverEngine, + _cmpManager = self._cmpManager; + var naviOpt = common.getNavReqOption(_option, user); + var naviManager = new NaviManager(naviOpt); + var getServerConfig = _option.isOldServer ? _serverEngine.getOldServerConfig : _serverEngine.getServerConfig; + + self._handleConnectionStatus(CONNECTION_STATUS.CONNECTING); + + self._user = utils.copy(user); + self._naviManager = naviManager; + var connectUser; + return naviManager.get().then(function (configForNavi) { + var cmpDomainList = common.getCMPDomainList(configForNavi, _option); + Logger.setServerOption(configForNavi); + + _cmpManager.setDomainList(cmpDomainList); + + return _cmpManager.getFaster(); + }).then(function (_ref2) { + var domain = _ref2.domain; + self._connectedDomain = domain; + return _serverEngine.connect(user, { + domain: domain + }); + }).then(function (user) { + connectUser = user; + return getServerConfig.call(_serverEngine, user.id); + }).then(function (serverConfig) { + self._afterConnect(connectUser, serverConfig); + + return connectUser; + })["catch"](function (error) { + return self._handleConnectError(error); + }); + }; + + _proto.reconnect = function reconnect() { + var self = this; + var _user = self._user; + + if (utils.isUndefined(_user)) { + return utils.Defer.reject(ERROR_INFO.NOT_CONNECTED); + } + + return self._networkDetecter.start().then(function () { + return self.connect(_user); + }); + }; + + _proto.disconnect = function disconnect(isNotify) { + isNotify && this._handleConnectionStatus(CONNECTION_STATUS.DISCONNECTED); + this._networkDetecter && this._networkDetecter.stop(); + this._messageManager && this._messageManager.close(); + this._chatRoomKVManager && this._chatRoomKVManager.close(); + this._userSettingManager && this._userSettingManager.close(); + this._conversationManager && this._conversationManager.close(); + return this._serverEngine.disconnect(); + }; + + _proto.changeUser = function changeUser(user) { + this.disconnect(true); + return this.connect(user); + }; + + _proto.sendMessage = function sendMessage(conversation, option) { + var self = this; + return self._serverEngine.sendMessage(conversation, option).then(function (message) { + self._conversationManager.addMessage({ + message: message, + hasMore: false + }); + + return message; + }); + }; + + _proto.recallMessage = function recallMessage(conversation, message, option) { + var self = this; + return self._serverEngine.recallMessage(conversation, message, option).then(function (message) { + self._conversationManager.addMessage({ + message: message, + hasMore: false + }); + + return message; + }); + }; + + _proto.getConversationList = function getConversationList(option) { + var isOldServer = this._option.isOldServer, + _serverEngine = this._serverEngine, + _conversationManager = this._conversationManager; + var func = isOldServer ? _serverEngine.getOldConversationList : _serverEngine.getConversationList; + return func.call(_serverEngine, option, { + afterDecode: function afterDecode(conversation) { + var localConversation = _conversationManager.get(conversation); + + conversation = utils.extendAllowNull(conversation, localConversation); + return conversation; + } + }).then(function (list) { + return common.sortConList(list); + }); + }; + + _proto.getLocalConversation = function getLocalConversation(conversation) { + var local = this._conversationManager.get(conversation); + + return { + unreadMessageCount: local.unreadMessageCount || 0, + hasMentiond: local.hasMentiond || false, + mentiondInfo: local.mentiondInfo + }; + }; + + _proto.removeConversation = function removeConversation(conversation) { + var isOldServer = this._option.isOldServer, + _serverEngine = this._serverEngine; + var func = isOldServer ? _serverEngine.removeOldConversation : _serverEngine.removeConversation; + return func.call(_serverEngine, conversation); + }; + + _proto.getTotalUnreadCount = function getTotalUnreadCount() { + var isOldServer = this._option.isOldServer, + _serverEngine = this._serverEngine; + + if (isOldServer) { + var totalCount = this._conversationManager.getTotalUnreadCount(); + + return utils.Defer.resolve(totalCount); + } else { + return _serverEngine.getTotalUnreadCount(); + } + }; + + _proto.getUnreadCount = function getUnreadCount(conversation) { + var isOldServer = this._option.isOldServer; + + if (isOldServer) { + var count = this._conversationManager.getUnreadCount(conversation); + + return utils.Defer.resolve(count); + } + }; + + _proto.clearUnreadCount = function clearUnreadCount(conversation, option) { + var isOldServer = this._option.isOldServer, + _serverEngine = this._serverEngine; + + if (isOldServer) { + this._conversationManager.read(conversation); + + return utils.Defer.resolve(); + } else { + return _serverEngine.clearUnreadCount(conversation, option); + } + }; + + _proto.joinChatRoom = function joinChatRoom(chrm, option) { + var self = this; + var _serverEngine = self._serverEngine, + _naviManager = self._naviManager, + _chatRoomKVManager = self._chatRoomKVManager; + return _serverEngine.joinChatRoom(chrm, option).then(function () { + return _naviManager.get(); + }).then(function (configForNavi) { + var isOpenKVStorageService = configForNavi.kvStorage; + var initialTime = 0; + return isOpenKVStorageService ? _chatRoomKVManager.pull({ + time: initialTime, + chrmId: chrm.id + }) : utils.Defer.resolve(); + }); + }; + + _proto.setChatRoomKV = function setChatRoomKV(chrm, entry) { + var self = this; + utils.extend(entry, { + type: CHATROOM_ENTRY_TYPE.UPDATE, + userId: self._user.id + }); + entry.type = CHATROOM_ENTRY_TYPE.UPDATE; + return self._serverEngine.modifyChatRoomKV(chrm, entry); + }; + + _proto.forceSetChatRoomKV = function forceSetChatRoomKV(chrm, entry) { + entry.isOverwrite = true; + return this.setChatRoomKV(chrm, entry); + }; + + _proto.removeChatRoomKV = function removeChatRoomKV(chrm, entry) { + var self = this; + utils.extend(entry, { + type: CHATROOM_ENTRY_TYPE.DELETE, + userId: self._user.id + }); + return self._serverEngine.modifyChatRoomKV(chrm, entry); + }; + + _proto.forceRemoveChatRoomKV = function forceRemoveChatRoomKV(chrm, entry) { + entry.isOverwrite = true; + return this.removeChatRoomKV(chrm, entry); + }; + + _proto.getChatRoomKV = function getChatRoomKV(chrm, key) { + var value = this._chatRoomKVManager.getValue(chrm.id, key); + + if (utils.isEmpty(value)) { + return utils.Defer.reject(ERROR_INFO.CHATROOM_KEY_NOT_EXIST); + } else { + return utils.Defer.resolve(value); + } + }; + + _proto.getAllChatRoomKV = function getAllChatRoomKV(chrm) { + var kvs = this._chatRoomKVManager.getAll(chrm.id); + + return utils.Defer.resolve(kvs); + }; + + _proto.getFileToken = function getFileToken(fileType, originName) { + var self = this; + var fileName = common.genUploadFileName(fileType, originName); + var uploadDomains = common.getUploadFileDomains(self._naviManager.getLocalConfig()); + return self._serverEngine.getFileToken(fileType, fileName).then(function (data) { + return utils.extendInShallow(uploadDomains, data); + }); + }; + + _proto.getFileUrl = function getFileUrl(fileType, fileName, originName, uploadResp) { + var self = this; + uploadResp = uploadResp || {}; + + if (uploadResp.isBosRes) { + return utils.Defer.resolve(uploadResp); + } + + return self._serverEngine.getFileUrl(fileType, fileName, originName); + }; + + return WebIMEngine; + }(); + + var Engine = (function (imArg) { + return new WebIMEngine(imArg); + }); + + var execEngineByEvent = function execEngineByEvent(params, engine) { + var eventName = params.event, + args = params.args; + args = args || []; + + var engineEvent = engine[eventName] || function () { + return utils.Defer.reject(ERROR_INFO.SDK_INTERNAL_ERROR); + }; + + return engineEvent.apply(engine, args); + }; + + var EngineDispatcher = function () { + function EngineDispatcher(option) { + this._engine = void 0; + this._engine = new Engine(option); + } + + var _proto = EngineDispatcher.prototype; + + _proto._isEventNeedConnect = function _isEventNeedConnect(eventName) { + var engine = this._engine, + connectionStatus = engine.getConnectionStatus(), + isNotConnected = connectionStatus !== CONNECTION_STATUS.CONNECTED, + isEventNeedConnected = utils.isInclude(ENGINE_EVENT_NEED_CONNECTED, eventName); + return isNotConnected && isEventNeedConnected; + }; + + _proto._isEventNeedDisconnect = function _isEventNeedDisconnect(eventName) { + var engine = this._engine, + connectionStatus = engine.getConnectionStatus(), + isConnecting = common.isConnected(connectionStatus) || common.isConnecting(connectionStatus), + isEventNeedDisconnected = utils.isInclude(ENGINE_EVENT_NEED_DISCONNECTED, eventName); + return isConnecting && isEventNeedDisconnected; + }; + + _proto._exec = function _exec(params) { + var event = params.event; + var engine = this._engine; + + if (this._isEventNeedConnect(event)) { + return utils.Defer.reject(ERROR_INFO.NOT_CONNECTED); + } + + if (this._isEventNeedDisconnect(event)) { + return utils.Defer.reject(ERROR_INFO.RC_CONNECTION_EXIST); + } + + var execResult = execEngineByEvent(params, engine); + return utils.isPromise(execResult) ? execResult["catch"](function (error) { + var errorCode = error.status || error.code || error; + var msg = utils.isObject(error) ? error.msg : null; + var errorInfo = ERROR_CODE_TO_INFO[errorCode] || { + code: errorCode + }; + + if (msg) { + errorInfo.msg = msg; + } + + var isValidErrorCode = utils.isNumberData(errorCode); + + if (!isValidErrorCode) { + if (utils.isStackError(error)) { + error = error.stack.toString(); + } + + Logger.fatal(TAG.L_CRASH_F, { + content: { + desc: 'SDK Error', + error: error + } + }); + errorInfo = utils.extendInShallow(ERROR_INFO.SDK_INTERNAL_ERROR, { + error: error + }); + } + + return utils.Defer.reject(errorInfo); + }) : execResult; + }; + + _proto.exec = function exec(params) { + var event = params.event; + + var LOG_TAG = APP_ENGINE_EVENT_LOG_TAG[event], + isNeedLog = !utils.isEmpty(LOG_TAG), + _ref = LOG_TAG || {}, + reqLogTag = _ref.req, + respLogTag = _ref.resp; + + isNeedLog && Logger.info(reqLogTag, params); + + var execResult = this._exec(params); + + if (utils.isPromise(execResult)) { + return execResult.then(function (result) { + isNeedLog && Logger.info(respLogTag, result); + return result; + })["catch"](function (error) { + isNeedLog && Logger.error(respLogTag, error); + return utils.Defer.reject(error); + }); + } else { + isNeedLog && Logger.info(respLogTag, execResult); + return execResult; + } + }; + + return EngineDispatcher; + }(); + + var Type = function Type(name, validator, options) { + options = options || {}; + var self = this; + self.validate = validator; + self.name = name; + self.errorInfo = options.errorInfo; + + self.canBeNull = function () { + self.validate = function (data) { + return utils.isUndefined(data) || utils.isNull(data) || validator(data); + }; + + return self; + }; + }; + + Type.isType = function (type) { + return type instanceof Type; + }; + + Type.String = new Type('String', utils.isString); + Type.Number = new Type('Number', utils.isNumber); + Type.Boolean = new Type('Boolean', utils.isBoolean); + Type.Function = new Type('Function', utils.isFunction); + Type.Object = new Type('Object', utils.isObject); + Type.Array = new Type('Array', utils.isArray); + Type.NotAllUndefined = new Type('AllUndefined', function (obj) { + if (utils.isObject(obj) || utils.isArray(obj)) { + var isNotUndefined = false; + utils.forEach(obj, function (val) { + if (!utils.isUndefined(val)) { + isNotUndefined = true; + } + }); + return isNotUndefined; + } else { + return !utils.isUndefined(obj); + } + }); + var conversationType = common.getConversationTypeList().join('、'); + Type.ConversationType = new Type(conversationType, common.isValidConversationType, { + errorInfo: 'Not all settings are empty' + }); + Type.ChatRoomEntryKey = new Type('ChatRoomEntryKey', common.isValidChatRoomKey, { + errorInfo: 'ChatRoom Key length must be 1 - 128, Only letters、numbers、+、=、-、_ are supported' + }); + Type.ChatRoomEntryValue = new Type('ChatRoomEntryValue', common.isValidChatRoomValue, { + errorInfo: 'ChatRoom Value length must be 1 - 4096' + }); + + var Struct = function () { + function Struct(structure, funcName, paths) { + if (paths === void 0) { + paths = []; + } + + if (!(this instanceof Struct)) { + return new Struct(structure, funcName, paths); + } + + var self = this; + self.structure = structure; + self.paths = paths; + self.funcName = funcName; + + if (Type.isType(structure)) { + self.validate = self._validateType; + } else if (utils.isArray(structure)) { + self.validate = self._validateArray; + } else if (utils.isObject(structure)) { + self.validate = self._validateObject; + } else { + self.validate = self._validateOther; + } + } + + var _proto = Struct.prototype; + + _proto._validateType = function _validateType(data) { + var structure = this.structure; + var isValid = structure.validate(data); + return isValid ? this._getSuccess() : this._getError(data); + }; + + _proto._validateArray = function _validateArray(data) { + var structure = this.structure; + + if (utils.isEmpty(structure)) { + return this._getSuccess(); + } + + if (!utils.isArray(data)) { + return this._getError(data); + } + + var typer = structure[0]; + + for (var filed in data) { + var val = data[filed]; + + var result = this._validateField(typer, filed, val); + + if (result.isError) { + return result; + } + } + + return this._getSuccess(); + }; + + _proto._validateObject = function _validateObject(data) { + var structure = this.structure, + paths = this.paths; + data = data || {}; + + if (utils.isEmpty(structure)) { + return this._getSuccess(); + } + + if (!utils.isObject(data)) { + return this._getError(data); + } + + var checkedField = []; + + for (var filed in data) { + var typer = structure[filed], + val = data[filed]; + + var result = this._validateField(typer, filed, val); + + if (result.isError) { + return result; + } + + checkedField.push(filed); + } + + for (var checkField in structure) { + var _typer = structure[checkField]; + var unCheckData = data[checkField]; + + if (!utils.isInclude(checkedField, checkField) && !_typer.validate(unCheckData)) { + var errPaths = utils.copy(paths); + errPaths.push(checkField); + return this._getError(unCheckData, { + paths: errPaths, + expect: _typer.name + }); + } + } + + return this._getSuccess(); + }; + + _proto._validateOther = function _validateOther(data) { + var self = this; + var structure = self.structure; + + if (utils.isEqual(structure, data) || utils.isEmpty(structure)) { + return self._getSuccess(); + } else { + return self._getError(data, { + current: data, + expect: structure + }); + } + }; + + _proto._validateField = function _validateField(typer, filed, value) { + var paths = this.paths, + funcName = this.funcName; + var newPaths = utils.copy(paths); + newPaths.push(filed); + return new Struct(typer, funcName, newPaths).validate(value); + }; + + _proto._getError = function _getError(data, options) { + if (options === void 0) { + options = []; + } + + var structure = this.structure, + paths = this.paths, + funcName = this.funcName; + options = utils.extend({ + current: data, + expect: structure.name || utils.getTypeName(structure), + paths: paths + }, options); + paths = options.paths; + var _options = options, + current = _options.current, + expect = _options.expect; + var param = utils.isEmpty(paths) ? 'param' : paths.join('.'); + var currentType = utils.getTypeName(current); + current = utils.toJSON(current) || current; + current = current + "(" + currentType + ")"; + var msg = utils.tplEngine(ERROR_INFO.PARAMETER_ERROR.msg, { + param: param, + expect: expect, + current: current + }); + var info = { + code: ERROR_INFO.PARAMETER_ERROR.code, + funcName: funcName, + msg: msg + }; + var jsonInfo = utils.toJSON(info); + if (utils.isEmpty(funcName)) delete info[funcName]; + + if (structure.errorInfo) { + info = structure.errorInfo; + } + + return { + isError: true, + info: info, + jsonInfo: jsonInfo + }; + }; + + _proto._getSuccess = function _getSuccess() { + return { + isError: false + }; + }; + + return Struct; + }(); + + var validate = (function (struct, params, eventName) { + return Struct(struct, eventName).validate(params); + }); + + var _MESSAGE_TYPE_VALIDAT; + var MESSAGE_TYPE_VALIDATE = (_MESSAGE_TYPE_VALIDAT = {}, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.TEXT] = { + content: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.VOICE] = { + content: Type.String, + duration: Type.Number + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.HQ_VOICE] = { + remoteUrl: Type.String, + duration: Type.Number + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.IMAGE] = { + content: Type.String, + imageUri: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.GIF] = { + gifDataSize: Type.Number, + width: Type.Number, + height: Type.Number, + remoteUrl: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.RICH_CONTENT] = { + title: Type.String, + content: Type.String, + imageUri: Type.String, + url: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.LOCATION] = { + content: Type.String, + latitude: Type.Number, + longitude: Type.Number, + poi: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.FILE] = { + name: Type.String, + size: Type.Number, + type: Type.String, + fileUrl: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.SIGHT] = { + sightUrl: Type.String, + content: Type.String, + duration: Type.Number, + size: Type.Number, + name: Type.String + }, _MESSAGE_TYPE_VALIDAT[MESSAGE_TYPE.COMBINE] = { + remoteUrl: Type.String, + conversationType: Type.Number, + nameList: Type.Array, + summaryList: Type.Array + }, _MESSAGE_TYPE_VALIDAT); + var validateMsgContent = (function (objectName, option, eventName) { + var validateByObjectName = MESSAGE_TYPE_VALIDATE[objectName]; + + if (validateByObjectName) { + return validate(validateByObjectName, option, eventName); + } else { + return { + isError: false, + info: '' + }; + } + }); + + var Conversation = (function (_engineDispatcher) { + var _temp; + + return _temp = function () { + Conversation.create = function create(option) { + return new Conversation(option); + }; + + Conversation.get = function get(option) { + return new Conversation(option); + }; + + Conversation.merge = function merge(option) { + try { + return common.mergeConversationList(option); + } catch (e) { + utils.consoleError(e); + } + }; + + Conversation.remove = function remove(option) { + var _validate = validate({ + type: Type.ConversationType, + targetId: Type.String + }, option, 'Conversation.remove'), + isError = _validate.isError, + info = _validate.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.REMOVE_CONVERSATION, + args: [option] + }); + }; + + Conversation.getList = function getList(option) { + var _validate2 = validate({ + count: Type.Number.canBeNull(), + startTime: Type.Number.canBeNull() + }, option, 'Conversation.getList'), + isError = _validate2.isError, + info = _validate2.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CONVERSATION_LIST, + args: [option] + }); + }; + + Conversation.getTotalUnreadCount = function getTotalUnreadCount() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_TOTAL_UNREAD_COUNT + }); + }; + + function Conversation(option) { + this.type = void 0; + this.targetId = void 0; + + var _validate3 = validate({ + type: Type.ConversationType, + targetId: Type.String + }, option, 'new Conversation'), + isError = _validate3.isError, + jsonInfo = _validate3.jsonInfo; + + if (isError) { + utils.consoleError(jsonInfo); + return jsonInfo; + } + + utils.extend(this, option); + } + + var _proto = Conversation.prototype; + + _proto.send = function send(option) { + var eventName = 'conversation.send'; + + var _validate4 = validate({ + messageType: Type.String, + content: Type.Object + }, option, eventName), + isError = _validate4.isError, + info = _validate4.info; + + if (isError) { + return utils.Defer.reject(info); + } + + var _option = option, + messageType = _option.messageType, + content = _option.content; + + var _validateMsgContent = validateMsgContent(messageType, content, eventName), + isContentError = _validateMsgContent.isError, + formatInfo = _validateMsgContent.info; + + if (isContentError) { + return utils.Defer.reject(formatInfo); + } + + option = utils.extendInShallow(SEND_MESSAGE_TYPE_OPTION[messageType], option); + option = utils.extendInShallow(SEND_MESSAGE_OPTION, option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SEND_MESSAGE, + args: [this, option] + }); + }; + + _proto.recall = function recall(message, option) { + var _validate5 = validate({ + sentTime: Type.Number, + messageUId: Type.String + }, message, 'conversation.recall'), + isError = _validate5.isError, + info = _validate5.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.RECALL_MESSAGE, + args: [this, message, option] + }); + }; + + _proto.read = function read(option) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.CLEAR_UNREAD_COUNT, + args: [this, option] + }); + }; + + _proto.getUnreadCount = function getUnreadCount() { + var conversation = this; + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_UNREAD_COUNT, + args: [conversation] + }); + }; + + _proto.getMessages = function getMessages(option) { + var _validate6 = validate({ + order: Type.Number.canBeNull(), + count: Type.Number.canBeNull(), + timestrap: Type.Number.canBeNull() + }, option, 'conversation.getMessages'), + isError = _validate6.isError, + info = _validate6.info; + + if (isError) { + return utils.Defer.reject(info); + } + + option = utils.extendInShallow(GET_MESSAGES_OPTION, option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_HISTORY_MSGS, + args: [this, option] + }); + }; + + _proto.deleteMessages = function deleteMessages(messages) { + var _validate7 = validate([{ + sentTime: Type.Number, + messageUId: Type.String, + messageDirection: Type.Number + }], messages, 'conversation.deleteMessages'), + isError = _validate7.isError, + info = _validate7.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.DELETE_MESSAGES, + args: [this, messages] + }); + }; + + _proto.clearMessages = function clearMessages(option) { + var _validate8 = validate({ + timestrap: Type.Number + }, option, 'conversation.clearMessages'), + isError = _validate8.isError, + info = _validate8.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.CLEAR_MESSAGES, + args: [this, option] + }); + }; + + _proto.setStatus = function setStatus(option) { + var _validate9 = validate({ + notificationStatus: Type.Number.canBeNull(), + isTop: Type.Boolean.canBeNull() + }, option, 'conversation.setStatus'), + isError = _validate9.isError, + info = _validate9.info; + + if (isError) { + return utils.Defer.reject(info); + } + + var allUndefinedValidate = validate(Type.NotAllUndefined, option); + isError = allUndefinedValidate.isError; + + if (isError) { + info = allUndefinedValidate.info; + return utils.Defer.reject(info); + } + + var notificationStatus = option.notificationStatus, + isTop = option.isTop; + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_CONVERSATION_STATUS_LIST, + args: [[{ + type: this.type, + targetId: this.targetId, + notificationStatus: notificationStatus, + isTop: isTop + }]] + }); + }; + + _proto.setStatusList = function setStatusList(statusList) { + var _validate10 = validate([{ + notificationStatus: Type.Number.canBeNull(), + isTop: Type.Boolean.canBeNull() + }], statusList, 'conversation.setStatusList'), + isError = _validate10.isError, + info = _validate10.info; + + if (isError) { + return utils.Defer.reject(info); + } + + var self = this; + statusList = utils.map(statusList, function (status) { + return utils.extend(status, { + type: self.type, + targetId: self.targetId + }); + }); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_CONVERSATION_STATUS_LIST, + args: [statusList] + }); + }; + + _proto.destory = function destory() { + var conversation = this; + return _engineDispatcher.exec({ + event: ENGINE_EVENT.REMOVE_CONVERSATION, + args: [conversation] + }); + }; + + return Conversation; + }(), _temp; + }); + + var ChatRoom = (function (_engineDispatcher) { + var _temp; + + return _temp = function () { + ChatRoom.get = function get(option) { + return new ChatRoom(option); + }; + + function ChatRoom(option) { + this.id = void 0; + + var _validate = validate({ + id: Type.String + }, option, 'new ChatRoom'), + isError = _validate.isError, + jsonInfo = _validate.jsonInfo; + + if (isError) { + utils.consoleError(jsonInfo); + return jsonInfo; + } + + utils.extend(this, option); + } + + var _proto = ChatRoom.prototype; + + _proto.join = function join(option) { + var _validate2 = validate({ + count: Type.Number.canBeNull() + }, option, 'chatRoom.join'), + isError = _validate2.isError, + info = _validate2.info; + + if (isError) { + return utils.Defer.reject(info); + } + + option = utils.extendInShallow(JOIN_CHATROOM_OPTION, option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.JOIN_CHATROOM, + args: [this, option] + }); + }; + + _proto.quit = function quit() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.QUIT_CHATROOM, + args: [this] + }); + }; + + _proto.getInfo = function getInfo(option) { + var _validate3 = validate({ + count: Type.Number.canBeNull(), + order: Type.Number.canBeNull() + }, option, 'chatRoom.getInfo'), + isError = _validate3.isError, + info = _validate3.info; + + if (isError) { + return utils.Defer.reject(info); + } + + option = utils.extendInShallow(GET_CHATROOM_INFO_OPTION, option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CHATROOM_INFO, + args: [this, option] + }); + }; + + _proto.send = function send(option) { + var eventName = 'chatRoom.send'; + + var _validate4 = validate({ + messageType: Type.String, + content: Type.Object + }, option, eventName), + isError = _validate4.isError, + info = _validate4.info; + + if (isError) { + return utils.Defer.reject(info); + } + + var id = this.id; + var _option = option, + messageType = _option.messageType, + content = _option.content; + + var _validateMsgContent = validateMsgContent(messageType, content, eventName), + isContentError = _validateMsgContent.isError, + formatInfo = _validateMsgContent.info; + + if (isContentError) { + return utils.Defer.reject(formatInfo); + } + + var conversation = { + type: CONVERSATION_TYPE.CHATROOM, + targetId: id + }; + option = utils.extendInShallow(SEND_MESSAGE_TYPE_OPTION[messageType], option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SEND_MESSAGE, + args: [conversation, option] + }); + }; + + _proto.getMessages = function getMessages(option) { + var _validate5 = validate({ + count: Type.Number.canBeNull(), + order: Type.Number.canBeNull(), + timestrap: Type.Number + }, option, 'chatRoom.getInfo'), + isError = _validate5.isError, + info = _validate5.info; + + if (isError) { + return utils.Defer.reject(info); + } + + option = utils.extendInShallow(GET_CHATROOM_MESSAGES, option); + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CHATROOM_MSGS, + args: [this, option] + }); + }; + + _proto.setEntry = function setEntry(option) { + var _validate6 = validate({ + key: Type.ChatRoomEntryKey, + value: Type.ChatRoomEntryValue + }, option, 'chatRoom.setEntry'), + isError = _validate6.isError, + info = _validate6.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_KV, + args: [this, option] + }); + }; + + _proto.forceSetEntry = function forceSetEntry(option) { + var _validate7 = validate({ + key: Type.ChatRoomEntryKey, + value: Type.ChatRoomEntryValue + }, option, 'chatRoom.forceSetEntry'), + isError = _validate7.isError, + info = _validate7.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.FORCE_SET_KV, + args: [this, option] + }); + }; + + _proto.removeEntry = function removeEntry(option) { + var _validate8 = validate({ + key: Type.ChatRoomEntryKey + }, option, 'chatRoom.removeEntry'), + isError = _validate8.isError, + info = _validate8.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.DEL_KV, + args: [this, option] + }); + }; + + _proto.forceRemoveEntry = function forceRemoveEntry(option) { + var _validate9 = validate({ + key: Type.ChatRoomEntryKey + }, option, 'chatRoom.forceRemoveEntry'), + isError = _validate9.isError, + info = _validate9.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.FORCE_DEL_KV, + args: [this, option] + }); + }; + + _proto.getEntry = function getEntry(key) { + var _validate10 = validate(Type.ChatRoomEntryKey, key, 'chatRoom.getEntry'), + isError = _validate10.isError, + info = _validate10.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_KV, + args: [this, key] + }); + }; + + _proto.getAllEntries = function getAllEntries() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_ALL_KV, + args: [this] + }); + }; + + return ChatRoom; + }(), _temp; + }); + + var RTC = (function (_engineDispatcher) { + var _temp; + + return _temp = function () { + RTC.get = function get(option) { + return new RTC(option); + }; + + function RTC(option) { + this.roomId = void 0; + this.option = void 0; + this.roomId = option.id; + this.option = option; + } + + var _proto = RTC.prototype; + + _proto.join = function join() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.JOIN_RTC, + args: [this.option] + }); + }; + + _proto.quit = function quit() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.QUIT_RTC, + args: [this.option] + }); + }; + + _proto.ping = function ping() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.PING_RTC, + args: [this.option] + }); + }; + + _proto.getRoomInfo = function getRoomInfo() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_ROOM_INFO, + args: [this.option] + }); + }; + + _proto.getUserInfoList = function getUserInfoList() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_USER_INFO_LIST, + args: [this.option] + }); + }; + + _proto.setUserInfo = function setUserInfo(info) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_RTC_USER_INFO, + args: [this.option, info] + }); + }; + + _proto.removeUserInfo = function removeUserInfo(info) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.DEL_RTC_USER_INFO, + args: [this.option, info] + }); + }; + + _proto.setData = function setData(key, value, isInner, apiType, message) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_RTC_DATA, + args: [this.roomId, key, value, isInner, apiType, message] + }); + }; + + _proto.getData = function getData(keys, isInner, apiType) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_DATA, + args: [this.roomId, keys, isInner, apiType] + }); + }; + + _proto.removeData = function removeData(keys, isInner, apiType, message) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.DEL_RTC_DATA, + args: [this.roomId, keys, isInner, apiType, message] + }); + }; + + _proto.setUserData = function setUserData(key, value, isInner, message) { + return this.setData(key, value, isInner, RTC_API_TYPE.PERSON, message); + }; + + _proto.getUserData = function getUserData(keys, isInner) { + return this.getData(keys, isInner, RTC_API_TYPE.PERSON); + }; + + _proto.removeUserData = function removeUserData(keys, isInner, message) { + return this.removeData(keys, isInner, RTC_API_TYPE.PERSON, message); + }; + + _proto.setRoomData = function setRoomData(key, value, isInner, message) { + return this.setData(key, value, isInner, RTC_API_TYPE.ROOM, message); + }; + + _proto.getRoomData = function getRoomData(keys, isInner) { + return this.getData(keys, isInner, RTC_API_TYPE.ROOM); + }; + + _proto.removeRoomData = function removeRoomData(keys, isInner, message) { + return this.removeData(keys, isInner, RTC_API_TYPE.ROOM, message); + }; + + _proto.getUserList = function getUserList() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_USER_LIST, + args: [this.option] + }); + }; + + _proto.setOutData = function setOutData(rtcData, type, message) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_RTC_OUT_DATA, + args: [this.roomId, rtcData, type, message] + }); + }; + + _proto.getOutData = function getOutData(userIds) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_OUT_DATA, + args: [this.roomId, userIds] + }); + }; + + _proto.getToken = function getToken() { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.GET_RTC_TOKEN, + args: [this.option] + }); + }; + + _proto.setState = function setState(content) { + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SET_RTC_STATE, + args: [this.option, content] + }); + }; + + _proto.send = function send(option) { + var id = this.roomId; + var conversation = { + type: CONVERSATION_TYPE.RTC_ROOM, + targetId: id + }; + return _engineDispatcher.exec({ + event: ENGINE_EVENT.SEND_MESSAGE, + args: [conversation, option] + }); + }; + + return RTC; + }(), _temp; + }); + + var IM = function () { + function IM(option) { + this._engineDispatcher = void 0; + + var _validate = validate({ + appkey: Type.String + }, option, 'RongIMLib.init'), + isError = _validate.isError, + jsonInfo = _validate.jsonInfo; + + if (isError) { + throw Error(jsonInfo); + } + + var engineHandler = new EngineDispatcher(option); + this._engineDispatcher = engineHandler; + var Modules = { + Conversation: Conversation(engineHandler), + ChatRoom: ChatRoom(engineHandler), + RTC: RTC(engineHandler) + }; + utils.extend(this, Modules); + } + + var _proto = IM.prototype; + + _proto.getConnectionStatus = function getConnectionStatus() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CONNECTION_STATUS + }); + }; + + _proto.getConnectionUserId = function getConnectionUserId() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CONNECTION_USER_ID + }); + }; + + _proto.getConnectedTime = function getConnectedTime() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_CONNECTED_TIME + }); + }; + + _proto.getAppInfo = function getAppInfo() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_APP_INFO + }); + }; + + _proto.watch = function watch(watchers) { + var _validate2 = validate({ + conversation: Type.Function.canBeNull(), + message: Type.Function.canBeNull(), + status: Type.Function.canBeNull(), + setting: Type.Function.canBeNull() + }, watchers, 'im.watch'), + isError = _validate2.isError, + jsonInfo = _validate2.jsonInfo; + + if (isError) { + utils.consoleError(jsonInfo); + return jsonInfo; + } + + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.WATCH, + args: [watchers] + }); + }; + + _proto.unwatch = function unwatch(watchers) { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.UN_WATCH, + args: [watchers] + }); + }; + + _proto.connect = function connect(user) { + var _validate3 = validate({ + token: Type.String + }, user, 'im.connect'), + isError = _validate3.isError, + info = _validate3.info; + + if (isError) { + return utils.Defer.reject(info); + } + + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.CONNECT, + args: [user] + }); + }; + + _proto.reconnect = function reconnect() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.RECONNECT + }); + }; + + _proto.disconnect = function disconnect() { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.DISCONNECT, + args: [true] + }); + }; + + _proto.changeUser = function changeUser(user) { + var _validate4 = validate({ + token: Type.String + }, user, 'im.changeUser'), + isError = _validate4.isError, + info = _validate4.info; + + if (isError) { + return utils.Defer.reject(info); + } + + var self = this; + return self.disconnect().then(function () { + return self.connect(user); + }); + }; + + _proto.getFileToken = function getFileToken(fileType, originName) { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_UPLOAD_TOKEN, + args: [fileType, originName] + }); + }; + + _proto.getFileUrl = function getFileUrl(fileType, fileName, originName, uploadResp) { + return this._engineDispatcher.exec({ + event: ENGINE_EVENT.GET_UPLOAD_URL, + args: [fileType, fileName, originName, uploadResp] + }); + }; + + return IM; + }(); + + var imInstance; + + var initLogger = function initLogger(option, im) { + var isDebug = option.isDebug, + appkey = option.appkey, + logCollectEvent = option.logger; + utils.isFunction(logCollectEvent) && Logger.watchLog(logCollectEvent); + Logger.setOption({ + isDebug: isDebug, + appkey: appkey + }); + Logger.info(TAG.A_INIT_O, { + content: option + }); + im.watch({ + status: function status(_ref) { + var _status = _ref.status; + Logger.setOption({ + isNetworkUnavailable: utils.isEqual(_status, CONNECTION_STATUS.NETWORK_UNAVAILABLE) + }); + } + }); + }; + + var init = function init(option) { + option = utils.extendInShallow(IM_OPTION, option); + option.connectType = common.getConnectType(option); + + if (!imInstance) { + imInstance = new IM(option); + initLogger(option, imInstance); + } + + return imInstance; + }; + + var getInstance = function getInstance() { + return imInstance; + }; + + var index = utils.extend({ + init: init, + getInstance: getInstance, + env: env, + common: common, + ERROR_CODE: ERROR_CODE, + Logger: Logger + }, product); + + return index; + +})));