SocketIO

通过Pod安装第三方库Socket.IO-Client-Swift

use_frameworks!

target 'SocketIORTest' do
pod 'Socket.IO-Client-Swift'
end

以连接“https://socket-io-chat.now.sh/”测试服务

定义一些全局参数

import UIKit
import SocketIO

//let serverUrl = "http://chat.socket.io/"
let serverUrl = "https://socket-io-chat.now.sh/"

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

var socket:SocketIOClient? {
    let socket = manager.defaultSocket;
    return socket
}

登录服务器

import UIKit

class LoginController: UIViewController {

    @IBOutlet weak var usernameField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func login(_ sender: UIButton) {
        if (usernameField.text?.isEmpty)! { return }
        socket?.on(clientEvent: .connect, callback: { (datas, ack) in
            print("socket connected")
            socket?.emit("add user", self.usernameField.text!)
            socket?.on("login",callback: { (datas, ack) in
                print("登录成功")
                let chatController = ChatController.chatController()
                self.navigationController?.pushViewController(chatController, animated: true)
            })
        })

        socket?.connect()
    }
}

import UIKit
import SocketIO

class ChatController: UIViewController {

    @IBOutlet weak var enterField: UITextField!
    @IBOutlet weak var messageView: UITextView!

    class func chatController() -> ChatController {
        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
        let chatController = storyboard.instantiateViewController(withIdentifier: "ChatController") as! ChatController
        return chatController
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        socket?.on("user joined", callback: { (datas, ack) in
            print(ack)
            print("data0:\(datas[0])")
            guard let result = datas[0] as? [String : Any] else { return }

            self.messageView.text.append("\n\(String(describing: result["username"]!))加入,聊天室人数:\(String(describing: result["numUsers"]!))")
            self.messageView.contentOffset = CGPoint(x: 0, y: self.messageView.contentSize.height - self.messageView.frame.height)
        })

        socket?.on("user left", callback: { (datas, ack) in
            print(ack)
            print("data0:\(datas[0])")
            guard let result = datas[0] as? [String : Any] else { return }

            self.messageView.text.append("\n\(String(describing: result["username"]!))离开,聊天室人数:\(String(describing: result["numUsers"]!))")
            self.messageView.contentOffset = CGPoint(x: 0, y: self.messageView.contentSize.height - self.messageView.frame.height)
        })

        socket?.on("new message", callback: { (datas, ack) in
            print(ack)
            print("data0:\(datas[0])")
            guard let result = datas[0] as? [String : Any] else { return }

            self.messageView.text.append("\n\(String(describing: result["username"]!))说:\(String(describing: result["message"]!))")
            self.messageView.contentOffset = CGPoint(x: 0, y: self.messageView.contentSize.height - self.messageView.frame.height)
        })

        enterField.delegate = self
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        enterField.resignFirstResponder()
    }

    @IBAction func sendMessage(_ sender: Any) {
        //42["new message",{"username":"hhh","message":"dada"}]
        //socket?.emit("new message", with: [["message":enterField.text]])
        socket?.emit("new message", enterField.text!);
        enterField.text = "";
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

extension ChatController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        socket?.emit("new message", enterField.text!);
        enterField.text = "";
        return true
    }
}

results matching ""

    No results matching ""