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 #if RCT_DEV 14 RCTPackagerConnection 15 .shared() 16 .addNotificationHandler( 17 self.sendDevCommandNotificationHandler, 18 queue: DispatchQueue.main, 19 forMethod: "sendDevCommand" 20 ) 21 22 RCTPackagerConnection 23 .shared() 24 .addNotificationHandler( 25 self.devMenuNotificationHanlder, 26 queue: DispatchQueue.main, 27 forMethod: "devMenu" 28 ) 29 #endif 30 } 31 32 @objc 33 func sendDevCommandNotificationHandler(_ params: [String: Any]) { 34 guard let manager = manager, 35 let command = params["name"] as? String, 36 let bridge = manager.delegate?.appBridge?(forDevMenuManager: manager) as? RCTBridge 37 else { 38 return 39 } 40 41 let devDelegate = DevMenuDevOptionsDelegate(forBridge: bridge) 42 43 switch command { 44 case "reload": 45 devDelegate.reload() 46 case "toggleDevMenu": 47 self.manager?.toggleMenu() 48 case "toggleRemoteDebugging": 49 devDelegate.toggleRemoteDebugging() 50 case "toggleElementInspector": 51 devDelegate.toggleElementInsector() 52 case "togglePerformanceMonitor": 53 devDelegate.togglePerformanceMonitor() 54 default: 55 NSLog("Unknown command from packager: %@", command); 56 } 57 } 58 59 @objc 60 func devMenuNotificationHanlder(_ parames: [String: Any]) { 61 self.manager?.toggleMenu() 62 } 63 } 64