Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 6.36 KB | None | 0 0
  1. //
  2. //  CommunicationViewController.swift
  3. //  TinkoffChat
  4. //
  5. //  Created by Антон Шуплецов on 19/03/2019.
  6. //  Copyright © 2019 Антон Шуплецов. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import MultipeerConnectivity
  11.  
  12.  
  13. class CommunicationViewController: UIViewController, MCSessionDelegate, MCBrowserViewControllerDelegate {
  14.     func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
  15.        
  16.         switch state {
  17.         case MCSessionState.connected:
  18.             print("Connecting: \(peerID.displayName)")
  19.            
  20.            
  21.         case MCSessionState.connecting:
  22.             print("Connecting: \(peerID.displayName)")
  23.            
  24.         case MCSessionState.notConnected:
  25.             print("Not Connected: \(peerID.displayName)")
  26.         }
  27.        
  28.         if mcSession.connectedPeers.count == 0{
  29.             sendButton.isEnabled = false
  30.         }
  31.         else{
  32.             sendButton.isEnabled = true
  33.         }
  34.        
  35.     }
  36.    
  37.     func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
  38.         DispatchQueue.main.async {
  39.             self.recMsg = NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue)! as String
  40.             self.chatTextView.text = self.chatTextView.text + self.recMsg
  41.         }
  42.        
  43.     }
  44.    
  45.     func session(_ session: MCSession, didReceive stream: InputStream, withName streamName: String, fromPeer peerID: MCPeerID) {
  46.        
  47.     }
  48.    
  49.     func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, with progress: Progress) {
  50.        
  51.     }
  52.    
  53.     func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL?, withError error: Error?) {
  54.        
  55.     }
  56.    
  57.     func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
  58.         dismiss(animated: true, completion: nil)
  59.     }
  60.    
  61.     func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
  62.         dismiss(animated: true, completion: nil)
  63.     }
  64.    
  65.    
  66.     var peerID : MCPeerID!
  67.     var mcSession: MCSession!
  68.     var mcAdvertiserAssistant: MCAdvertiserAssistant!
  69.    
  70.    
  71.     @IBOutlet var chatTextView: UITextView!
  72.     @IBOutlet var inputTextField: UITextField!
  73.     @IBOutlet var sendButton: UIButton!
  74.     @IBOutlet var connectionButton: UIBarButtonItem!
  75.    
  76.    
  77.    
  78.     @IBAction func sendButtonTaped(_ sender: Any) {
  79.        
  80.         if inputTextField.text != ""{
  81.             sendMsg = "\n\(peerID.displayName): \(inputTextField.text)\n"
  82.            
  83.             let message = sendMsg.data(using: String.Encoding.utf8, allowLossyConversion: false)
  84.            
  85.             do{
  86.                 try self.mcSession.send(message!, toPeers: self.mcSession.connectedPeers, with: .reliable)
  87.             }
  88.             catch{
  89.                 print("Error to send msg")
  90.             }
  91.            
  92.             chatTextView.text = chatTextView.text + "\nMe:\(inputTextField.text!)\n"
  93.             inputTextField.text = ""
  94.            
  95.         }
  96.         else{
  97.             let emptyAlert = UIAlertController(title: "You have not entered any text", message: nil, preferredStyle: .alert)
  98.            
  99.             emptyAlert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
  100.            
  101.             self.present(emptyAlert,animated: true,completion: nil)
  102.         }
  103.        
  104.        
  105.     }
  106.    
  107.     @IBAction func connectionButtonTaped(_ sender: Any) {
  108.         if mcSession.connectedPeers.count == 0 && !hosting{
  109.             let connectionActionSheet = UIAlertController(title: "Our chat", message: "Do you want to host or join chat?", preferredStyle: .actionSheet)
  110.            
  111.             connectionActionSheet.addAction(UIAlertAction(title: "Host chat", style: .default, handler: { (action: UIAlertAction) in
  112.                 self.mcAdvertiserAssistant = MCAdvertiserAssistant(serviceType: "Tinkoff-Chat", discoveryInfo: nil, session: self.mcSession)
  113.                 self.mcAdvertiserAssistant.start()
  114.                 self.hosting = true
  115.             }))
  116.            
  117.             connectionActionSheet.addAction(UIAlertAction(title: "Join chat", style: .default, handler: { (action: UIAlertAction) in
  118.                 let mcBrowser = MCBrowserViewController(serviceType: "Tinkoff-chat", session: self.mcSession)
  119.                 mcBrowser.delegate = self
  120.                 self.present(mcBrowser,animated: true,completion: nil)
  121.             }))
  122.            
  123.             connectionActionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
  124.            
  125.             self.present(connectionActionSheet,animated: true,completion: nil)
  126.            
  127.         }
  128.         else if mcSession.connectedPeers.count == 0 && hosting{
  129.            
  130.             let waitActionSheet = UIAlertController(title: "Waiting...", message: "Whating for other to join the chat", preferredStyle: .actionSheet)
  131.            
  132.             waitActionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
  133.            
  134.             self.present(waitActionSheet,animated: true,completion: nil)
  135.            
  136.            
  137.         }
  138.        
  139.         else{
  140.             let dissconectActionSheet = UIAlertController(title: "Are you sure you want to disconnect", message: nil, preferredStyle: .actionSheet)
  141.            
  142.             dissconectActionSheet.addAction(UIAlertAction(title: "Dissconect", style: .destructive, handler: { (action: UIAlertAction) in
  143.                 self.mcSession.disconnect()
  144.             }))
  145.            
  146.             dissconectActionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
  147.            
  148.             self.present(dissconectActionSheet,animated: true,completion: nil)
  149.         }
  150.     }
  151.        
  152.    
  153.    
  154.     var recMsg: String!
  155.     var sendMsg: String!
  156.     var hosting: Bool!
  157.  
  158.     override func viewDidLoad() {
  159.         super.viewDidLoad()
  160.  
  161.        
  162.         peerID = MCPeerID(displayName: "TOHA")
  163.         mcSession = MCSession(peer: peerID)
  164.         mcSession.delegate = self
  165.        
  166.       sendButton.isEnabled = false
  167.         chatTextView.isEditable = false
  168.         hosting = false
  169.         mcSession.disconnect()
  170.        
  171.  
  172.        
  173.        
  174.     }
  175.    
  176.  
  177.  
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement