title: Socket.io for swift4 ios
body: <p>I am in trouble how to implement websocket function to my swift code.</p>
  
  <p>I have completed a server implementation and another javascript client.
  They are working well.
  So, I believe websocket server is not wrong.</p>
  
  <p>But if I write the code in swift, it don't work. No error happen and no message is shown on the console.</p>
  
  <p>Here is my swift code.</p>
  
  <pre><code>import UIKit
  import SocketIO
  
  class ChatViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
  
  
      @IBOutlet weak var tableView: UITableView!
  
      var bottomView: ChatRoomInputView!
  
      var chats: [ChatEntity] = []
  
      var socket: SocketIOClient!
  
      override func viewDidLoad() {
          super.viewDidLoad()
  
          tableView.delegate = self
          tableView.dataSource = self
  
          // Initialize WebSocket
          let manager = SocketManager(socketURL: URL(string: "http://example.com:8081")!, config: [.log(true), .compress])
          socket = manager.defaultSocket
  
          socket.on(clientEvent: .connect) {data, ack in
              print("socket connected")
          }
  
          socket.on("server_to_client") {[weak self] data, ack in
              print ("get Massage!!!")
          }
  
          socket.connect()
  
          socket.emit("join_room", with: [getRegistrationId()])
          socket.emit("client_to_server", with: ["ack_client"])
  
          setupUI()
      }
  
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
      }
  
      override func viewWillDisappear(_ animated: Bool) {
          super.viewWillDisappear(animated)
      }
  
      override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
      }
  
      override var canBecomeFirstResponder: Bool {
          return true
      }
  
      override var inputAccessoryView: UIView? {
          return bottomView
      }
  
      func setupUI() {
          self.view.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1)
          tableView.backgroundColor = UIColor(red: 113/255, green: 148/255, blue: 194/255, alpha: 1)
  
          tableView.separatorColor = UIColor.clear
          tableView.estimatedRowHeight = 10000
          tableView.rowHeight = UITableViewAutomaticDimension
          tableView.allowsSelection = false
          tableView.keyboardDismissMode = .interactive
  
          tableView.register(UINib(nibName: "YourChatViewCell", bundle: nil), forCellReuseIdentifier: "YourChat")
          tableView.register(UINib(nibName: "MyChatViewCell", bundle: nil), forCellReuseIdentifier: "MyChat")
  
          self.bottomView = ChatRoomInputView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 60))
          bottomView.chatTextField.delegate = self
          bottomView.textSendButton.addTarget(self, action: #selector(self.chatTextSendButton(_:)), for: .touchUpInside)
  
      }
  
      func numberOfSections(in tableView: UITableView) -&gt; Int {
          return 1
      }
  
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
          return self.chats.count
      }
  
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
          let chat = self.chats[indexPath.row]
          if chat.isMyChat() {
              let cell = tableView.dequeueReusableCell(withIdentifier: "MyChat") as! MyChatViewCell
              cell.clipsToBounds = true
              // Todo: isRead
              cell.updateCell(text: chat.text, time: chat.time, isRead: true)
              return cell
          } else {
              let cell = tableView.dequeueReusableCell(withIdentifier: "YourChat") as! YourChatViewCell
              cell.clipsToBounds = true
              cell.updateCell(text: chat.text, time: chat.time, pic: RemoshinData.getDoctorPic())
              return cell
          }
      }
  
      func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          print(indexPath)
      }
  
      func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -&gt; CGFloat {
          return 10
      }
  
  
      func textFieldShouldReturn(_ textField: UITextField) -&gt; Bool {
          textField.resignFirstResponder()
          return true
      }
  
      func textFieldShouldClear(_ textField: UITextField) -&gt; Bool {
          return true
      }
  
      func textFieldShouldBeginEditing(_ textField: UITextField) -&gt; Bool {
          textField.inputFieldBorderBottom(color: Utils.getColor(),
                                       x: textField.center.x,
                                       y: textField.center.y,
                                       w: textField.frame.size.width,
                                       h: textField.frame.size.height)
          bottomView.chatTextField = textField
          return true
      }
      func textFieldShouldEndEditing(_ textField: UITextField) -&gt; Bool {
          textField.inputFieldBorderBottom(color: UIColor.lightGray,
                                       x: textField.center.x,
                                       y: textField.center.y,
                                       w: textField.frame.size.width,
                                       h: textField.frame.size.height)
          return true
      }
  
  
      @objc func chatTextSendButton(_ sender: AnyObject) {
          let chatText = bottomView.chatTextField.text!
  
          if (chatText != "") {
              let _mainViewController = MainViewController()
              let jsonData = _mainViewController.sendChatText(_registration_id: getRegistrationId(), _chat_text: chatText)
  
              if(jsonData["status"].string! == "success") {
                  socket.emit("client_to_server", with: ["update_chat"])
  
                  let chat = ChatEntity(text: jsonData["chat_text"].string!, time: "", userType: .I)
                  chats.append(chat)
                  tableView.reloadData()
  
                  bottomView.chatTextField.text = ""
              }
          }
      }
  }
  </code></pre>
  
  <p>I want to see "socket connected" message on my console when the app run. I think the socket is something wrong. But I have no idea what is wrong because no error message found. And I doubt if I need some setting in my info.plist. But, I don't make sense how to write.</p>
  
  <p>Please give me some advice?</p>