Skip to content

Socket On listeners donot fire but emit works fine #172

Description

@Xcode09

i am working on chat application and facing some issues when i send the message , it sent succuessfully but my listeners donot fire and message cannot updates
i make a sperate class code is here please help
open class SocketIOManager {

public static let default = SocketIOManager()
private let manager: SocketManager
private let socket: SocketIOClient

private init() {
self.manager = SocketManager(socketURL: URL(string: "http://18.220.164.142:3000/")!, config: [.connectParams(["token": UserState.gettoken() ?? ""]), .compress,.log(true)])
self.socket = manager.defaultSocket
}

//To check before any call is socket connected or not.
func isSocketConnected() -> Bool{
if self.socket.status == .connected {
return true
}
return false
}
//Connection with socket Handshaking
func establishConnection(completionHandler: @escaping (Bool) -> Void) {
socket.on(clientEvent: .connect) {data, ack in
completionHandler(true)
print("socket connected (data)")
}
socket.connect()
}
//Connection with socket Handshaking
func establishConnection() {
socket.connect()

}
//Socket connection disconnect
func closeConnection() {
socket.disconnect()
socket.off(clientEvent: .disconnect)
}

//Socket Remove Listeners
func removeListeners() {
socket.off("message")
socket.off("typing")
socket.off("stopTyping")
}

func getChatMessage(completionHandler: @escaping (GetChatConversation?,String?) -> Void) {

socket.on("message") { (dataArray, socketAck) -> Void in
  print(dataArray)
  
  if let data = dataArray.first as? Data{
    do{
      let objc = try JSONDecoder.init().decode(GetChatConversation.self, from: data)
      completionHandler(objc,nil)
    }
    catch let error{
      return completionHandler(nil,error.localizedDescription)
    }
  }else{
    completionHandler(nil,"Cannot cast Array of Any to Data")
  }
}

}

func getStartTypingResponse(completionHandler: @escaping (String) -> Void) {
socket.on("typing") { (dataArray, socketAck) -> Void in
let swiftyJsonVar = JSON(dataArray as Any)
let messageDictionary = swiftyJsonVar.arrayValue[0]

  completionHandler(messageDictionary["sender"].stringValue)
}

}

func getStopTypingResponse(completionHandler: @escaping (String) -> Void) {
socket.on("stopTyping") { (dataArray, socketAck) -> Void in
let swiftyJsonVar = JSON(dataArray as Any)
let messageDictionary = swiftyJsonVar.arrayValue[0]

  completionHandler(messageDictionary["sender"].stringValue)
}

}

func sendStartTypingMessage(conversationId: String) {

var typingDict = [String: Any]()
typingDict.updateValue(conversationId, forKey: "conversationId")

if let bearerToken = UserState.gettoken() {
  if bearerToken.count > 0 {
    typingDict.updateValue(bearerToken, forKey: "token")
  }
}
socket.emitWithAck("typing", typingDict).timingOut(after: 0.1, callback: { data in
  print("\(data)")
})  }

func sendStopTypingMessage(conversationId: String) {

var stopTypingDict = [String: Any]()
stopTypingDict.updateValue(conversationId, forKey: "conversationId")

if let bearerToken = UserState.gettoken() {
  if bearerToken.count > 0 {
    stopTypingDict.updateValue(bearerToken, forKey: "token")
  }
}
socket.emitWithAck("stopTyping", stopTypingDict).timingOut(after: 0.1, callback: { data in
  print("\(data)")
})

}

func sendMessage(message: String, conversationId: String, completionHandler: @escaping (Bool) -> Void) {

var conversationDictionary = [String: Any]()
conversationDictionary.updateValue(message, forKey: "message")
conversationDictionary.updateValue(conversationId, forKey: "conversationId")
conversationDictionary.updateValue(Date().millisecondsSince1970, forKey: "timestamp")

if let bearerToken = UserState.gettoken() {
  if bearerToken.count > 0 {
    conversationDictionary.updateValue(bearerToken, forKey: "token")
  }
}

socket.emitWithAck("message", conversationDictionary).timingOut(after: 0.1, callback: { data in
  print("\(data)")
 
})

}
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions