imobile_for_reactnative
Version:
iMobile for ReactNative,是SuperMap iMobile推出的一款基于React-Native框架的移动应用开发工具。基于该开发工具,用户可以使用JavaScript开发语言,开发出在Android和IOS操作系统下运行的原生移动GIS应用,入门门槛低,一次开发,处处运行。
248 lines (224 loc) • 6.69 kB
text/typescript
/**
* 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)
})
}