1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#include "ULViewControllerSimulationCommands.h"
@implementation ViewController (SimulationCommands)
- (void) halt: (id) sender
{
id process;
NS_DURING
{
process = [[activeDelegate objectsForType: @"ULProcess"]
objectAtIndex: 0];
[processManager haltProcess: process];
}
NS_HANDLER
{
NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
}
NS_ENDHANDLER
}
- (void) restart: (id) sender
{
id process;
NS_DURING
{
process = [[activeDelegate objectsForType: @"ULProcess"]
objectAtIndex: 0];
[processManager restartProcess: process];
}
NS_HANDLER
{
NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
}
NS_ENDHANDLER
}
- (void) terminateProcess: (id) sender
{
id process;
NS_DURING
{
process = [[activeDelegate objectsForType: @"ULProcess"]
objectAtIndex: 0];
[processManager terminateProcess: process];
}
NS_HANDLER
{
NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
}
NS_ENDHANDLER
}
- (void) start: (id) sender
{
id process;
NSString* simulationHost;
NS_DURING
{
process = [[activeDelegate objectsForType: @"ULProcess"]
objectAtIndex: 0];
[processManager startProcess: process];
}
NS_HANDLER
{
if([[localException name] isEqual: @"ULCouldNotConnectToServerException"])
{
simulationHost = [[localException userInfo] objectForKey: @"host"];
if([simulationHost isEqual: [[NSHost currentHost] name]])
[self startAdunServer];
else
NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
}
NSWarnLog(@"%@ %@", [localException reason], [localException userInfo]);
}
NS_ENDHANDLER
}
- (void) execute: (id) sender
{
NSString *alertTitle, *name;
NSMutableArray* strings;
NSError* error;
NSMutableDictionary* commandDict = [NSMutableDictionary dictionaryWithCapacity: 1];
id result, process;
error = nil;
result = nil;
NS_DURING
{
//We change the buttons title into camelCase to
//create command name
strings = [[[sender title] componentsSeparatedByString: @" "]
mutableCopy];
name = [[strings objectAtIndex: 0] lowercaseString];
[strings removeObjectAtIndex: 0];
[strings insertObject: name atIndex: 0];
name = [strings componentsJoinedByString: @""];
[commandDict setObject: name
forKey: @"command"];
process = [[activeDelegate objectsForType: @"ULProcess"]
objectAtIndex: 0];
result = [processManager execute: commandDict
error: &error
process: process];
}
NS_HANDLER
{
NSRunAlertPanel(@"Alert", [localException reason], @"Dismiss", nil, nil);
NSWarnLog(@"Local exception user info %@. Reason %@", [localException userInfo],
[localException reason]);
}
NS_ENDHANDLER
//display the error if there is one
//\todo expand the options available here
if(error != nil)
{
alertTitle = [NSString stringWithFormat: @"Alert: %@", [error domain]];
NSRunAlertPanel(alertTitle,
[[error userInfo] objectForKey: NSLocalizedDescriptionKey],
@"Dismiss",
nil,
nil);
}
if(result != nil)
[self logString: [NSString stringWithFormat: @"%@:\n%@\n",
[sender title],
[result valueForKey:@"stringDescription"]]
newline: YES
forProcess: process];
}
@end
|