1 // Copyright 2015-present 650 Industries. All rights reserved. 2 3 import Foundation 4 5 class DevMenuPackagerConnectionHandler { 6 weak var manager: DevMenuManager? 7 8 init(manager: DevMenuManager) { 9 self.manager = manager 10 } 11 12 func setup() { 13 // `RCT_DEV` isn't available in Swift, that's why we used `DEBUG` instead. 14 // It shouldn't diverge, because of the definition of `RCT_DEV`. 15 #if DEBUG 16 RCTPackagerConnection 17 .shared() 18 .addNotificationHandler( 19 self.sendDevCommandNotificationHandler, 20 queue: DispatchQueue.main, 21 forMethod: "sendDevCommand" 22 ) 23 24 RCTPackagerConnection 25 .shared() 26 .addNotificationHandler( 27 self.devMenuNotificationHanlder, 28 queue: DispatchQueue.main, 29 forMethod: "devMenu" 30 ) 31 #endif 32 } 33 34 @objc 35 func sendDevCommandNotificationHandler(_ params: [String: Any]) { 36 guard let manager = manager, 37 let command = params["name"] as? String, 38 let bridge = manager.delegate?.appBridge?(forDevMenuManager: manager) as? RCTBridge 39 else { 40 return 41 } 42 43 let devDelegate = DevMenuDevOptionsDelegate(forBridge: bridge) 44 45 switch command { 46 case "reload": 47 devDelegate.reload() 48 case "toggleDevMenu": 49 self.manager?.toggleMenu() 50 case "toggleRemoteDebugging": 51 devDelegate.toggleRemoteDebugging() 52 case "toggleElementInspector": 53 devDelegate.toggleElementInsector() 54 case "togglePerformanceMonitor": 55 devDelegate.togglePerformanceMonitor() 56 default: 57 NSLog("Unknown command from packager: %@", command); 58 } 59 } 60 61 @objc 62 func devMenuNotificationHanlder(_ parames: [String: Any]) { 63 self.manager?.toggleMenu() 64 } 65 } 66