iOS 8 - Swift 2.0 Multipeer Connectivity wifi点对点网络简单聊天

时间:2015-10-13 23:19:48

标签: ios swift ios8 swift2 multipeer-connectivity

我正在尝试基于三个教程构建一个简单的点对点聊天程序 - onetwothree - 所有这些似乎都无法在xCode中运行7.0,Swift 2.0,部署目标为8.4。

具体来说,当我去浏览时,我会看到我要连接到的其他iOS设备。我点击它,我被其他设备提示接受。我接受了。然后它显示Connecting并稍后超时并断开连接。

import MultipeerConnectivity
import UIKit


class ViewController: UIViewController, MCSessionDelegate, MCBrowserViewControllerDelegate {

    var browser : MCBrowserViewController!
    var assistant : MCAdvertiserAssistant!
    var session : MCSession!
    var peerID: MCPeerID!

    @IBOutlet var chatView: UITextView!
    @IBOutlet var messageField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.peerID = MCPeerID(displayName: UIDevice.currentDevice().name)
        print( UIDevice.currentDevice().name )
        //self.session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .Required)
        self.session = MCSession(peer: self.peerID)
        self.session.delegate = self

        // create the browser viewcontroller with a unique service name
        self.browser = MCBrowserViewController(serviceType: "LCOC-Chat", session: self.session)
        self.browser.delegate = self

        // tell the assistant to start advertising our fabulous chat
        self.assistant = MCAdvertiserAssistant(serviceType:"LCOC-Chat", discoveryInfo:nil, session:self.session)
        self.assistant.start()
    }

    @IBAction func sendChat(sender: UIButton) {
        // Bundle up the text in the message field, and send it off to all
        // connected peers
        if self.session.connectedPeers.count > 0 {
            if let msg = self.messageField.text!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
                // 3
                do {
                    try self.session.sendData(msg, toPeers: self.session.connectedPeers, withMode: MCSessionSendDataMode.Unreliable)
                } catch let error as NSError {
                    let ac = UIAlertController(title: "Send error", message: error.localizedDescription, preferredStyle: .Alert)
                    ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
                    presentViewController(ac, animated: true, completion: nil)
                }
            }
        }
        //-----------------this might ne3ed to be UNCOMMENTED!!!
        //self.updateChat(self.messageField.text!, fromPeer: self.peerID)
        self.messageField.text = ""
    }
    @IBAction func showBrowser(sender: UIButton) {
        // Show the browser view controller
        self.presentViewController(self.browser, animated: true, completion: nil)
    }
    func updateChat(text : String, fromPeer peerID: MCPeerID) {
        // Appends some text to the chat view
        print("Incoming msg: \(text)")
        // If this peer ID is the local device's peer ID, then show the name
        // as "Me"
        var name : String
        switch peerID {
        case self.peerID:
            name = "Me"
        default:
            name = peerID.displayName
        }
        // Add the name to the message and display it
        let message = "\(name): \(text)\n"
        self.chatView.text = self.chatView.text + message
    }

    func browserViewControllerDidFinish(browserViewController: MCBrowserViewController) {
        dismissViewControllerAnimated(true, completion: nil)
    }
    func browserViewControllerWasCancelled(browserViewController: MCBrowserViewController) {
        dismissViewControllerAnimated(true, completion: nil)
    }
    func browserViewController(browserViewController: MCBrowserViewController, shouldPresentNearbyPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) -> Bool {
        return true
    }
    //---------------------------------------Session
    func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID) {
        // Called when a peer sends an NSData to us

        // This needs to run on the main queue
        dispatch_async(dispatch_get_main_queue()) {
            print("Incoming data:::")
            //let msg = NSString(data: data, encoding: NSUTF8StringEncoding)
            let msg = String(data: data, encoding: NSUTF8StringEncoding)!

            self.updateChat(msg, fromPeer: peerID)
        }
    }
    func session(session: MCSession, peer peerID: MCPeerID, didChangeState state: MCSessionState) {
        switch state {
        case MCSessionState.Connected:
            print("Connected: \(peerID.displayName)")

        case MCSessionState.Connecting:
            print("Connecting: \(peerID.displayName)")

        case MCSessionState.NotConnected:
            print("Not Connected: \(peerID.displayName)")
        }
    }
    // The following methods do nothing, but the MCSessionDelegate protocol
    // requires that we implement them.
    func session(session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, withProgress progress: NSProgress) {
    }
    func session(session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, atURL localURL: NSURL, withError error: NSError?) {

    }
    func session(session: MCSession, didReceiveStream stream: NSInputStream, withName streamName: String, fromPeer peerID: MCPeerID) {

    }
}

0 个答案:

没有答案