reorganize
parent
b1df5e29e4
commit
3767628a0e
@ -0,0 +1,8 @@
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
@interface ProcWatcher : NSObject
|
||||
+ (instancetype) shared;
|
||||
- (void) startWatching;
|
||||
@end
|
||||
|
||||
|
@ -0,0 +1,49 @@
|
||||
#include "_cgo_export.h"
|
||||
#import "ProcWatcher.h"
|
||||
|
||||
@implementation ProcWatcher
|
||||
|
||||
+ (instancetype) shared {
|
||||
static id sharedInstance;
|
||||
static dispatch_once_t predicate;
|
||||
|
||||
dispatch_once(&predicate, ^{
|
||||
sharedInstance = [ProcWatcher new];
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
- (void) startWatching {
|
||||
NSWorkspace* workspace = [NSWorkspace sharedWorkspace];
|
||||
NSNotificationCenter* notifications = [workspace notificationCenter];
|
||||
|
||||
void (^handleAppLaunch) (NSNotification*) = ^(NSNotification* note) {
|
||||
NSDictionary* info = note.userInfo;
|
||||
NSRunningApplication* app = info[NSWorkspaceApplicationKey];
|
||||
NSString* bundleId = app.bundleIdentifier;
|
||||
|
||||
AppStarted((GoString){bundleId.UTF8String, bundleId.length});
|
||||
};
|
||||
|
||||
id observerLaunch = [notifications
|
||||
addObserverForName: NSWorkspaceDidLaunchApplicationNotification
|
||||
object: workspace
|
||||
queue: [NSOperationQueue mainQueue]
|
||||
usingBlock: handleAppLaunch];
|
||||
|
||||
void (^handleAppTerminate) (NSNotification*) = ^(NSNotification* note) {
|
||||
NSDictionary* info = note.userInfo;
|
||||
NSRunningApplication* app = info[NSWorkspaceApplicationKey];
|
||||
NSString* bundleId = app.bundleIdentifier;
|
||||
|
||||
AppEnded((GoString){bundleId.UTF8String, bundleId.length});
|
||||
};
|
||||
|
||||
id observerTerminate = [notifications
|
||||
addObserverForName: NSWorkspaceDidTerminateApplicationNotification
|
||||
object: workspace
|
||||
queue: [NSOperationQueue mainQueue]
|
||||
usingBlock: handleAppTerminate];
|
||||
}
|
||||
|
||||
@end
|
@ -0,0 +1,8 @@
|
||||
#include "procmon.h"
|
||||
#include <AppKit/AppKit.h>
|
||||
#include "ProcWatcher.h"
|
||||
|
||||
void MonitorProcesses() {
|
||||
[[ProcWatcher shared] startWatching];
|
||||
[[NSRunLoop currentRunLoop] run];
|
||||
}
|
@ -1,3 +1 @@
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
void TheCFunc();
|
||||
void MonitorProcesses();
|
||||
|
@ -1,66 +0,0 @@
|
||||
#include "procmon.h"
|
||||
#import "_cgo_export.h"
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
@interface ProcWatcher : NSObject
|
||||
+ (instancetype) shared;
|
||||
- (void) applicationDidLaunch:(NSNotification*) notification;
|
||||
@end
|
||||
|
||||
@implementation ProcWatcher
|
||||
|
||||
+ (instancetype) shared {
|
||||
static id sharedInstance;
|
||||
static dispatch_once_t predicate;
|
||||
|
||||
NSLog(@"ProcWatcher shared instance accessed");
|
||||
|
||||
dispatch_once(&predicate, ^{
|
||||
TheGoFunc((GoString){"dispatch", 8});
|
||||
sharedInstance = [ProcWatcher new];
|
||||
});
|
||||
return sharedInstance;
|
||||
}
|
||||
|
||||
- (void) applicationDidLaunch:(NSNotification*) notification {
|
||||
NSDictionary* info = notification.userInfo;
|
||||
NSRunningApplication* app = info[NSWorkspaceApplicationKey];
|
||||
NSString* bundleId = app.bundleIdentifier;
|
||||
|
||||
NSLog(@"application launched: %@", bundleId);
|
||||
|
||||
TheGoFunc((GoString){bundleId.UTF8String, bundleId.length});
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
void TheCFunc() {
|
||||
NSLog(@"current run loop: %@", [NSRunLoop currentRunLoop]);
|
||||
NSLog(@"current run loop mode: %@", [[NSRunLoop currentRunLoop] currentMode]);
|
||||
NSLog(@"current run loop mode: %@", [[NSRunLoop currentRunLoop] currentMode]);
|
||||
|
||||
if ([NSThread isMainThread]) {
|
||||
NSLog(@"TheCFunc is in the main thread");
|
||||
} else {
|
||||
NSLog(@"TheCFunc is NOT in the main thread");
|
||||
}
|
||||
|
||||
NSLog(@"hi from nslog");
|
||||
TheGoFunc((GoString){"hi", 2});
|
||||
|
||||
NSArray* running = [[NSWorkspace sharedWorkspace] runningApplications];
|
||||
NSLog(@"%@", running);
|
||||
|
||||
ProcWatcher* pw = [ProcWatcher shared];
|
||||
|
||||
NSNotificationCenter* notifications = [[NSWorkspace sharedWorkspace] notificationCenter];
|
||||
|
||||
[notifications
|
||||
addObserver: pw
|
||||
selector: @selector(applicationDidLaunch:)
|
||||
name: NSWorkspaceDidLaunchApplicationNotification object: nil];
|
||||
|
||||
NSLog(@"thing has finished");
|
||||
|
||||
[[NSRunLoop currentRunLoop] run];
|
||||
}
|
Loading…
Reference in New Issue