代码之家  ›  专栏  ›  技术社区  ›  Hussein

Socket.io Javascript发送到Swift

  •  0
  • Hussein  · 技术社区  · 3 年前

    我有这个Javascript socket.io发射函数,我需要用Swift、SwiftUI和文档中的说明来编写它:

    要订阅和获取归档过程事件:

    1. 订阅“galleryArchive”套接字事件
    2. 通过插座发射: socket.emit(“subscribeOnGalleryArchiveInfo”,{archiveEventName,galleryId},data=>{});

    脚本:

    socketClient.emit(
        'subscribeOnGalleryArchiveInfo',
        { archiveEventName: eventName, galleryId },
        (event: GalleryArchiveEvent) => {
            const { data } = event;
            setArchivingData(data);
        }
    );
    

    我所做的只是在Swift中初始化Socket视图模型,但似乎无法在没有大量错误的情况下重新创建这个发射函数。

    我的代码:

    class GalleryArchiveSocket: ObservableObject {
        @Published var archiveEventName: String
        @Published var galleryId: String
    
        var manager: SocketManager?
        var socket: SocketIOClient?
    
        init(archiveEventName: String, galleryId: String) {
            self.archiveEventName = archiveEventName
            self.galleryId = galleryId
            guard let apiUrl = AppConfig.rootURL
            else {
                return
            }
            manager = SocketManager(
                socketURL: apiUrl,
                config: [
                    .extraHeaders(
                        [
                            HTTPHeader.authorization.key: HTTPHeader.authorization.value.headerValue
                        ]
                    ),
                    .log(true),
                    .compress
                ]
            )
            guard let socket = manager?.defaultSocket
            else {
                return
            }
            socket.on(clientEvent: .connect) {_, _ in
                print("I'm connected")
                // Emit function with param ? and receive data ?
            }
            socket.connect()
        }
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Hussein    3 年前

    我通过研究许多Socket.io swift示例找到了一个解决方案,直到我看到有人传递数据,比如: ["archiveEventName": self.archiveEventName, "galleryId": self.galleryId]

    @workingdog 有助于初始语法。

    socket.on(clientEvent: .connect) {_, _ in
                socket.emit("subscribeOnGalleryArchiveInfo", ["archiveEventName": self.archiveEventName, "galleryId": self.galleryId])
                socket.on("GalleryArchiveEvent") { data, ack in
                    print(data)
                }
            }