Files
hospital-rescue-app-v2/uni_modules/x-sse-s/utssdk/app-ios/index.uts
T
2026-09-24 16:25:22 +08:00

117 lines
2.8 KiB
Plaintext

import { URL } from 'Foundation';
import { Dictionary } from "Swift";
import {xSSEOptions} from "../interface.uts"
export class SSEClientApp {
private sseClient : SSEClient
public url : string = ''
private closed:boolean = true;
private onOpenEvt = () => { }
private onErrorEvt = () => { }
private onClosedEvt = () => { }
private onMessageEvt = (data : string) => { }
constructor(options:xSSEOptions) {
this.url = options.url;
let _headers = new Map<string, string>()
const headersOpts = (options.header!=null?(options.header as UTSJSONObject):({} as UTSJSONObject))
for(const key in headersOpts){
_headers.set(key,headersOpts.getString(key)!)
}
this.sseClient = new SSEClient(url = new URL(string = this.url)!, headers = _headers)
}
@UTSJS.keepAlive
onOpen(callback:()=>void){
this.onOpenEvt = callback
}
@UTSJS.keepAlive
onError(callback:()=>void){
this.onErrorEvt = callback
}
@UTSJS.keepAlive
onClosed(callback:()=>void){
this.onClosedEvt = callback
}
@UTSJS.keepAlive
onMessage(callback:(data:string)=>void){
this.onMessageEvt = callback
}
connect(headers:UTSJSONObject = {}) {
let _headers = new Map<string, string>()
for(const key in headers){
_headers.set(key,headers.getString(key)!)
}
console.log(_headers.size)
if(!this.closed) return;
this.sseClient = new SSEClient(url = new URL(string = this.url)!, headers = _headers)
this.closed = true;
this.sseClient.start()
let _this = this;
this.sseClient.onMessage((data:string)=>{
_this.onMessageEvt(data)
})
this.sseClient.onOpen(()=>{
_this.onOpenEvt()
_this.closed = false;
})
this.sseClient.onError((error:any|null)=>{
_this.onErrorEvt()
console.error(error)
_this.closed = true;
})
}
disconnect() {
this.sseClient.stop()
this.closed = true;
this.onClosedEvt()
}
isConnected() : boolean {
return !this.closed;
}
}
/**
// 在 ViewController 中使用
class ViewController: UIViewController {
private var sseClient: SSEClient?
override func viewDidLoad() {
super.viewDidLoad()
// 初始化 SSE 客户端
if let url = URL(string: "https://your-sse-server.com/events") {
sseClient = SSEClient(url: url)
sseClient?.delegate = self
sseClient?.connect()
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
sseClient?.disconnect()
}
}
// 实现代理方法
extension ViewController: SSEClient.EventSourceDelegate {
func eventSourceDidOpen() {
print("SSE 连接已打开")
}
func eventSourceDidReceiveMessage(event: String?, data: String) {
print("收到消息: event=\(event ?? ""), data=\(data)")
}
func eventSourceDidError(_ error: Error) {
print("发生错误: \(error.localizedDescription)")
}
func eventSourceDidClose() {
print("连接已关闭")
}
}
*/