diff -r 000000000000 -r a4875607a3a0 iPhone/Classes/MyViewController.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iPhone/Classes/MyViewController.m Tue Dec 02 22:42:56 2008 -0800 @@ -0,0 +1,153 @@ +/* + +File: MyViewController.m +Abstract: A view controller responsible for managing the Hello World view. + +Version: 1.7 + +Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. +("Apple") in consideration of your agreement to the following terms, and your +use, installation, modification or redistribution of this Apple software +constitutes acceptance of these terms. If you do not agree with these terms, +please do not use, install, modify or redistribute this Apple software. + +In consideration of your agreement to abide by the following terms, and subject +to these terms, Apple grants you a personal, non-exclusive license, under +Apple's copyrights in this original Apple software (the "Apple Software"), to +use, reproduce, modify and redistribute the Apple Software, with or without +modifications, in source and/or binary forms; provided that if you redistribute +the Apple Software in its entirety and without modifications, you must retain +this notice and the following text and disclaimers in all such redistributions +of the Apple Software. +Neither the name, trademarks, service marks or logos of Apple Inc. may be used +to endorse or promote products derived from the Apple Software without specific +prior written permission from Apple. Except as expressly stated in this notice, +no other rights or licenses, express or implied, are granted by Apple herein, +including but not limited to any patent rights that may be infringed by your +derivative works or by other works in which the Apple Software may be +incorporated. + +The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO +WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED +WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN +COMBINATION WITH YOUR PRODUCTS. + +IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR +DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF +CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF +APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Copyright (C) 2008 Apple Inc. All Rights Reserved. + +*/ + +#import "MyViewController.h" +#import "BLIP.h" + + +@implementation MyViewController + +@synthesize textField; +@synthesize label; +@synthesize string; + +- (void)viewDidLoad { + // When the user starts typing, show the clear button in the text field. + textField.clearButtonMode = UITextFieldViewModeWhileEditing; + + label.text = @"Opening listener socket..."; + + _listener = [[BLIPListener alloc] initWithPort: 12345]; + _listener.delegate = self; + _listener.pickAvailablePort = YES; + _listener.bonjourServiceType = @"_blipecho._tcp"; + [_listener open]; +} + + +- (void)updateString { + + // Store the text of the text field in the 'string' instance variable. + self.string = textField.text; + // Set the text of the label to the value of the 'string' instance variable. + label.text = self.string; +} + + +- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { + // When the user presses return, take focus away from the text field so that the keyboard is dismissed. + if (theTextField == textField) { + [textField resignFirstResponder]; + // Invoke the method that changes the greeting. + [self updateString]; + } + return YES; +} + + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + // Dismiss the keyboard when the view outside the text field is touched. + [textField resignFirstResponder]; + // Revert the text field to the previous value. + [super touchesBegan:touches withEvent:event]; +} + + +- (void)dealloc { + [textField release]; + [label release]; + + [_listener close]; + [_listener release]; + + [super dealloc]; +} + + +#pragma mark BLIP Listener Delegate: + + +- (void) listenerDidOpen: (TCPListener*)listener +{ + label.text = [NSString stringWithFormat: @"Listening on port %i",listener.port]; +} + +- (void) listener: (TCPListener*)listener failedToOpen: (NSError*)error +{ + label.text = [NSString stringWithFormat: @"Failed to open listener on port %i: %@", + listener.port,error]; +} + +- (void) listener: (TCPListener*)listener didAcceptConnection: (TCPConnection*)connection +{ + label.text = [NSString stringWithFormat: @"Accepted connection from %@", + connection.address]; + connection.delegate = self; +} + +- (void) connection: (TCPConnection*)connection failedToOpen: (NSError*)error +{ + label.text = [NSString stringWithFormat: @"Failed to open connection from %@: %@", + connection.address,error]; +} + +- (void) connection: (BLIPConnection*)connection receivedRequest: (BLIPRequest*)request +{ + NSString *message = [[NSString alloc] initWithData: request.body encoding: NSUTF8StringEncoding]; + label.text = [NSString stringWithFormat: @"Echoed:\nā€œ%@ā€",message]; + [request respondWithData: request.body contentType: request.contentType]; +} + +- (void) connectionDidClose: (TCPConnection*)connection; +{ + label.text = [NSString stringWithFormat: @"Connection closed from %@", + connection.address]; +} + + +@end