2016-05-05 41 views
6

La variabile non è nulla, ho una buona connessione e l'url è corretto ma non viene chiamato alcun metodo delegato. Anche io sono l'attuazione WebSocketDelegateI delegati di Starscream non vengono chiamati

let socket = WebSocket(url: NSURL(string: "UrlHere:port/")!) 
      socket.delegate = self; 
      socket.connect() 
      if socket.isConnected { 
       print("websocket is connected") 
      } 

    func websocketDidConnect(ws: WebSocket) { 
     print("websocket is connected") 
    } 

    func websocketDidDisconnect(ws: WebSocket, error: NSError?) { 
     if let e = error { 
      print("websocket is disconnected: \(e.localizedDescription)") 
     } else { 
      print("websocket disconnected") 
     } 
    } 

    func websocketDidReceiveMessage(ws: WebSocket, text: String) { 
     print("Received text: \(text)") 
    } 

    func websocketDidReceiveData(ws: WebSocket, data: NSData) { 
     print("Received data: \(data.length)") 
    } 

    func websocketDidReceivePong(socket: WebSocket) { 
     print("Got pong!") 
    } 
+1

socket sia una variabile membro della classe I, e non una variabile locale per un metodo? – Gruntcakes

+0

Rendendolo una proprietà risolto il mio problema. grazie – user1079052

risposta

8

Socket dovrebbe essere una proprietà o una variabile della classe per assicurarsi che resta nella zona.

Se si alloca solo su una funzione Stack cadrà fuori del campo di applicazione ei delegati potranno mai ottenere chiamato

Ecco il codice che ho usato nel mio progetto nel caso in cui

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. 
    } 


} 

Ecco lo link nello storyboard nel caso in cui si desideri che