mirror of
https://github.com/oonyeje/Get-Hip.git
synced 2025-12-25 03:37:40 +00:00
worked on the connection, still buggy but I believe that is just the framework. Working on streaming content now
This commit is contained in:
parent
25375c899f
commit
fb39de92cc
@ -60,13 +60,24 @@ class CurrentlyPlayingViewController: UIViewController{
|
||||
self.audioPlayer = AVPlayer(URL: self.party.currentSong.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL)
|
||||
|
||||
// Do any additional setup after loading the view.
|
||||
self.songImg.image = self.party.currentSong.valueForProperty(MPMediaItemPropertyArtwork).imageWithSize(songImg.frame.size)
|
||||
self.titleLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyTitle) as? String!)!
|
||||
self.artistAndAlbumLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyArtist) as? String!)! + " - " + (self.party.currentSong.valueForProperty(MPMediaItemPropertyAlbumTitle) as? String!)!
|
||||
self.audioPlayer.volume = self.volCtrl.value
|
||||
self.maxLabel.text = String(stringInterpolationSegment: self.audioPlayer.currentItem.duration.value)
|
||||
self.audioPlayer.play()
|
||||
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateLabels"), userInfo: nil, repeats: true)
|
||||
|
||||
if(self.party.role == PeerType.Host_Creator){
|
||||
|
||||
self.songImg.image = self.party.currentSong.valueForProperty(MPMediaItemPropertyArtwork).imageWithSize(songImg.frame.size)
|
||||
self.titleLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyTitle) as? String!)!
|
||||
self.artistAndAlbumLabel.text = (self.party.currentSong.valueForProperty(MPMediaItemPropertyArtist) as? String!)! + " - " + (self.party.currentSong.valueForProperty(MPMediaItemPropertyAlbumTitle) as? String!)!
|
||||
self.audioPlayer.volume = self.volCtrl.value
|
||||
self.maxLabel.text = String(stringInterpolationSegment: self.audioPlayer.currentItem.duration.value)
|
||||
self.audioPlayer.play()
|
||||
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateLabels"), userInfo: nil, repeats: true)
|
||||
}else if (self.party.role == PeerType.Guest_Invited){
|
||||
|
||||
self.songImg.image = self.party.currentSongIMG
|
||||
self.titleLabel.text = (self.party.currentSongTitle)
|
||||
self.artistAndAlbumLabel.text = (self.party.currentSongArtistAlbum)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ class InvitedToPartyViewController: UIViewController , PartyServiceManagerDelega
|
||||
var partyData: PartyServiceManager!
|
||||
var inviteHandle: ((Bool, MCSession!) -> Void)!
|
||||
private var fromPeer: MCPeerID!
|
||||
var shouldEndInvite = false
|
||||
|
||||
@IBOutlet var img: UIImageView!
|
||||
@IBOutlet var inviteTxt: UITextView!
|
||||
@ -63,6 +64,12 @@ class InvitedToPartyViewController: UIViewController , PartyServiceManagerDelega
|
||||
|
||||
}
|
||||
|
||||
override func viewWillAppear(animated: Bool) {
|
||||
if(self.shouldEndInvite == true){
|
||||
self.dismissViewControllerAnimated(true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
override func didReceiveMemoryWarning() {
|
||||
super.didReceiveMemoryWarning()
|
||||
// Dispose of any resources that can be recreated.
|
||||
|
||||
@ -34,15 +34,22 @@ class JoiningPartyViewController: UIViewController ,PartyServiceManagerDelegate{
|
||||
self.user = user
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
// MARK: - Navigation
|
||||
|
||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
||||
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
|
||||
// Get the new view controller using segue.destinationViewController.
|
||||
// Pass the selected object to the new view controller.
|
||||
|
||||
if segue.identifier == "EnteringPartySegue"{
|
||||
|
||||
let vc: CurrentlyPlayingViewController = (segue.destinationViewController as? CurrentlyPlayingViewController)!
|
||||
|
||||
vc.setData(self.party, user: self.user, friends: self.friends as! [FriendData], request: self.request as! [FriendData])
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -67,7 +74,23 @@ extension JoiningPartyViewController: PartyServiceManagerDelegate {
|
||||
}
|
||||
|
||||
func didRecieveInstruction(dictionary: Dictionary<String, AnyObject>){
|
||||
let (instruction, fromPeer) = self.party.decodeInstruction(dictionary)
|
||||
|
||||
if (instruction == "disconnect") {
|
||||
self.party.session.disconnect()
|
||||
|
||||
if let vc = self.parentViewController as? InvitedToPartyViewController{
|
||||
vc.shouldEndInvite = true
|
||||
}
|
||||
|
||||
self.dismissViewControllerAnimated(true, completion: nil)
|
||||
}
|
||||
|
||||
if (instruction == "start_party"){
|
||||
self.performSegueWithIdentifier("EnteringPartySegue", sender: self)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -51,6 +51,7 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource,
|
||||
//NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateThumbnail:", name: "peerConnected", object: nil)
|
||||
self.timerLabel.text = String(counter)
|
||||
self.timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)
|
||||
self.party.delegate = self
|
||||
}
|
||||
|
||||
override func didReceiveMemoryWarning() {
|
||||
@ -111,6 +112,35 @@ class LoadingPartyViewController: UIViewController, UICollectionViewDataSource,
|
||||
// Get the new view controller using segue.destinationViewController.
|
||||
// Pass the selected object to the new view controller.
|
||||
if(segue.identifier == "CurrentlyPlayingSegue"){
|
||||
|
||||
//ends invitations with outstanding peers
|
||||
for invited in self.party.invitedFriends {
|
||||
var joinedPeer: MCPeerID? = self.party.connectedPeersDictionary[invited.displayName] as? MCPeerID
|
||||
|
||||
if joinedPeer == nil {
|
||||
for aPeer in self.party.foundPeers {
|
||||
|
||||
if aPeer.displayName == invited.displayName {
|
||||
self.party.session.cancelConnectPeer(aPeer)
|
||||
self.party.disconnectedPeersDictionary.setValue(aPeer, forKey: aPeer.displayName)
|
||||
break
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var dictionary: [String: String] = ["sender": self.party.myPeerID.displayName, "instruction": "start_Party"]
|
||||
self.party.sendInstruction(dictionary, toPeer: joinedPeer! )
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*if !(self.session.sendData(dataToSend, toPeers: peersArray as [AnyObject], withMode: MCSessionSendDataMode.Reliable, error: &error)){
|
||||
println(error?.localizedDescription)
|
||||
return false
|
||||
}*/
|
||||
|
||||
let vc: CurrentlyPlayingViewController = (segue.destinationViewController as? CurrentlyPlayingViewController)!
|
||||
vc.setData(self.party, user: self.usr, friends: self.frnds, request: self.requestData)
|
||||
}
|
||||
@ -134,35 +164,48 @@ extension LoadingPartyViewController: PartyServiceManagerDelegate {
|
||||
}
|
||||
|
||||
func connectedWithPeer(peerID: MCPeerID) {
|
||||
println(self.party.myPeerID.displayName + " connected to " + peerID.displayName)
|
||||
var i = 0
|
||||
for(index, aFriend) in enumerate(self.party.invitedFriends) {
|
||||
if aFriend.displayName == peerID.displayName {
|
||||
i = index
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
let cell: InvitedCollectionViewCell = self.invitedFriends.dequeueReusableCellWithReuseIdentifier("InvitedCollectionCell", forIndexPath: NSIndexPath(index: i)) as! InvitedCollectionViewCell
|
||||
|
||||
cell.alpha = 1.0
|
||||
|
||||
|
||||
}
|
||||
|
||||
func didRecieveInstruction(dictionary: Dictionary<String, AnyObject>){
|
||||
//extract data from dictionary
|
||||
println("mark 3")
|
||||
let data = dictionary["data"] as? NSData
|
||||
let fromPeer = dictionary["fromPeer"] as! MCPeerID
|
||||
let (instruction, fromPeer) = self.party.decodeInstruction(dictionary)
|
||||
|
||||
if self.party.disconnectedPeersDictionary[fromPeer.displayName] != nil {
|
||||
|
||||
var dictionary: [String: String] = ["sender": self.party.myPeerID.displayName, "instruction": "disconnect"]
|
||||
self.party.sendInstruction(dictionary, toPeer: fromPeer)
|
||||
}else{
|
||||
|
||||
//convert data to dictionary object with instruction
|
||||
let dataDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! Dictionary<String, String>
|
||||
|
||||
//check if this is an instruction being sent
|
||||
if let instruction = dataDictionary["instruction"] {
|
||||
println(instruction)
|
||||
if (instruction == "joined_party") {
|
||||
println(instruction)
|
||||
|
||||
var i = 0
|
||||
for(index, aFriend) in enumerate(self.party.invitedFriends) {
|
||||
if aFriend.displayName == fromPeer.displayName {
|
||||
i = index
|
||||
break
|
||||
}
|
||||
}
|
||||
self.party.connectedPeersDictionary.setValue(fromPeer, forKey: fromPeer.displayName)
|
||||
//let cell: InvitedCollectionViewCell = self.invitedFriends.dequeueReusableCellWithReuseIdentifier("InvitedCollectionCell", forIndexPath: NSIndexPath(index: i)) as! InvitedCollectionViewCell
|
||||
|
||||
//cell.alpha = 1.0
|
||||
println(instruction)
|
||||
|
||||
|
||||
//prepares party for the guest peers
|
||||
|
||||
//sends music info incuding, title, artist, album, and image
|
||||
var dictionary: [String: AnyObject] = ["sender": self.party.myPeerID.displayName, "instruction": "set_up_song", "songTitle": (self.party.currentSong.valueForProperty(MPMediaItemPropertyTitle) as? String!)!, "songArtistAndAlbum": (self.party.currentSong.valueForProperty(MPMediaItemPropertyArtist) as? String!)! + " - " + (self.party.currentSong.valueForProperty(MPMediaItemPropertyAlbumTitle) as? String!)!, "songImage": UIImagePNGRepresentation(self.party.currentSong.valueForProperty(MPMediaItemPropertyArtwork).imageWithSize(songImg.frame.size))]
|
||||
|
||||
self.party.sendInstruction(dictionary, toPeer: fromPeer)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -57,9 +57,14 @@ class PartyServiceManager: NSObject {
|
||||
var connectedPeersDictionary = NSMutableDictionary()
|
||||
var disconnectedPeersDictionary = NSMutableDictionary()
|
||||
|
||||
//party variables
|
||||
//party-creator variables
|
||||
var currentSong: MPMediaItem! = nil
|
||||
|
||||
//party-guest variables
|
||||
var currentSongTitle: String!
|
||||
var currentSongArtistAlbum: String!
|
||||
var currentSongIMG: UIImage!
|
||||
|
||||
|
||||
|
||||
//Peer Initializer
|
||||
@ -94,7 +99,7 @@ class PartyServiceManager: NSObject {
|
||||
}
|
||||
|
||||
//Party Instruction Sender
|
||||
func sendInstruction(dictionary: Dictionary<String, String>, toPeer: MCPeerID) -> Bool {
|
||||
func sendInstruction(dictionary: Dictionary<String, AnyObject>, toPeer: MCPeerID) -> Bool {
|
||||
|
||||
let dataToSend = NSKeyedArchiver.archivedDataWithRootObject(dictionary)
|
||||
let peersArray = NSArray(object: toPeer)
|
||||
@ -108,6 +113,32 @@ class PartyServiceManager: NSObject {
|
||||
return true
|
||||
}
|
||||
|
||||
func decodeInstruction(dictionary: Dictionary<String, AnyObject>) -> (String, MCPeerID) {
|
||||
//extract data from dictionary
|
||||
println("mark 3")
|
||||
let data = dictionary["data"] as? NSData
|
||||
let fromPeer = dictionary["fromPeer"] as! MCPeerID
|
||||
|
||||
//convert data to dictionary object with instruction
|
||||
let dataDictionary = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as! Dictionary<String, AnyObject>
|
||||
|
||||
//check if this is an instruction being sent
|
||||
var instruction: String! = dataDictionary["instruction"] as! String
|
||||
|
||||
if instruction != nil {
|
||||
println(instruction)
|
||||
if(instruction == "set_up_song"){
|
||||
self.currentSongTitle = dataDictionary["songTitle"] as! String
|
||||
self.currentSongArtistAlbum = dataDictionary["songArtistAndAlbum"] as! String
|
||||
self.currentSongIMG = UIImage(data: (dataDictionary["songImage"] as! NSData))
|
||||
}
|
||||
return (instruction!, fromPeer)
|
||||
}else{
|
||||
return ("not_an_instruction", fromPeer)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Listening methods
|
||||
func setAdvertiser(){
|
||||
self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: self.myPeerID, discoveryInfo: nil, serviceType: self.PartyServiceType)
|
||||
@ -273,6 +304,10 @@ extension PartyServiceManager: MCSessionDelegate{
|
||||
self.delegate?.connectedWithPeer(peerID)
|
||||
|
||||
}
|
||||
|
||||
if(state == MCSessionState.NotConnected){
|
||||
NSLog("%@", "peer \(peerID) didChangeState: \(state.stringValue())")
|
||||
}
|
||||
}
|
||||
|
||||
func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) {
|
||||
@ -281,6 +316,7 @@ extension PartyServiceManager: MCSessionDelegate{
|
||||
let dictionary: [String: AnyObject] = ["data": data, "fromPeer": peerID]
|
||||
self.delegate?.didRecieveInstruction(dictionary)
|
||||
|
||||
|
||||
}
|
||||
|
||||
func session(session: MCSession!, didReceiveStream stream: NSInputStream!, withName streamName: String!, fromPeer peerID: MCPeerID!) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user