socketio / socket.io-client-swift

Other
5.21k stars 841 forks source link

Socket .on method is not calling until I emit anything #1424

Open ankit7474 opened 2 years ago

ankit7474 commented 2 years ago

I'm facing a problem in the latest version that the on listener is not being called until I emit anything. After emitting, everything works fine.

Here is my socket manager class code:

import Foundation
import SocketIO

class SocketHelper {

    static let shared = SocketHelper.init()
    var socket: SocketIOClient!

    let manager = SocketManager(socketURL: URL(string: APIConstants.socketLink)!, config: [.log(true)])

    private init() {
        socket = manager.defaultSocket

//        socket = manager.socket(forNamespace: "/web-1")
    }

    func connectSocket(completion: @escaping(Bool) -> () ) {

        socket.on(clientEvent: .connect) {[weak self] (data, ack) in
            print("socket connected")
            completion(true)
        }
        socket.connect()
    }

    func disconnectSocket() {
        socket.removeAllHandlers()
        socket.disconnect()
        print("socket Disconnected")
    }

    func checkConnection() -> Bool {
        if socket.manager?.status == .connected {
            return true
        }
        return false

    }

    func convertImageToBase64String (img: UIImage) -> String {
        return img.jpegData(compressionQuality: 0.3)?.base64EncodedString() ?? ""
    }

    func convertBase64StringToImage (imageBase64String:String) -> UIImage {
        let imageData = Data(base64Encoded: imageBase64String)
        let image = UIImage(data: imageData!)
        return image!
    }

    enum Events {
        case new_message
        case chat_list

        var emitterName: String {
            switch self {
            case .new_message:
                return "message"
            case .chat_list:
                return "receive_message"
            }
        }
        var listnerName: String {
            switch self {
            case .new_message:
                return "message"
            case .chat_list:
                return "receive_message"
            }
        }
        func emit(params: [String : Any]) {

            SocketHelper.shared.socket.emit(emitterName, params)

        }
        func listen(completion: @escaping (Any) -> Void) {

         SocketHelper.shared.socket.onAny { event in
                print(event)
             print("event>>>"+event.event)
          }
            SocketHelper.shared.socket.on(listnerName) { (response, emitter) in
                completion(response)
             }
        }
        func off() {
            SocketHelper.shared.socket.off(listnerName)
        }
    }
}

Please help resolving the issue. Thanks in Advance.