-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathHBCDemoController.m
139 lines (123 loc) · 3.55 KB
/
HBCDemoController.m
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
//
// HBCDemoController.m
// Blackbox
//
// Created by Matt Patenaude on 10/19/10.
// Copyright 2010 Matt Patenaude. All rights reserved.
//
#import "HBCDemoController.h"
#import "BBRequest.h"
@implementation HBCDemoController
#pragma mark Initializers
- (id)init
{
if (self = [super init])
{
// let's create our server
server = [[BBServer alloc] init];
// we'll set ourself as the delegate,
[server setDelegate:self];
// we'll also set a default port; if we
// don't do this, a random one will be chosen
// the default port is specified in BBDemoController.h
[server setPort:BBDemoServerDefaultPort];
serverIsRunning = NO;
// create an array to handle open channels
openChannels = [[NSMutableArray alloc] init];
}
return self;
}
- (void)awakeFromNib
{
// finally, we set our HaleBopp responder as our default
[server setDefaultResponder:haleBoppResponder];
}
#pragma mark Deallocator
- (void)dealloc
{
[server release];
[openChannels release];
[super dealloc];
}
#pragma mark Application delegate methods
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
{
return YES;
}
#pragma mark Control methods
- (IBAction)startStopServer:(id)sender
{
if (!serverIsRunning)
{
NSError *err;
if ([server start:&err])
{
[statusImageView setImage:[NSImage imageNamed:@"on"]];
[statusField setStringValue:[NSString stringWithFormat:NSLocalizedString(@"Running On Port %u…", nil), [server port]]];
serverIsRunning = YES;
}
else
{
[statusImageView setImage:[NSImage imageNamed:@"off"]];
[statusField setStringValue:NSLocalizedString(@"Could Not Start Server", nil)];
serverIsRunning = NO;
NSLog(@"Error starting server: %@", [err localizedDescription]);
}
}
else
{
[server stop];
[statusImageView setImage:[NSImage imageNamed:@"off"]];
[statusField setStringValue:NSLocalizedString(@"Not Running", nil)];
serverIsRunning = NO;
}
}
- (IBAction)pushStringToSelectedChannel:(id)sender
{
// this pushes the string to the selected channel
NSInteger selection = [channelTable selectedRow];
if (selection > -1)
{
NSString *channelName = [openChannels objectAtIndex:selection];
[haleBoppResponder pushString:[pushStringField stringValue] toChannel:channelName];
}
}
#pragma mark HaleBopp responder delegate methods
- (BOOL)responder:(HBResponder *)responder allowConnectionToNonexistentChannelWithRequest:(BBRequest *)theRequest
{
return NO;
}
#pragma mark Channel management methods
- (IBAction)addChannel:(id)sender
{
[openChannels addObject:@"new-channel"];
[haleBoppResponder createChannel:@"new-channel"];
[channelTable reloadData];
}
- (IBAction)removeChannel:(id)sender
{
NSInteger selection = [channelTable selectedRow];
if (selection > -1)
{
NSString *channelName = [openChannels objectAtIndex:selection];
[haleBoppResponder destroyChannel:channelName];
[openChannels removeObjectAtIndex:selection];
[channelTable reloadData];
}
}
#pragma mark Table data source methods
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [openChannels count];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
return [openChannels objectAtIndex:rowIndex];
}
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
[haleBoppResponder destroyChannel:[openChannels objectAtIndex:rowIndex]];
[openChannels replaceObjectAtIndex:rowIndex withObject:anObject];
[haleBoppResponder createChannel:anObject];
}
@end