Open saroar opened 6 years ago
is anybody can idea how i can convert it into chatto ?
import UIKit
import Starscream
final class ViewController: UIViewController {
// MARK: - Properties
var username = ""
var socket = WebSocket(url: URL(string: "ws://localhost:8181/api/v1/chat")!, protocols: ["chat"])
// MARK: - IBOutlets
@IBOutlet var emojiLabel: UILabel!
@IBOutlet var usernameLabel: UILabel!
// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
socket.delegate = self
socket.connect()
navigationItem.hidesBackButton = true
}
deinit {
socket.disconnect(forceTimeout: 0)
socket.delegate = nil
}
}
// MARK: - IBActions
extension ViewController {
@IBAction func selectedEmojiUnwind(unwindSegue: UIStoryboardSegue) {
guard let viewController = unwindSegue.source as? CollectionViewController,
let emoji = viewController.selectedEmoji() else {
return
}
sendMessage(emoji)
}
}
// MARK: - FilePrivate
extension ViewController {
fileprivate func sendMessage(_ message: String) {
socket.write(string: message)
}
fileprivate func messageReceived(_ message: String, senderName: String) {
emojiLabel.text = message
usernameLabel.text = senderName
}
}
// MARK: - WebSocketDelegate
extension ViewController : WebSocketDelegate {
public func websocketDidConnect(_ socket: Starscream.WebSocket) {
socket.write(string: username)
}
public func websocketDidDisconnect(_ socket: Starscream.WebSocket, error: NSError?) {
performSegue(withIdentifier: "websocketDisconnected", sender: self)
}
/* Message format:
* {"type":"message","data":{"time":1472513071731,"text":"😍","author":"iPhone Simulator","color":"orange"}}
*/
public func websocketDidReceiveMessage(_ socket: Starscream.WebSocket, text: String) {
guard let data = text.data(using: .utf16),
let jsonData = try? JSONSerialization.jsonObject(with: data),
let jsonDict = jsonData as? [String: Any],
let messageType = jsonDict["type"] as? String else {
return
}
if messageType == "message",
let messageData = jsonDict["data"] as? [String: Any],
let messageAuthor = messageData["author"] as? String,
let messageText = messageData["text"] as? String {
messageReceived(messageText, senderName: messageAuthor)
}
}
public func websocketDidReceiveData(_ socket: Starscream.WebSocket, data: Data) {
// Noop - Must implement since it's not optional in the protocol
}
}