This is ToDoServer.m in view mode; [Download] [Up]
/*
* ToDoServer - implements DO connectivity to the ToDo application
*
* You may freely copy, distribute and reuse the code in this example.
* This code is provided AS IS without warranty of any kind, expressed
* or implied, as to its fitness for any particular use.
*
* Copyright 1995 Ralph Zazula (rzazula@next.com). All Rights Reserved.
*
*/
#import "ToDoServer.h"
#import "_ToDoServer.h"
#import "ToDoController.h"
#import "FullCopyList.h"
#import "ToDoItemPublic.h"
#import <machkit/NXProtocolChecker.h>
#import <remote/transport.h>
#import <remote/NXConnection.h>
#define _controller _reservedToDoServer1
@implementation ToDoServer(Private)
- _setController:(id <ToDoServerProtocol>)aController
{
_controller = aController;
return self;
}
@end
@implementation ToDoServer
- init
{
if(self = [super init]) {
id protocolChecker = [[NXProtocolChecker alloc] initWithObject:self
forProtocol:@protocol(ToDoServerProtocol)];
id conn = [NXConnection registerRoot:protocolChecker withName:TODO_PORT];
[conn setDelegate:self];
[conn runFromAppKit];
}
return self;
}
- free
{
if(clientList) {
clientList = [[clientList freeObjects] free];
}
return [super free];
}
- itemList
{
int i;
id toDoList, returnList = nil;
if(!_controller) {
return self;
}
toDoList = [_controller toDoList];
if(toDoList ? [toDoList count] : 0) {
returnList = [[FullCopyList alloc] init];
for(i=0; i<[toDoList count]; i++) {
[returnList addObject:[[ToDoItemPublic alloc]
initFromItem:[toDoList objectAt:i]]];
}
}
return returnList;
}
- addItem:anItem
{
if(_controller) {
[_controller addItem:anItem];
}
return self;
}
- registerForNotification:(id <ToDoNotifications>)sender
{
if(!clientList) {
clientList = [[List alloc] init];
}
[clientList addObject:sender];
return self;
}
/*** invalidation notification ***/
- senderIsInvalid:sender
{
id remoteList = [sender remoteObjects];
int i;
if(remoteList) {
/* Remove any clients the sender was vending from our clientList */
for(i=0; i<[remoteList count]; i++) {
[clientList removeObject:[remoteList objectAt:i]];
}
[remoteList free];
}
return self;
}
/*** as the NXConnection's delegate ***/
- connection:(NXConnection *)conn didConnect:(NXConnection *)newConn
{
[newConn registerForInvalidationNotification:self];
return newConn;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.