Socket must be a property or variable of your class to make sure it adheres.
If you select it only in the function stack, it will fall out of scope and delegates will never receive a call
Here is the code I used in my project just in case
import UIKit //import WebSocket import Starscream class ViewController: UIViewController,WebSocketDelegate,WebSocketPongDelegate { @IBOutlet weak var wsURL: UITextField! @IBOutlet weak var wsConsole: UITextView! @IBOutlet weak var wsMessage: UITextField! var socket:WebSocket! override func viewDidLoad() { super.viewDidLoad() // var webSocketObj:WebSocket = WebSocket() // webSocketObj.ipAddressText = "10.12.1.101" // webSocketObj.portText = "8888" // webSocketObj.dataToSendText = "hi" // webSocketObj.dataRecievedTextView = "" // webSocketObj.connectedLabel = "" // webSocketObj.connectToServer() wsURL.text="ws://10.12.1.101:8888/" wsMessage.text="Hi" self.navigationItem.leftBarButtonItem?.title="Connect" self.navigationItem.rightBarButtonItem?.enabled=false // Do any additional setup after loading the view, typically from a nib. } func websocketDidConnect(socket: WebSocket){ wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got connected") self.navigationItem.leftBarButtonItem?.title="Disconnect" self.navigationItem.rightBarButtonItem?.enabled=true } func websocketDidDisconnect(socket: WebSocket, error: NSError?){ wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got disconnected") self.navigationItem.leftBarButtonItem?.title="Connect" self.navigationItem.rightBarButtonItem?.enabled=false } func websocketDidReceiveMessage(socket: WebSocket, text: String){ wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket got a message from server:").stringByAppendingString(text) } func websocketDidReceiveData(socket: WebSocket, data: NSData){ print("websocket received data",data) } @IBAction func writeText(sender: UIBarButtonItem) { wsConsole.text = wsConsole.text .stringByAppendingString("\n Client sent a message:").stringByAppendingString(wsMessage.text!) socket.writeString(wsMessage.text!) self.view .endEditing(true) } @IBAction func disconnect(sender: UIBarButtonItem) { self.view .endEditing(true) if socket == nil{ connect(sender) } else if socket.isConnected { socket.disconnect() } else { connect(sender) } } func connect(sender:UIBarButtonItem){ socket = WebSocket(url: NSURL(string:wsURL.text!)!) socket.delegate = self socket.connect() } func websocketDidReceivePong(socket: WebSocket){ wsConsole.text = wsConsole.text .stringByAppendingString("\n websocket received pong") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
Here is the link to the storyboard if you want
source share