// // IHLoginView.swift // Inhealth // // Created by weclouds on 2019/12/10. // Copyright © 2019 weclouds. All rights reserved. // import UIKit import PKHUD import SwiftyJSON //清楚password let kNotificationIHLoginViewClearPassword = "kNotificationIHLoginViewClearPassword" //改变角色 let kNotifactionIHLoginViewChangeRole = "kNotifactionIHLoginViewChangeRole" @objc protocol IHLoginViewDelegate : NSObjectProtocol{ @objc optional func signIn(with account:String?,password:String?) @objc optional func signUp() //role ;0表示客人 账户 1 表示管理员账户 @objc optional func changeAuthority(_ role:Int) @objc optional func goPrivacyPolicy() @objc optional func jumpToClassgatewayCtr(gatewayList list : [Any]) } class IHLoginView: UIView { weak var loginDelegate : IHLoginViewDelegate? var role :String? = "0"{ didSet{ //管理员 if let role = self.role { authoritySelected(role) } } } lazy var clientSocket: GCDAsyncUdpSocket? = { var mainQueue = DispatchQueue.main var clientSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: mainQueue) return clientSocket }() var modelList = [gatewayInfor]() //提示框 @IBOutlet weak var tipsLabel: UILabel! // 提示语 @IBOutlet weak var accountTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! //权限选择按钮 @IBOutlet weak var authorityBtn: UIButton! @IBOutlet weak var signInBtn: UIButton! //注册按钮 @IBOutlet weak var signUpBtn: UIButton! @IBOutlet weak var privacyBtn: UIButton! var isSearchGateway : Bool = false var isOnce : Bool = false func hexStringToInt(from:String) -> Int { let str = from.uppercased() var sum = 0 for i in str.utf8 { sum = sum * 16 + Int(i) - 48 // 0-9 从48开始 if i >= 65 { // A-Z 从65开始,但有初始值10,所以应该是减去55 sum -= 7 } } return sum } override func awakeFromNib() { super.awakeFromNib() // let str = "12a102050100010169" as NSString // let count = str.length / 2 // var arr = [Int]() // for i in 0.. String? { var address: String? // get list of all interfaces on the local machine var ifaddr: UnsafeMutablePointer? = nil guard getifaddrs(&ifaddr) == 0 else { return nil } guard let firstAddr = ifaddr else { return nil } for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) { let interface = ifptr.pointee // Check for IPV4 or IPV6 interface let addrFamily = interface.ifa_addr.pointee.sa_family if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) { // Check interface name let name = String(cString: interface.ifa_name) if name == "en0" { // Convert interface address to a human readable string var addr = interface.ifa_addr.pointee var hostName = [CChar](repeating: 0, count: Int(NI_MAXHOST)) getnameinfo(&addr, socklen_t(interface.ifa_addr.pointee.sa_len), &hostName, socklen_t(hostName.count), nil, socklen_t(0), NI_NUMERICHOST) address = String(cString: hostName) } } } freeifaddrs(ifaddr) return address } deinit { NotificationCenter.default.removeObserver(self) } @objc func notifyRegisterSuccess(_ notifaction : Notification){ let username = notifaction.object as! String self.accountTextField.text = username self.passwordTextField.text = "" } @objc func notifyClearPassword() { self.passwordTextField.text = "" } @objc func notifyChangeRole(notif:Notification){ let role = notif.object as? String if role == "1" { self.tipsLabel.text = "Login as an administrator !" // self.signUpBtn.isHidden = true self.authorityBtn.isSelected = true }else{ self.tipsLabel.text = "The best service for you !" //self.signUpBtn.isHidden = false self.authorityBtn.isSelected = false } } override func layoutSubviews() { super.layoutSubviews() //xib的frame需要在layoutsubViews中设置 不然有问题 frame = CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: KSCREENHEIGHT) } @IBAction func installBtn(_ sender: UIButton) { //发送命令 sendCommandGetGateway() HUD.flash(.progress) // self.loginDelegate?.jumpToClassgatewayCtr?(gatewayList: modelList) // if isSearchGateway == true && modelList.count > 0{ // HUD.hide() // self.loginDelegate?.jumpToClassgatewayCtr?(gatewayList: modelList) // }else{ // HUD.flash(.label("未发现网关"), delay: 0.5) // } } @IBAction func signInAction(_ sender: Any) { if let delegate = loginDelegate { delegate.signIn?(with: self.accountTextField.text, password: self.passwordTextField.text) } } //325 850 850 @IBAction func privacyPolicyAction(_ sender: Any) { if let delegate = loginDelegate { delegate.goPrivacyPolicy?() } } @IBAction func signUpAction(_ sender: Any) { if let delegate = loginDelegate { delegate.signUp?() } } @IBAction func authoritySelected(_ sender: UIButton) { sender.isSelected = !sender.isSelected if sender.isSelected == true { self.tipsLabel.text = "Login as an administrator !" // self.signUpBtn.isHidden = true if let delegate = loginDelegate { delegate.changeAuthority?(1) } }else{ self.tipsLabel.text = "The best service for you !" // self.signUpBtn.isHidden = false if let delegate = loginDelegate { delegate.changeAuthority?(0) } } } //这里已废弃 func authoritySelected(_ role: String) { if role == "1" { self.tipsLabel.text = "Login as an administrator !" // self.signUpBtn.isHidden = true }else{ self.tipsLabel.text = "The best service for you !" // self.signUpBtn.isHidden = false } } @IBAction func privacySelected(_ sender: UIButton) { sender.isSelected = !sender.isSelected if sender.isSelected == true { signInBtn.isEnabled = true signInBtn.backgroundColor = UIColor(hexString: "#573F95") }else{ signInBtn.isEnabled = false signInBtn.backgroundColor = UIColor.lightGray } } } extension IHLoginView:GCDAsyncUdpSocketDelegate{ func udpSocket(_ sock: GCDAsyncUdpSocket, didNotConnect error: Error?) { log.debug("didNotConnect") } func udpSocket(_ sock: GCDAsyncUdpSocket, didConnectToAddress address: Data) { log.debug("didConnectToAddress:\(String(data: address, encoding: String.Encoding.utf8))") } func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) { let result = data.string(encoding: .utf8) // isSearchGateway = true if let result = result{ // for i in 0..<15 { // var model = gatewayInfor() // model.SN = "EE20200807000\(i)" // model.SW = "1.0.2.30" // model.HW = "0003AA01" // model.ip = "10.0.0.9" // model.port = "37032" // modelList.append(model) // } if result != "scanning" { modelList.removeAll() log.debug("网关返回的信息:\(result)") do { modelList.removeAll() let json = try JSON(data: data) var model = gatewayInfor() //"{\n\t\"SN\":\"EE202008070001\",\n\t\"SW\":\"1.0.2.30\",\n\t\"HW\":\"0003AA01\",\n\t\"ip\":\"10.0.0.9\",\n\t\"port\":\"37032\"\n\t}") model.SN = json["SN"].stringValue model.SW = json["SW"].stringValue model.HW = json["HW"].stringValue model.ip = json["ip"].stringValue model.port = json["port"].string modelList.append(model) } catch { } } } HUD.hide() if modelList.count > 0 { self.loginDelegate?.jumpToClassgatewayCtr?(gatewayList: modelList) }else{ HUD.flash(.label("未发现网关"), delay: 0.5) } log.debug("didReceive:\(result)") } func udpSocket(_ sock: GCDAsyncUdpSocket, didSendDataWithTag tag: Int) { log.debug("didSendDataWithTag") // DispatchQueue.main.asyncAfter(deadline: .now()+1) { // // } } func udpSocketDidClose(_ sock: GCDAsyncUdpSocket, withError error: Error?) { log.debug("withError") } func udpSocket(_ sock: GCDAsyncUdpSocket, didNotSendDataWithTag tag: Int, dueToError error: Error?) { log.debug("didNotSendDataWithTag") } } extension IHLoginView:UITextFieldDelegate{ // func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // let currentText = accountTextField.text ?? "" // let newText = (currentText as NSString).replacingCharacters(in: range, with: string) // if newText == "" { // self.passwordTextField.text = "" // } // return true // } }