ios - Swift 3 单例管理器套接字连接

标签 ios swift sockets uiviewcontroller swift3

这是使用 Singleton 在 Swift 3 中管理套接字连接的正确方法吗?

我从哪里开始套接字连接,这样我就不必在 Viewcontroller 生命周期中每次都重新连接? Viewcontroller 不断地向我的服务器发送数据;我的应用程序是客户端及其收集数据;它从应用程序内的移动和发送方向、功率等获取数据。

我找了又找,找不到具体的例子;我只找到套接字库,但没有找到任何关于如何将它与 UIViewcontroller 一起使用的示例;还有,网上大部分例子都是用websockets,我不是

有什么建议吗?

我希望这会奏效:

        manager.messageReceived(message: "Testing...")

但我担心的是,在 UIViewcontroller 类内部,它会自动再次启动连接;另外,我不确定应该在什么时候检查连接是否丢失以及在哪里重新连接;因为我从不关闭套接字

谢谢

单例类:

import Darwin
import Foundation

class ChatManager {

    // Add property for socket

    private var control_socket: Int32
    private var address = "000.000.0.000"
    private var port = "0000"

    class var sharedInstance: ChatManager {
        struct Singleton { static let instance = ChatManager() }
        return Singleton.instance
    }

    init() {
        // Create the socket
        self.control_socket = connectToServer(atAddress: self.address, atPort: self.port)

    }

    func sendMessage(message: String) {
        // Push the message onto the socket
        _ = write(self.control_socket, message, message.characters.count)
    }

    // Delegate methods

    func messageReceived(message: String) {

        // Emit the message using NSNotificationCenter
    }
}

UIView Controller :

import Darwin
import Foundation
import UIKit
import Dispatch

class ViewController: UIViewController {

    @IBOutlet private weak var joystickMove: Joystick!
    @IBOutlet private weak var joystickRotate: Joystick!

    private var contour = Contours()
    private var contour_index: Int = 0

    private let manager = ChatManager.sharedInstance

    override func viewDidLoad() {
        super.viewDidLoad()
        createJoystick()
        createContours()
        createButton()
    }

    private func createJoystick() {

        var joystick = Joystick()

        let n: CGFloat = 100.0
        let x: CGFloat = (UIScreen.main.bounds.width/2) - (n/2.0)
        let y: CGFloat = UIScreen.main.bounds.height - (UIScreen.main.bounds.height/4.0)

        joystick.frame = CGRect(x: x, y: y, width: n, height: n)
        joystick.backgroundColor =  UIColor.clear

        joystick.substrateColor = UIColor.lightGray
        joystick.substrateBorderColor = UIColor.gray
        joystick.substrateBorderWidth = 1.0
        joystick.stickSize = CGSize(width: 50.0, height: 50.0)
        joystick.stickColor = UIColor.darkGray
        joystick.stickBorderColor = UIColor.black
        joystick.stickBorderWidth = 2.0
        joystick.fade = 0.5

        var packet = ""

        joystick.trackingHandler = { (data) -> () in

            let power = sqrt(pow(Double(data.velocity.x), 2.0) + pow(Double(data.velocity.y), 2.0))
            let theta = atan2(Double(-data.velocity.y), Double(data.velocity.x))
            let degrees = theta * (180.0 / M_PI)

            if degrees >= 55 && degrees <= 125 { // move forward
                packet = "\(1) \(1) \(power) \(power)"
            } else if degrees >= -125 && degrees <= -55 { // move backewards
                packet = "\(-1) \(-1) \(power) \(power)"
            } else if degrees >= -55 && degrees <= 55 { // turn right
                packet = "\(1) \(-1) \(power) \(power)"
            } else if (degrees >= 125 && degrees <= 180) && (degrees >= -180 && degrees <= -125) { // turn left
                packet = "\(-1) \(1) \(power) \(power)"
            }

        }

        manager.messageReceived(message: "Testing...")

        view.addSubview(joystick)
    }
}

最佳答案

既然是单例,有没有考虑在AppDelegate的应用函数中初始化SocketManager?然后它将在应用程序的生命周期内存在。

关于ios - Swift 3 单例管理器套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748454/

相关文章:

.net - 回合制多人游戏 : WCF or Socket?

java - 编写一个与 Iphone、Ipod 或 Ipad 交互的 Java 程序以同步文件(音乐、书籍、照片)?与 Itunes 的方式大致相同

ios - 如何在 iOS 中制作自定义对话框屏幕?

ios - NewsStand,需要时显示推送通知警报 View 吗?

ios - 根据屏幕大小快速更改按钮高度

c - 使用mmap从服务器接收文件

c - Linux:stdout 和 stderr 到套接字

ios - Firebase 与 Swift 3.0 UITableView

swift - 我可以强制 NSExpression 和 expressionValue 以某种方式假设 Doubles 而不是 Ints 吗?

ios - 在 swift : Difference between Array VS NSArray VS [AnyObject]