202 lines
4.9 KiB
Plaintext
Raw Normal View History

2025-06-27 11:24:09 +08:00
/* eslint-disable */
// @ts-nocheck
// @ts-ignore-start
import { Result } from '../interface.uts'
2025-07-02 18:50:23 +08:00
const resolverMap = new Map<string, (value: Result) => void>()
function avRecvHandle(
id: Optional<UnsafePointer<Int8>>,
recv_buf: Optional<UnsafeMutablePointer<UInt8>>,
recv_len: Int
2025-07-02 18:50:23 +08:00
) {}
function msgHandle(
id: Optional<UnsafePointer<Int8>>,
type: XP2PType,
msg: Optional<UnsafePointer<Int8>>
): Optional<UnsafePointer<Int8>> {
2025-07-02 18:50:23 +08:00
if (type.rawValue == 1004) {
const idString = id != null ? P2PConversionHelper.cStringToString(id) : null
if (idString != null) {
const resolver = resolverMap.get(idString!)
if (resolver != null) {
const urlResult = delegateHttpFlv(idString!)
if (urlResult != null) {
const urlString = P2PConversionHelper.cStringToString(urlResult)
if (urlString != null && urlString != '') {
resolver!({
code: 0,
data: { url: urlString },
message: '成功'
})
resolverMap.delete(idString!)
return null
}
}
resolver!({ code: -1, data: {}, message: '获取播放URL失败' })
resolverMap.delete(idString!)
}
}
}
return null
}
function deviceDataHandle(
id: Optional<UnsafePointer<Int8>>,
recv_buf: Optional<UnsafeMutablePointer<UInt8>>,
recv_len: Int
): Optional<UnsafeMutablePointer<Int8>> {
2025-07-02 18:50:23 +08:00
// if (id != null) {
// const idString = P2PConversionHelper.cStringToString(id)
// // console.log(`deviceDataHandle: ${idString}, len: ${recv_len}`)
// }
return null
}
2025-06-27 11:24:09 +08:00
export const startServiceFunction = async function (
appKey: string,
appSecret: string,
productId: string,
deviceName: string,
xp2pInfo: string
2025-06-30 09:43:16 +08:00
): Promise<Result> {
2025-07-02 18:50:23 +08:00
const deviceId = `${productId}/${deviceName}`
2025-06-30 09:43:16 +08:00
return new Promise<Result>((resolve, reject) => {
2025-07-02 18:50:23 +08:00
resolverMap.set(deviceId, resolve)
2025-06-30 09:43:16 +08:00
try {
const config = app_config_t()
config.server = UnsafePointer(strdup('')!)
config.ip = UnsafePointer(strdup('')!)
config.port = 20002
config.type = XP2P_PROTOCOL_AUTO
config.cross = true
// 设置回调
2025-07-04 18:53:21 +08:00
setUserCallbackToXp2p(null, msgHandle, null)
2025-06-30 09:43:16 +08:00
2025-07-02 18:50:23 +08:00
const result = startService(deviceId, productId, deviceName, config)
2025-06-30 09:43:16 +08:00
if (NSNumber(0) === result) {
2025-07-02 18:50:23 +08:00
const setP2PInfoResult = setDeviceXp2pInfo(deviceId, xp2pInfo)
2025-06-30 09:43:16 +08:00
if (NSNumber(0) === setP2PInfoResult) {
2025-07-02 18:50:23 +08:00
setTimeout(() => {
if (resolverMap.has(deviceId)) {
2025-06-30 09:43:16 +08:00
resolve({ code: -1, data: {}, message: '获取播放URL超时' })
2025-07-02 18:50:23 +08:00
resolverMap.delete(deviceId)
2025-06-30 09:43:16 +08:00
}
2025-07-02 18:50:23 +08:00
}, 20000)
2025-06-30 09:43:16 +08:00
} else {
resolve({ code: -1, data: {}, message: 'setDeviceXp2pInfo 调用失败' })
2025-07-02 18:50:23 +08:00
resolverMap.delete(deviceId)
2025-06-30 09:43:16 +08:00
}
} else {
resolve({ code: -1, data: {}, message: 'startService 调用失败' })
2025-07-02 18:50:23 +08:00
resolverMap.delete(deviceId)
2025-06-30 09:43:16 +08:00
}
} catch (error) {
console.log('startServiceFunction 报错', error)
resolve({
code: -1,
data: {},
message: error.toString()
})
2025-07-02 18:50:23 +08:00
resolverMap.delete(deviceId)
2025-06-30 09:43:16 +08:00
}
})
}
export const stopServiceFunction = async function (id: string): Promise<Result> {
try {
const result = await stopService(id)
console.log('stopService', result)
2025-06-30 09:43:16 +08:00
return {
code: 0,
data: {},
message: '成功'
}
} catch (error) {
return {
code: -1,
data: {},
message: error.toString()
}
}
}
export const runSendServiceFunction = async function (
id: string,
cmd: string,
crypto: boolean
2025-06-27 11:24:09 +08:00
): Promise<Result> {
try {
2025-07-07 17:23:51 +08:00
const result = await runSendService(id, cmd, crypto)
2025-07-04 18:53:21 +08:00
console.log('开始发送服务', result)
2025-06-30 09:43:16 +08:00
return {
code: 0,
data: {},
message: '成功'
}
} catch (error) {
2025-06-27 11:24:09 +08:00
return {
code: -1,
data: {},
2025-06-30 09:43:16 +08:00
message: error.toString()
}
}
}
export const stopSendServiceFunction = async function (id: string): Promise<Result> {
try {
2025-07-04 18:53:21 +08:00
const result = stopSendService(id, null)
console.log('停止发送服务', result)
return {
code: 0,
data: {},
message: '成功'
}
} catch (error) {
return {
code: -1,
data: {},
message: error.toString()
}
}
}
export const dataSendFunction = async function (id: string, data: Array<number>): Promise<Result> {
const buffer = XP2PDataHelper.createBytes(data as NSArray)
if (buffer == null) {
return {
code: -1,
data: {},
message: '创建数据缓冲区失败'
}
}
try {
2025-07-07 17:23:51 +08:00
const result = await dataSend(id, buffer, data.length)
2025-07-04 18:53:21 +08:00
XP2PDataHelper.deallocateBytes(buffer)
2025-06-30 09:43:16 +08:00
return {
code: 0,
2025-07-08 09:18:31 +08:00
data: {
result: result
},
2025-06-30 09:43:16 +08:00
message: '成功'
2025-06-27 11:24:09 +08:00
}
} catch (error) {
return {
code: -1,
data: {},
message: error.toString()
}
}
}
// @ts-ignore-end