UNPKG

imobile_for_reactnative

Version:

iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。

248 lines (224 loc) 6.69 kB
/** * Created by imobile-xzy on 2019/3/13. */ import { EventConst } from '../constains' import {NativeModules, NativeEventEmitter, EmitterSubscription } from 'react-native' const MessageServiceeNative = NativeModules.SMessageService const nativeEvt = new NativeEventEmitter(MessageServiceeNative) let listener: EmitterSubscription | undefined = undefined /** 连接消息服务信息 */ export interface ConnectInfo { /** 消息服务IP e.g. '127.0.0.1' */ ip: string, /** 消息服务端口号, e.g. 5672*/ port: number, /** 消息服务Host */ hostName: string, /** 消息服务用户名 */ userName: string, /** 消息服务密码 */ password: string, } /** 文件上传进度信息 */ export interface UploadFileCallbackResult { /** 发送目标对象ID */ talkId: string, /** 文件消息ID */ msgId: number, /** 文件上传进度 */ percentage: number, } /** 文件上传参数 */ export interface UploadFileParams { /** 文件服务器地址 eg: 192.168.11.21:8124/upload */ serverUrl: string, /** 上传文件路径 */ filePath: string, /** 上传文件的用户ID */ ownerId: string, /** 上传文件任务自定义的任务ID(ID命名保持唯一性),上传回掉中返回,用于确认上传哪一个队列 */ listenerID?: string, } /** 文件上传结果 */ export interface UploadFileResult { /** * 文件相对地址,不包含文件服务路径。eg: /files/xxx/xxx/xxx * 上传文件后返回的文件相对地址 */ sourceUrl: string, } /** 文件下载参数 */ export interface DownloadFileParams { /** * 文件地址,含文件服务路径。eg: 192.168.11.21:8124/download/files/xxx/xxx/xxx * 下载服务地址 + 上传文件后返回的文件相对地址 */ sourceUrl: string, /** 文件接收位置 */ receivePath: string, /** 下载文件任务自定义的任务ID(ID命名保持唯一性),下载回掉中返回,用于确认下载哪一个队列 */ listenerID?: string, } /** 接收消息 */ export interface MessageCallback { clientId: string, message: string, } /** * 连接服务 * @param params 消息服务连接信息 * @returns 返回是否连接成功 */ export function connectService(params: ConnectInfo): Promise<boolean> { return MessageServiceeNative.connectService(params) } /** * 断开服务链接 * @returns 返回是否断开连接 */ export function disconnectionService(): Promise<boolean> { return MessageServiceeNative.disconnectionService() } /** * 消息发送 * @param targetID 发送目标ID * @param message 消息 * @returns 返回发送消息是否异常 */ export function sendMessage(targetID: string, message: string): Promise<boolean> { return MessageServiceeNative.sendMessage(targetID, message) } /** * 上传文件到三方服务器中 * @param params 文件上传参数 * @returns 返回文件信息 */ export function uploadFile(params: UploadFileParams): Promise<UploadFileResult> { console.warn(params) return MessageServiceeNative.uploadFile(params) } /** * 从三方文件服务中下载 */ /** * 从三方文件服务中下载 * @param params 文件下载参数 * @returns 返回文件是否正常下载 */ export function downloadFile(params: DownloadFileParams): Promise<boolean>{ console.warn(params) return MessageServiceeNative.downloadFile(params) } /** * 声明会话 * @param queueId 声明会话的ID * @returns 返回会话是否声明成功 */ export function declareQueue(queueId: string): Promise<boolean> { return MessageServiceeNative.declareQueue(queueId) } /** * 声明多人会话 * @param memmbers 成员ID数组 * @param groupId 多人会话ID * @returns 返回会话是否声明成功 */ export function declareSession(memmbers: string[], groupId: string) { return MessageServiceeNative.declareSession(memmbers, groupId) } /** * 绑定多人对话 * @param queueId 成员消息队列ID * @param groupId 多人对话ID * @returns 返回是否绑定成功 */ export function bindSession(queueId: string, groupId: string) { return MessageServiceeNative.bindSession(queueId, groupId) } /** * 退出多人会话 * @param memmber 成员消息队列ID * @param groupId 多人会话ID * @returns 返回是否退出成功 */ export function exitSession(memmber: string, groupId: string) { return MessageServiceeNative.exitSession(memmber, groupId) } /** * 设置消息服务接收监听 * @param handlers 消息服务接收回调 */ function register(handlers: { callback: (e: MessageCallback) => void, }) { try { listener && listener.remove() if (handlers && typeof handlers.callback === "function") { if (handlers){ listener = nativeEvt.addListener(EventConst.MESSAGE_SERVICE_RECEIVE, function (e: MessageCallback) { handlers.callback(e) }) } } } catch (error) { console.log(error) } } /** * 删除消息服务接收监听 */ function unRegister() { try { listener && listener.remove() listener = undefined } catch (error) { console.log(error) } } /** * 开启消息接收 * @param uuid 接收消息的用户ID * @param handlers 自定义接收消息回调 * @returns 返回是否成功开启消息接收 */ export function startReceiveMessage(uuid: string, handlers: { callback: (e: MessageCallback) => void, }) { register(handlers) return MessageServiceeNative.startReceiveMessage(uuid) } /** * 关闭消息接收 * @returns 返回是否成功开启消息接收 */ export function stopReceiveMessage() { unRegister() return MessageServiceeNative.stopReceiveMessage() } /** 上传/下载回调返回值 */ export interface FileServiceCallback { sourceUrl: string, percentage: number, listenerID?: string, } let uploadFileListener: EmitterSubscription | undefined = undefined let downloadFileListener: EmitterSubscription | undefined = undefined /** * 设置文件服务上传/下载监听 * @param listeners 上传下载监听, 不传则清空监听 */ export function setFileServiceListener(listeners?: { onUpload: (event: FileServiceCallback) => void, onDownload: (event: FileServiceCallback) => void, }) { uploadFileListener?.remove() uploadFileListener = listeners?.onUpload && nativeEvt.addListener(EventConst.MESSAGE_SERVICE_RECEIVE_FILE, function (e) { listeners.onUpload(e) }) downloadFileListener?.remove() downloadFileListener = listeners?.onDownload && nativeEvt.addListener(EventConst.MESSAGE_SERVICE_SEND_FILE, function (e) { listeners.onDownload(e) }) }