WWEventSource

Swift-5.6 iOS-14.0 TAG Swift Package Manager-SUCCESS LICENSE

Introduction - 简介

Installation with Swift Package Manager

dependencies: [
    .package(url: "https://github.com/William-Weng/WWEventSource.git", .upToNextMajor(from: "1.2.0"))
]

Parameters - 可用参数

参数 功能
lastEventId 记录最后的事件Id
lastRertyTime 记录最后的重试时间 (ms)

Function - 可用函数

函数 功能
connect(httpMethod:delegate:urlString:parameters:headers:httpBodyType:configuration:queue:) 开启SSE连接
disconnect() 关闭SSE连接

WWEventSourceDelegate

函数 功能
serverSentEventsConnectionStatus(_:result:) 接收连接的状态
serverSentEvents(_:rawString:) 接收从Server端传来的原始信息
serverSentEvents(_:eventValue:) 接收从Server端传来的事件信息

Example

import UIKit
import WWPrint
import WWEventSource

// MARK: - ViewController
final class ViewController: UIViewController {

    @IBOutlet weak var eventStringLabel: UILabel!
    
    private let urlString = "https://:54321/sse"
    private var tempMessage = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func sseTest(_ sender: UIBarButtonItem) {
        let dictionary: [String : Any] = ["content": "We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests.", "delayTime": 0.05]
        tempMessage = ""
        _ = WWEventSource.shared.connect(httpMethod: .POST, delegate: self, urlString: urlString, httpBodyType: .dictionary(dictionary))
    }
}

// MARK: - WWEventSourceDelegate
extension ViewController: WWEventSourceDelegate {
        
    func serverSentEventsConnectionStatus(_ eventSource: WWEventSource, result: Result<WWEventSource.Constant.ConnectionStatus, Error>) {
        wwPrint(result)
    }
    
    func serverSentEvents(_ eventSource: WWEventSource, rawString: String) {
        wwPrint(rawString)
    }
    
    func serverSentEvents(_ eventSource: WWEventSource, eventValue: WWEventSource.Constant.EventValue) {
        
        switch eventValue.keyword {
        case .id: wwPrint(eventValue)
        case .event: wwPrint(eventValue)
        case .retry: wwPrint(eventValue)
        case .data: wwPrint(eventValue)
            tempMessage += eventValue.value
            DispatchQueue.main.async { self.eventStringLabel.text = self.tempMessage }
        }
    }
}