sean.zhou
2022-07-22 4dccbb68399da2d46943b8d613585afb49aa5455
src/api/pilot-bridge.ts
@@ -1,95 +1,151 @@
import { message } from 'ant-design-vue'
import { EComponentName, EPhotoType, ERouterName } from '../types'
import { CURRENT_CONFIG } from './http/config'
import { EVideoPublishType, LiveStreamStatus } from '../types/live-stream'
import { getRoot } from '/@/root'
const root = getRoot()
const components = new Map()
export const components = new Map()
declare let window:any
interface JsResponse{
  code:number,
  message:string,
  data:{}
  data:any
}
export interface ThingParam {
  host: string,
  username: string,
  password: string,
  connectCallback: string
}
export interface LiveshareParam {
  videoPublishType: string, // video-on-demand、video-by-manual、video-demand-aux-manual
  statusCallback: string
}
export interface MapParam {
  userName: string,
  elementPreName: string
}
export interface WsParam {
  host: string,
  token: string,
  connectCallback: string
}
export interface ApiParam {
  host: string,
  token: string
}
export interface MediaParam {
  autoUploadPhoto: boolean, // 是否自动上传图片, 非必需
  autoUploadPhotoType: number, // 自动上传的照片类型,0:原图, 1:缩略图, 非必需
  autoUploadVideo: boolean // 是否自动上传视频, 非必需
}
function returnBool (response: string): boolean {
  const res: JsResponse = JSON.parse(response)
  const isError = errorHint(res)
  if (JSON.stringify(res.data) !== '{}') {
    return isError && res.data
  }
  return isError
}
function returnString (response: string): string {
  const res: JsResponse = JSON.parse(response)
  return errorHint(res) ? res.data : ''
}
function returnNumber (response: string): number {
  const res: JsResponse = JSON.parse(response)
  return errorHint(res) ? res.data : -1
}
function errorHint (response: JsResponse): boolean {
  if (response.code !== 0) {
    message.error(response.message)
    console.error(response.message)
    return false
  }
  return true
}
export default {
  init () {
    components.set('thing', {
  init (): Map<EComponentName, any> {
    const thingParam: ThingParam = {
      host: '',
      connectCallback: '',
      username: '',
      password: ''
    })
    components.set('liveshare', {
      videoPublishType: 'video-demand-aux-manual', // video-on-demand、video-by-manual、video-demand-aux-manual
      statusCallback: ''
    })
    components.set('map', {
    }
    components.set(EComponentName.Thing, thingParam)
    const liveshareParam: LiveshareParam = {
      videoPublishType: EVideoPublishType.VideoDemandAuxManual,
      statusCallback: 'liveStatusCallback'
    }
    components.set(EComponentName.Liveshare, liveshareParam)
    const mapParam: MapParam = {
      userName: '',
      elementPreName: ''
    })
    components.set('ws', {
      host: '',
      elementPreName: 'PILOT'
    }
    components.set(EComponentName.Map, mapParam)
    const wsParam: WsParam = {
      host: CURRENT_CONFIG.websocketURL,
      token: '',
      connectCallback: ''
    })
    components.set('api', {
      connectCallback: 'wsConnectCallback'
    }
    components.set(EComponentName.Ws, wsParam)
    const apiParam: ApiParam = {
      host: '',
      token: ''
    })
    components.set('tsa', {
    })
    components.set('media', {
      autoUploadPhoto: true, // 是否自动上传图片, 非必需
      autoUploadPhotoType: 1, // 自动上传的照片类型,0:原图, 1:缩略图, 非必需
      autoUploadVideo: true // 是否自动上传视频, 非必需
    })
    components.set('mission', {
    })
    }
    components.set(EComponentName.Api, apiParam)
    components.set(EComponentName.Tsa, {})
    const mediaParam: MediaParam = {
      autoUploadPhoto: true,
      autoUploadPhotoType: EPhotoType.Preview,
      autoUploadVideo: true
    }
    components.set(EComponentName.Media, mediaParam)
    components.set(EComponentName.Mission, {})
    return components
  },
  getComponentParam (key:string) {
  getComponentParam (key:EComponentName): any {
    return components.get(key)
  },
  setComponentParam (key:string, value:any) {
  setComponentParam (key:EComponentName, value:any) {
    components.set(key, value)
  },
  loadComponent (name:string, param:any):string {
    return window.djiBridge.platformLoadComponent(name, JSON.stringify(param))
    return returnString(window.djiBridge.platformLoadComponent(name, JSON.stringify(param)))
  },
  unloadComponent (name:string) :string {
    return window.djiBridge.platformUnloadComponent(name)
    return returnString(window.djiBridge.platformUnloadComponent(name))
  },
  isComponentLoaded (module:string):string {
    return window.djiBridge.platformIsComponentLoaded(module)
  isComponentLoaded (module:string): boolean {
    return returnBool(window.djiBridge.platformIsComponentLoaded(module))
  },
  setWorkspaceId (uuid:string):string {
    return window.djiBridge.platformSetWorkspaceId(uuid)
    return returnString(window.djiBridge.platformSetWorkspaceId(uuid))
  },
  setPlatformMessage (platformName:string, title:string, desc:string):string {
    return window.djiBridge.platformSetInformation(platformName, title, desc)
  setPlatformMessage (platformName:string, title:string, desc:string): boolean {
    return returnBool(window.djiBridge.platformSetInformation(platformName, title, desc))
  },
  getRemoteControllerSN () :string {
    return window.djiBridge.platformGetRemoteControllerSN()
    return returnString(window.djiBridge.platformGetRemoteControllerSN())
  },
  getAircraftSN ():string {
    return window.djiBridge.platformGetAircraftSN()
    return returnString(window.djiBridge.platformGetAircraftSN())
  },
  stopwebview ():string {
    return window.djiBridge.platformStopSelf()
  },
  getToken () :string {
    const res:string = this.isComponentLoaded('api')
    const resObj = JSON.parse(res)
    console.log('api load status:', resObj)
    if (resObj.data === true) {
      const tokenRes = JSON.parse(window.djiBridge.apiGetToken())
      return tokenRes.data
    } else {
      console.warn('warning: not api component loaded!!')
      return ''
    }
  },
  setToken (token:string):string {
    return window.djiBridge.apiSetToken(token)
    return returnString(window.djiBridge.platformStopSelf())
  },
  setLogEncryptKey (key:string):string {
    return window.djiBridge.platformSetLogEncryptKey(key)
@@ -98,14 +154,42 @@
    return window.djiBridge.platformClearLogEncryptKey()
  },
  getLogPath ():string {
    return window.djiBridge.platformGetLogPath()
    return returnString(window.djiBridge.platformGetLogPath())
  },
  platformVerifyLicense (appId:string, appKey:string, appLicense:string):string {
    return window.djiBridge.platformVerifyLicense(appId, appKey, appLicense)
  platformVerifyLicense (appId:string, appKey:string, appLicense:string): boolean {
    return returnBool(window.djiBridge.platformVerifyLicense(appId, appKey, appLicense))
  },
  isPlatformVerifySuccess ():string {
    return window.djiBridge.platformIsVerified()
  isPlatformVerifySuccess (): boolean {
    return returnBool(window.djiBridge.platformIsVerified())
  },
  isAppInstalled (pkgName: string): boolean {
    return returnBool(window.djiBridge.platformIsAppInstalled(pkgName))
  },
  getVersion (): string {
    return window.djiBridge.platformGetVersion()
  },
  // thing
  thingGetConnectState (): boolean {
    return returnBool(window.djiBridge.thingGetConnectState())
  },
  thingGetConfigs (): ThingParam {
    const thingParam = JSON.parse(window.djiBridge.thingGetConfigs())
    return thingParam.code === 0 ? JSON.parse(thingParam.data) : {}
  },
  // api
  getToken () : string {
    return returnString(window.djiBridge.apiGetToken())
  },
  setToken (token:string):string {
    return returnString(window.djiBridge.apiSetToken(token))
  },
  getHost (): string {
    return returnString(window.djiBridge.apiGetHost())
  },
  // liveshare
  /**
   *
@@ -114,8 +198,8 @@
   * video-by-manual:手动点播,配置好直播类型参数之后,在图传页面可修改直播参数,停止直播
   * video-demand-aux-manual: 混合模式,支持服务器点播,以及图传页面修改直播参数,停止直播
   */
  setVideoPublishType (type:string):string {
    return window.djiBridge.liveshareSetVideoPublishType(type)
  setVideoPublishType (type:string): boolean {
    return returnBool(window.djiBridge.liveshareSetVideoPublishType(type))
  },
  /**
@@ -123,8 +207,8 @@
   * @returns
   * type: liveshare type, 0:unknown, 1:agora, 2:rtmp, 3:rtsp, 4:gb28181
   */
  getLiveshareConfig () {
    return window.djiBridge.liveshareGetConfig()
  getLiveshareConfig (): string {
    return returnString(window.djiBridge.liveshareGetConfig())
  },
  setLiveshareConfig (type:number, params:string):string {
@@ -134,50 +218,66 @@
  setLiveshareStatusCallback (callbackFunc:string) :string {
    return window.djiBridge.liveshareSetStatusCallback(callbackFunc)
  },
  getLiveshareStatus () {
    return window.djiBridge.liveshareGetStatus()
  getLiveshareStatus (): LiveStreamStatus {
    return JSON.parse(JSON.parse(window.djiBridge.liveshareGetStatus()).data)
  },
  startLiveshare ():string {
    return window.djiBridge.liveshareStartLive()
  startLiveshare (): boolean {
    return returnBool(window.djiBridge.liveshareStartLive())
  },
  stopLiveshare ():string {
    return window.djiBridge.liveshareStopLive()
  stopLiveshare (): boolean {
    return returnBool(window.djiBridge.liveshareStopLive())
  },
  // WebSocket
  wsGetConnectState (): boolean {
    return returnBool(window.djiBridge.wsGetConnectState())
  },
  wsConnect (host: string, token: string, callback: string): string {
    return window.djiBridge.wsConnect(host, token, callback)
  },
  wsDisconnect (): string {
    return window.djiBridge.wsConnect()
  },
  wsSend (message: string): string {
    return window.djiBridge.wsSend(message)
  },
  // media
  setAutoUploadPhoto (auto:boolean):string {
    return window.djiBridge.mediaSetAutoUploadPhoto(auto)
  },
  getAutoUploadPhoto () {
    return window.djiBridge.mediaGetAutoUploadPhoto()
  getAutoUploadPhoto (): boolean {
    return returnBool(window.djiBridge.mediaGetAutoUploadPhoto())
  },
  setUploadPhotoType (type:number):string {
    return window.djiBridge.mediaSetUploadPhotoType(type)
  },
  getUploadPhotoType () {
    return window.djiBridge.mediaGetUploadPhotoType()
  getUploadPhotoType (): number {
    return returnNumber(window.djiBridge.mediaGetUploadPhotoType())
  },
  setAutoUploadVideo (auto:boolean):string {
    return window.djiBridge.mediaSetAutoUploadVideo(auto)
  },
  getAutoUploadVideo () {
    return window.djiBridge.mediaGetAutoUploadVideo()
  getAutoUploadVideo (): boolean {
    return returnBool(window.djiBridge.mediaGetAutoUploadVideo())
  },
  setDownloadOwner (rcIndex:number):string {
    return window.djiBridge.mediaSetDownloadOwner(rcIndex)
  },
  getDownloadOwner () {
    return window.djiBridge.mediaGetDownloadOwner()
  getDownloadOwner (): number {
    return returnNumber(window.djiBridge.mediaGetDownloadOwner())
  },
  onBackClickReg () {
    window.djiBridge.onBackClick = () => {
      if (root.$router.currentRoute.value.path === '/pilot-home') {
        console.log(root.$router.currentRoute.value.path)
      if (root.$router.currentRoute.value.path === '/' + ERouterName.PILOT_HOME) {
        return false
      } else {
        console.log(root.$router.currentRoute.value.path)
        history.go(-1)
        return true
      }
    }
  },
  onStopPlatform () {
    window.djiBridge.onStopPlatform = () => {
      localStorage.clear()
    }
  }
}