Search code examples
iosstreamingswift4peer

How to start receiving streaming data after stream session started with Swift 4


I have been searching how to start receiving data after stream has been started for a while but there must be something which is missed. In following function I am having stream name from other peer but unable to start receiving stream data.

func stream(_ aStream: Stream, handle eventCode: Stream.Event) function is never called.

Besides, outputStream!.streamStatus.rawValue returns 2 at the sender side after stream name has been received at receiver side when we try to send stream data.

rawValue == 2 means; The remote end of the connection can’t be contacted, or the connection has been severed for some other reason.

But we are receiving stream name nevertheless.

 func session(_ session: MCSession, didReceive stream: InputStream,      withName streamName: String, fromPeer peerID: MCPeerID) {


    print("received stream = \(streamName)")


    stream.delegate = self as? StreamDelegate
    stream.schedule(in: RunLoop.main, forMode: RunLoop.Mode.default)
    stream.open()

}


func stream(_ aStream: Stream, handle eventCode: Stream.Event){
   // Code to handle stream data.

}

Solution

  • Application delegate list was like this

    class ViewController:   UIViewController,
                        MCSessionDelegate,
                        MCNearbyServiceAdvertiserDelegate,
                        MCNearbyServiceBrowserDelegate,
                       {
    

    "StreamDelegate" should have been added

    class ViewController:   UIViewController,
                        MCSessionDelegate,
                        MCNearbyServiceAdvertiserDelegate,
                        MCNearbyServiceBrowserDelegate,
                        StreamDelegate{
    

    After that

     func session(_ session: MCSession, didReceive stream: InputStream,      withName streamName: String, fromPeer peerID: MCPeerID) {}
    

    started to get streams.