BLIP/Demo/BLIPEchoServer.m
author Jens Alfke <jens@mooseyard.com>
Fri Jul 24 14:06:28 2009 -0700 (2009-07-24)
changeset 63 5e4855a592ee
parent 26 cb9cdf247239
permissions -rw-r--r--
* The BLIPConnection receivedRequest: delegate method now returns BOOL. If the method returns NO (or if the method isn't implemented in the delegate), that means it didn't handle the message at all; an error will be returned to the sender.
* If the connection closes unexpectedly due to an error, then the auto-generated responses to pending requests will contain that error. This makes it easier to display a meaningful error message in the handler for the request.
jens@3
     1
//
jens@3
     2
//  BLIPEchoServer.m
jens@3
     3
//  MYNetwork
jens@3
     4
//
jens@3
     5
//  Created by Jens Alfke on 5/24/08.
jens@3
     6
//  Copyright 2008 Jens Alfke. All rights reserved.
jens@3
     7
//
jens@3
     8
jens@3
     9
#import "BLIPEchoServer.h"
jens@26
    10
#import "MYNetwork.h"
jens@3
    11
jens@3
    12
jens@3
    13
@implementation BLIPEchoServer
jens@3
    14
jens@3
    15
jens@3
    16
- (id) init
jens@3
    17
{
jens@3
    18
    self = [super init];
jens@3
    19
    if (self != nil) {
jens@3
    20
        _listener = [[BLIPListener alloc] initWithPort: 12345];
jens@3
    21
        _listener.delegate = self;
jens@3
    22
        _listener.pickAvailablePort = YES;
jens@3
    23
        _listener.bonjourServiceType = @"_blipecho._tcp";
jens@3
    24
        [_listener open];
jens@3
    25
        NSLog(@"%@ is listening...",self);
jens@3
    26
    }
jens@3
    27
    return self;
jens@3
    28
}
jens@3
    29
jens@3
    30
- (void) dealloc
jens@3
    31
{
jens@3
    32
    [_listener close];
jens@3
    33
    [_listener release];
jens@3
    34
    [super dealloc];
jens@3
    35
}
jens@3
    36
jens@3
    37
- (void) listener: (TCPListener*)listener failedToOpen: (NSError*)error
jens@3
    38
{
jens@3
    39
    NSLog(@"** %@ failed to open: %@",self,error);
jens@3
    40
}
jens@3
    41
jens@3
    42
- (void) listener: (TCPListener*)listener didAcceptConnection: (TCPConnection*)connection
jens@3
    43
{
jens@3
    44
    NSLog(@"** %@ accepted %@",self,connection);
jens@3
    45
    connection.delegate = self;
jens@3
    46
}
jens@3
    47
jens@3
    48
- (void) connection: (TCPConnection*)connection failedToOpen: (NSError*)error
jens@3
    49
{
jens@3
    50
    NSLog(@"** %@ failedToOpen: %@",connection,error);
jens@3
    51
}
jens@3
    52
jens@63
    53
- (BOOL) connection: (BLIPConnection*)connection receivedRequest: (BLIPRequest*)request
jens@3
    54
{
jens@3
    55
    NSLog(@"***** %@ received %@",connection,request);
jens@3
    56
    [request respondWithData: request.body contentType: request.contentType];
jens@63
    57
    return YES;
jens@3
    58
}
jens@3
    59
jens@3
    60
jens@3
    61
@end
jens@3
    62
jens@3
    63
jens@3
    64
int main( int argc, const char **argv )
jens@3
    65
{
jens@3
    66
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
jens@3
    67
    BLIPEchoServer *listener = [[BLIPEchoServer alloc] init];
jens@3
    68
    [[NSRunLoop currentRunLoop] run];
jens@3
    69
    [listener release];
jens@3
    70
    [pool drain];
jens@3
    71
}