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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#import <objc/Ice.h>
#import <TestCommon.h>
#import <objects/TestI.h>
#if defined(__clang__)
// For 'Ice::Communicator::addObjectFactory()' deprecation
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
#if defined(__clang__) && __has_feature(objc_arc)
ICEValueFactory factory = ^ICEObject* (NSString* type) NS_RETURNS_RETAINED
#else
ICEValueFactory factory = ^ICEObject* (NSString* type)
#endif
{
if([type isEqualToString:@"::Test::B"])
{
return [[TestObjectsBI alloc] init];
}
else if([type isEqualToString:@"::Test::C"])
{
return [[TestObjectsCI alloc] init];
}
else if([type isEqualToString:@"::Test::D"])
{
return [[TestObjectsDI alloc] init];
}
else if([type isEqualToString:@"::Test::E"])
{
return [[TestObjectsEI alloc] init];
}
else if([type isEqualToString:@"::Test::F"])
{
return [[TestObjectsFI alloc] init];
}
else if([type isEqualToString:@"::Test::I"])
{
return [[TestObjectsI alloc] init];
}
else if([type isEqualToString:@"::Test::J"])
{
return [[TestObjectsJI alloc] init];
}
else if([type isEqualToString:@"::Test::H"])
{
return [[TestObjectsHI alloc] init];
}
else
{
test(NO);
}
return nil;
};
@interface CollocatedMyObjectFactory : NSObject<ICEObjectFactory>
@end
@implementation CollocatedMyObjectFactory
-(ICEObject*) create:(NSString*)__unused type
{
return nil;
}
-(void) destroy
{
// Nothing to do
}
@end
static int
run(id<ICECommunicator> communicator)
{
id<ICEValueFactoryManager> manager = [communicator getValueFactoryManager];
[manager add:factory sliceId:@"::Test::B"];
[manager add:factory sliceId:@"::Test::C"];
[manager add:factory sliceId:@"::Test::D"];
[manager add:factory sliceId:@"::Test::E"];
[manager add:factory sliceId:@"::Test::F"];
[manager add:factory sliceId:@"::Test::I"];
[manager add:factory sliceId:@"::Test::J"];
[manager add:factory sliceId:@"::Test::H"];
id<ICEObjectFactory> objectFactory = ICE_AUTORELEASE([[CollocatedMyObjectFactory alloc] init]);
[communicator addObjectFactory:objectFactory sliceId:@"TestOF" ];
[[communicator getProperties] setProperty:@"TestAdapter.Endpoints" value:getTestEndpoint(communicator, 0)];
id<ICEObjectAdapter> adapter = [communicator createObjectAdapter:@"TestAdapter"];
TestObjectsInitialI* initial = [TestObjectsInitialI initial];
[adapter add:initial identity:[ICEUtil stringToIdentity:@"initial"]];
ICEObject* testObj = ICE_AUTORELEASE([[TestObjectsTestIntfI alloc] init]);
[adapter add:testObj identity:[ICEUtil stringToIdentity:@"test"]];
ICEObject* f2Obj = ICE_AUTORELEASE([[TestObjectsF2I alloc] init]);
[adapter add:f2Obj identity:[ICEUtil stringToIdentity:@"F21"]];
ICEObject* uoet = ICE_AUTORELEASE([[UnexpectedObjectExceptionTestI alloc] init]);
[adapter add:uoet identity:[ICEUtil stringToIdentity:@"uoet"]];
id<TestObjectsInitialPrx> objectsAllTests(id<ICECommunicator>, bool);
objectsAllTests(communicator, NO);
// We must call shutdown even in the collocated case for cyclic dependency cleanup
[initial shutdown:nil];
return EXIT_SUCCESS;
}
#if TARGET_OS_IPHONE
# define main objectsCollocated
#endif
int
main(int argc, char* argv[])
{
#ifdef ICE_STATIC_LIBS
ICEregisterIceSSL(YES);
ICEregisterIceWS(YES);
#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
ICEregisterIceIAP(YES);
#endif
#endif
int status;
@autoreleasepool
{
id<ICECommunicator> communicator = nil;
@try
{
ICEInitializationData* initData = [ICEInitializationData initializationData];
initData.properties = defaultServerProperties(&argc, argv);
[initData.properties setProperty:@"Ice.Warn.Dispatch" value:@"0"];
[initData.properties setProperty:@"Ice.AcceptClassCycles" value:@"1"];
#if TARGET_OS_IPHONE
initData.prefixTable_ = [NSDictionary dictionaryWithObjectsAndKeys:
@"TestObjects", @"::Test",
nil];
#endif
communicator = [ICEUtil createCommunicator:&argc argv:argv initData:initData];
status = run(communicator);
}
@catch(ICEException* ex)
{
tprintf("%@\n", ex);
status = EXIT_FAILURE;
}
if(communicator)
{
[communicator destroy];
}
}
return status;
}
|