首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可可分布物

可可分布物
EN

Stack Overflow用户
提问于 2009-11-19 17:39:17
回答 1查看 1.2K关注 0票数 1

我想弄清楚如何运行这个分布式对象演示,这让我自己感到头疼。我可以在同一台机器上在本地运行得很好。

情况就是这样。我有一个服务器应用程序,它在远程机器上生成带有OpenGLView的客户端应用程序。

我可以用AppleScript轻松地做到这一点。

客户端应用程序似乎提供了它的OpenGLView窗口OK:

代码语言:javascript
复制
clientPort = [[NSSocketPort alloc] initWithTCPPort:SERVER_PORT];
if(clientPort == nil) continue; else NSLog(@"Port OK");

clientConnection = [NSConnection connectionWithReceivePort:clientPort sendPort:nil];
if(clientConnection == nil) continue; else NSLog(@"Conn OK");

[[NSSocketPortNameServer sharedInstance] registerPort:clientPort name:@"DOTest3_0"];

//Vend Object
@try {
[clientConnection setRootObject:object];
NSLog([NSString stringWithFormat:@"Port %d: Vend OK", (SERVER_PORT + i)]);
return;
} @catch (...) {
NSLog([NSString stringWithFormat:@"Port %d: Vend Next", (SERVER_PORT + i)]);
}

服务器应用程序找到端口和连接,但引发TimeOut异常:

代码语言:javascript
复制
// Create temporary Pointer to kGLView Object.
  id <NSCoding, kGLViewProtocol> openGLView;

      // Setup Port, Connection, & Proxy
      portTest = (NSSocketPort *)[[NSSocketPortNameServer sharedInstance] portForName:@"DOTest3_0" host:@"*"];
      if (portTest == nil ) continue ; else NSLog(@"Port OK");

      connTest = [NSConnection  connectionWithReceivePort:nil sendPort:portTest];
      if (connTest == nil ) continue ; else NSLog(@"Conn OK");

      openGLView = [[connTest rootProxy] retain];
      if (openGLView == nil ) continue ; else NSLog(@"OpenGL OK");

      [openGLView drawWithRotation: rotationAngle];

  }

我想不出为什么。

我进入了客户端PC的控制台:“端口确定”"Conn OK“”端口8081: Vend OK“

我进入服务器PC的控制台:“端口确定”"Conn“11/18/09 2:05:36 PM DOTest315278超时(10280263936.092180 280263936.092642) 1

即使TimeOuts都设置为60秒。

帮助!

-Stephen

服务器: MacMini OS X 10.5客户端: MacPro OS X 10.6远程登录、管理等都已启用。

编辑:接受NSResponder的建议,我已经支持了控制器,但它仍然不起作用。

客户/供应商:

代码语言:javascript
复制
-(void)vend:(id)object {
  port = [[[NSSocketPort alloc] initWithTCPPort:[self tcpPort]] 
          retain];

  conn = [[NSConnection connectionWithReceivePort:port sendPort:nil] 
          retain];

  for (int i = 0; i < 10; i++) {
    [[NSSocketPortNameServer sharedInstance] registerPort:port
                                                     name:[[self portName] stringByAppendingFormat:@"_%d", i]];
    @try {
      [conn setRootObject:object];
      return;
    } @catch (...) {
      NSLog(@"Vend Next");
      continue;
    }
  }
  NSLog(@"Vend Failed");
}

客户财务主任:

代码语言:javascript
复制
-(id)init {
  self = [super init];

  [self setRotationAngle:0.0f];

  clientObj = [[Client alloc] initWithName:@"DOTest4" 
                                   Address:@"10.10.5.104" // mini
                                      Port:48557];

  [clientObj vend:self];

  return self;
}

服务器控制器:

代码语言:javascript
复制
-(IBAction)rotateClient:(id)sender {
  NSArray *vendedObjects = [serverObj getVendedObjects];
  id <NSCoding, ClientController_Protocol> proxy;

  if (vendedObjects != nil) {
    for (int i = 0; i < [vendedObjects count]; i++) {
      proxy = [vendedObjects objectAtIndex:i];
      [proxy rotate];
    }
  }
    // release
  [vendedObjects release];
}

服务器/(抓取已获得的对象)

代码语言:javascript
复制
-(NSArray *)getVendedObjects {

  NSArray *vendedObjects = [[[NSArray alloc] init] retain];
  NSSocketPort *port;
  NSConnection *conn;

  for (int i = 0; i< 10; i++) {
    // Get Port Object
    port = (NSSocketPort *)[[NSSocketPortNameServer sharedInstance] 
                           portForName:[[self portName] stringByAppendingFormat:@"_%d", i]
                           host:[self addressRemote]];
    if (port == nil) continue;
    // Create Connection with Timeouts
    conn = [NSConnection connectionWithReceivePort:nil sendPort:port];
    if (conn == nil) continue;

    [conn setReplyTimeout:(NSTimeInterval)60.0];
    [conn setRequestTimeout:(NSTimeInterval)60.0];

    // Get VendedObject of Connection
    vendedObjects = [[vendedObjects arrayByAddingObject:[conn rootProxy]] retain];
  }

  return vendedObjects;
}

叹息..。我肯定我只是忽略了一些真正的可可-基本的东西。

-S!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-20 06:50:56

我从未见过有人试图在DO链接上播放视图或窗口,甚至在本地主机上,我也很惊讶。无论何时我使用它,它都是从服务器的控制器层中的对象到客户机中的相应控制器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1765148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档