Emit не работает для веб-сокетов в iOS swift? - PullRequest
0 голосов
/ 05 апреля 2020

В мое приложение iOS встроены веб-сокеты. Сервер написан с Nodejs и express. Помимо моего iOS приложения у меня также есть reactjs веб-приложение. Веб-приложение работает правильно, поэтому нет проблем со стороны сервера. Я использую эту библиотеку для своего iOS приложения https://github.com/socketio/socket.io-client-swift/

Теперь я могу получать события с моего сервера, например, если новый пользователь присоединился к приложению iOS, но приложение iOS не будет генерировать никаких событий при нажатии кнопки. На viewdidload у меня есть событие emit userjoin, которое работает отлично. Но когда я отправляю сообщение по нажатию кнопки, это событие не работает. Вот суть моего кода

let manager = SocketManager(socketURL: URL(string: "MY_URL")!, config: [.log(true), .compress])
    var socket: SocketIOClient? = nil

override func viewDidLoad() {
        super.viewDidLoad()

        socket = manager.defaultSocket

socket?.connect()

        socket?.on("connect") { _, _ in
            self.socket?.emit("userjoin", self.defaults.string(forKey:"email") ?? "")
        }

        socket?.on("userjoined", callback: { (data, ack) in
            self.userJoinedLbl.text = data[0] as? String ?? ""
        }) ...

Приведенный выше код работает отлично. Ниже код моего нажатия кнопки не будет работать

@IBAction func sendMsgClicked(_ sender: Any) {
        debugPrint(self.defaults.string(forKey:"id") ?? "")
        socket?.on("connect") { _, _ in
            self.socket?.emit("sendMessage", self.sendMsgTextField.text ?? "",self.defaults.string(forKey:"id") ?? "")
        }

    }

Я получаю следующие журналы из библиотеки веб-сокетов

2020-04-05 15:09:58.032340+0530 WebSocketNativeIOS[5995:216223] LOG SocketIOClient{/}: Adding handler for event: connect
2020-04-05 15:10:17.211199+0530 WebSocketNativeIOS[5995:216223] LOG SocketIOClient{/}: Handling event: ping with data: []
2020-04-05 15:10:17.211211+0530 WebSocketNativeIOS[5995:218688] LOG SocketEngine: Writing ws:  has data: false
2020-04-05 15:10:17.211587+0530 WebSocketNativeIOS[5995:218688] LOG SocketEngineWebSocket: Sending ws:  as type: 2
2020-04-05 15:10:17.418903+0530 WebSocketNativeIOS[5995:218688] LOG SocketEngine: Got message: 3
2020-04-05 15:10:17.419593+0530 WebSocketNativeIOS[5995:216223] LOG SocketIOClient{/}: Handling event: pong with data: []

Я отправляю событие sendMessage, которое принимает сообщение пользователя и ID пользователя. Сообщение пользователя и идентификатор пользователя не являются нулевыми. Событие sendMessage отлично работает в веб-приложении

Код моего веб-приложения при нажатии кнопки:

socket.emit("sendMessage", msg, localStorage.getItem("userId"));

1 Ответ

0 голосов
/ 05 апреля 2020

Хорошо, я понял это

Я добавил это в моем нажатии кнопки

manager.defaultSocket.emit("sendMessage", self.sendMsgTextField.text ?? "",self.defaults.string(forKey:"id") ?? "")

Благодаря этой проблеме https://github.com/socketio/socket.io-client-swift/issues/1055 Я смог понять это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...