Skip to content
Snippets Groups Projects
Commit 98b2652e authored by EthanRDoesMC's avatar EthanRDoesMC
Browse files

async task, write attempt

parent 8921c4d2
No related branches found
No related tags found
No related merge requests found
#import <UIKit/UIKit.h>
#import "BLMautrixTask.h"
@interface BLAppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
@property (nonatomic, strong) UINavigationController *rootViewController;
@property (nonatomic, strong) BLMautrixTask *mautrixTask;
@end
......@@ -13,6 +13,7 @@
// ];
_window.rootViewController = _rootViewController;
[_window makeKeyAndVisible];
self.mautrixTask = [BLMautrixTask sharedTask];
}
@end
//
// BLMautrixTask.h
// xchighlight
//
// Created by EthanRDoesMC on 3/20/21.
//
#import <Foundation/Foundation.h>
#import "NSTask.h"
NS_ASSUME_NONNULL_BEGIN
@interface BLMautrixTask : NSObject
@property (strong, nonatomic) NSTask * task;
@property (strong, nonatomic) NSString * outputString;
@property (strong, nonatomic) NSPipe * writePipe;
+(id)sharedTask;
-(id)initAndLaunch;
-(void)sendPing;
-(void)sendDictionary:(NSDictionary *)dictionary;
@end
NS_ASSUME_NONNULL_END
//
// BLMautrixTask.m
// xchighlight
//
// Created by EthanRDoesMC on 3/20/21.
//
#import "BLMautrixTask.h"
@implementation BLMautrixTask
+ (instancetype)sharedTask {
static BLMautrixTask *_sharedTask = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedTask = [[BLMautrixTask alloc] initAndLaunch];
});
return _sharedTask;
}
-(id)initAndLaunch {
self = [super init];
self.task = [NSTask new];
NSMutableArray *arguments = [[NSMutableArray alloc] init];
[arguments addObject:@"-r/var/mobile/Documents/mautrix-imessage-armv7/registration.yaml"];
self.task.launchPath = @"/var/mobile/Documents/mautrix-imessage-armv7/mautrix-imessage";
self.task.arguments = arguments;
self.task.currentDirectoryPath = @"/var/mobile/Documents/mautrix-imessage-armv7/";
NSMutableDictionary *defaultEnv = [[NSMutableDictionary alloc] initWithDictionary:[[NSProcessInfo processInfo] environment]];
[defaultEnv setObject:@"YES" forKey:@"NSUnbufferedIO"];
// [defaultEnv setObject:@"/Users/ethanrdoesmc/" forKey:@"HOME"];
self.task.environment = defaultEnv;
//NSPipe *writePipe = [NSPipe pipe];
//NSFileHandle *writeHandle = [writePipe fileHandleForWriting];
self.writePipe = [NSPipe pipe];
[self.task setStandardInput: self.writePipe];
self.task.standardOutput = [NSPipe pipe];
[[self.task.standardOutput fileHandleForReading] setReadabilityHandler:^(NSFileHandle *file) {
NSData *data = [file availableData]; // this will read to EOF, so call only once
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Task output! %@", string);
dispatch_async(dispatch_get_main_queue(), ^{
if (!self->_outputString) {
self->_outputString = @"Begin log \n";
}
self.outputString = [[self outputString] stringByAppendingString:string];
[[NSNotificationCenter defaultCenter] postNotificationName:@"BLMautrixLogUpdated" object:nil];
});
// dispatch_async(dispatch_get_main_queue(), ^{
// self->_logField.text = [self->_logField.text stringByAppendingString: string];
// [self->_logField scrollRangeToVisible: NSMakeRange(self->_logField.text.length, 0)];
// });
}];
self.task.standardError = [NSPipe pipe];
[[self.task.standardError fileHandleForReading] setReadabilityHandler:^(NSFileHandle *errfile) {
NSData *errdata = [errfile availableData]; // this will read to EOF, so call only once
NSString *errstring = [[NSString alloc] initWithData:errdata encoding:NSUTF8StringEncoding];
NSLog(@"Task output! %@", errstring);
dispatch_async(dispatch_get_main_queue(), ^{
if (!self->_outputString) {
self->_outputString = @"Begin log \n";
}
self.outputString = [[self outputString] stringByAppendingString:errstring];
[[NSNotificationCenter defaultCenter] postNotificationName:@"BLMautrixLogUpdated" object:nil];
});
// dispatch_async(dispatch_get_main_queue(), ^{
// self->_logField.text = [self->_logField.text stringByAppendingString: errstring];
// [self->_logField scrollRangeToVisible: NSMakeRange(self->_logField.text.length, 0)];
// });
}];
[self.task launch];
return self;
}
//-(NSString *)outputString {
// if (!self.outputString) {
// _outputString = [NSString string];
// }
// return self.outputString;
//}
-(void)sendDictionary:(NSDictionary *)dictionary {
NSData *dataForSending = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:nil];
NSString *jsonString = [[NSString alloc] initWithData:dataForSending encoding:NSUTF8StringEncoding];
//jsonString = [jsonString stringByAppendingString:@""];
NSLog(@"%@", jsonString);
// [[self.task.standardInput fileHandleForWriting] setWriteabilityHandler:^(NSFileHandle *wfile) {
// [wfile writeData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
// NSLog(@"%@", wfile);
// }];
[[self.task.standardInput fileHandleForWriting] writeData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
}
-(void)sendPing {
NSMutableDictionary *pingDictionary = [NSMutableDictionary new];
[pingDictionary setValue:@"ping" forKey:@"command"];
[pingDictionary setValue:@"27" forKey:@"id"];
[self sendDictionary:pingDictionary];
}
@end
......@@ -10,7 +10,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface LogViewController : UIViewController
-(void)updateLog;
@end
NS_ASSUME_NONNULL_END
......@@ -8,6 +8,7 @@
#import "LogViewController.h"
#import <Foundation/Foundation.h>
#import "NSTask.h"
#import "BLMautrixTask.h"
@interface LogViewController ()
@property (strong, nonatomic) IBOutlet UITextView *logField;
......@@ -18,58 +19,16 @@
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:[BLMautrixTask sharedTask] action:@selector(sendPing)];
[BLMautrixTask sharedTask];
[self updateLog];
// Do any additional setup after loading the view from its nib.
NSLog(@"Hello, World!");
NSMutableArray *arguments = [[NSMutableArray alloc] init];
//[arguments addObject:@"/Users/ethanrdoesmc/Downloads/mautrix-imessage-amd64/mautrix-imessage"];
//[arguments addObject:@"-c/var/mobile/Documents/mautrix-imessage-armv7/config.yaml"]; // Any arguments you want here...
[arguments addObject:@"-r/var/mobile/Documents/mautrix-imessage-armv7/registration.yaml"]; // Any arguments you want here...
_task = [[NSTask alloc] init];
[_task waitUntilExit];
_task.launchPath = @"/var/mobile/Documents/mautrix-imessage-armv7/mautrix-imessage";
_task.arguments = arguments;
_task.currentDirectoryPath = @"/var/mobile/Documents/mautrix-imessage-armv7/";
NSLog(@"tell me about %@", _task);
NSMutableDictionary *defaultEnv = [[NSMutableDictionary alloc] initWithDictionary:[[NSProcessInfo processInfo] environment]];
[defaultEnv setObject:@"YES" forKey:@"NSUnbufferedIO"];
// [defaultEnv setObject:@"/Users/ethanrdoesmc/" forKey:@"HOME"];
_task.environment = defaultEnv;
NSPipe *writePipe = [NSPipe pipe];
NSFileHandle *writeHandle = [writePipe fileHandleForWriting];
[task setStandardInput: writePipe];
_task.standardOutput = [NSPipe pipe];
[[_task.standardOutput fileHandleForReading] setReadabilityHandler:^(NSFileHandle *file) {
NSData *data = [file availableData]; // this will read to EOF, so call only once
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Task output! %@", string);
dispatch_async(dispatch_get_main_queue(), ^{
self->_logField.text = [self->_logField.text stringByAppendingString: string];
[self->_logField scrollRangeToVisible: NSMakeRange(self->_logField.text.length, 0)];
});
}];
_task.standardError = [NSPipe pipe];
[[_task.standardError fileHandleForReading] setReadabilityHandler:^(NSFileHandle *errfile) {
NSData *errdata = [errfile availableData]; // this will read to EOF, so call only once
NSString *errstring = [[NSString alloc] initWithData:errdata encoding:NSUTF8StringEncoding];
NSLog(@"Task output! %@", errstring);
dispatch_async(dispatch_get_main_queue(), ^{
self->_logField.text = [self->_logField.text stringByAppendingString: errstring];
[self->_logField scrollRangeToVisible: NSMakeRange(self->_logField.text.length, 0)];
});
}];
[_task launch];
//[task waitUntilExit];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLog) name:@"BLMautrixLogUpdated" object:nil];
}
-(void)updateLog {
[self.logField setText:[[BLMautrixTask sharedTask] outputString]];
[self.logField scrollRangeToVisible: NSMakeRange(_logField.text.length, 0)];
}
/*
......
No preview for this file type
......@@ -24,10 +24,10 @@
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" indicatorStyle="white" keyboardDismissMode="onDrag" editable="NO" adjustsFontForContentSizeCategory="YES" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="C0B-ds-h8Q">
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" keyboardDismissMode="onDrag" editable="NO" adjustsFontForContentSizeCategory="YES" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="C0B-ds-h8Q">
<rect key="frame" x="0.0" y="55" width="320" height="425"/>
<color key="textColor" systemColor="labelColor"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<fontDescription key="fontDescription" name="GillSans" family="Gill Sans" pointSize="15"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
......
No preview for this file type
......@@ -33,6 +33,8 @@
4F9D49392604612E00A2BE48 /* LogViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9D49362604612E00A2BE48 /* LogViewController.h */; };
4F9D493A2604612E00A2BE48 /* LogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F9D49372604612E00A2BE48 /* LogViewController.m */; };
4F9D49452604727F00A2BE48 /* NSTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9D493D2604682500A2BE48 /* NSTask.h */; };
4FFD1ED42606EF8200D535B0 /* BLMautrixTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FFD1ED22606EF8200D535B0 /* BLMautrixTask.h */; };
4FFD1ED52606EF8200D535B0 /* BLMautrixTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FFD1ED32606EF8200D535B0 /* BLMautrixTask.m */; };
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
......@@ -88,6 +90,8 @@
4F9D49362604612E00A2BE48 /* LogViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogViewController.h; sourceTree = "<group>"; };
4F9D49372604612E00A2BE48 /* LogViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LogViewController.m; sourceTree = "<group>"; };
4F9D493D2604682500A2BE48 /* NSTask.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSTask.h; sourceTree = "<group>"; };
4FFD1ED22606EF8200D535B0 /* BLMautrixTask.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BLMautrixTask.h; sourceTree = "<group>"; };
4FFD1ED32606EF8200D535B0 /* BLMautrixTask.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BLMautrixTask.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -122,6 +126,7 @@
4F6808B725AEDFC700470DDB /* README.md */,
4FAB0ABB25D64376007448DA /* Headers */,
4FAB0AB125D64192007448DA /* Application */,
4FFD1ED12606EF5000D535B0 /* Mautrix */,
4FAB0ABA25D6431C007448DA /* Utilities */,
4FAB0ABC25D643CB007448DA /* Bridge to iMessage */,
);
......@@ -251,6 +256,15 @@
name = "Xcode Highlighting";
sourceTree = "<group>";
};
4FFD1ED12606EF5000D535B0 /* Mautrix */ = {
isa = PBXGroup;
children = (
4FFD1ED22606EF8200D535B0 /* BLMautrixTask.h */,
4FFD1ED32606EF8200D535B0 /* BLMautrixTask.m */,
);
name = Mautrix;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
......@@ -268,6 +282,7 @@
4F8210AD25A035F8005B9453 /* ChatKit.h in Headers */,
4F8210AE25A035F8005B9453 /* BLAppDelegate.h in Headers */,
4F8210AF25A035F8005B9453 /* BLNewChatViewController.h in Headers */,
4FFD1ED42606EF8200D535B0 /* BLMautrixTask.h in Headers */,
4F8D118125A572C100040303 /* ChatViewController.h in Headers */,
4F8210B125A035F8005B9453 /* BrooklynBridge.h in Headers */,
4F8210B025A035F8005B9453 /* BLRootViewController.h in Headers */,
......@@ -369,6 +384,7 @@
4F48376B25F20FE0001B9415 /* MessageBuilder.m in Sources */,
4F82109A25A034CF005B9453 /* BLRootViewController.m in Sources */,
4F9D493A2604612E00A2BE48 /* LogViewController.m in Sources */,
4FFD1ED52606EF8200D535B0 /* BLMautrixTask.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment