SatelliteServerPtr SatelliteServer::Create(SatelliteServerInfoPtr info) {
  SatelliteServerPtr satellite;
  if (info->getPort()) {
    switch (info->getType()) {
    case KindOfInternalPageServer:
      satellite = SatelliteServerPtr(new InternalPageServer(info));
      break;
    case KindOfDanglingPageServer:
      satellite = SatelliteServerPtr(new DanglingPageServer(info));
      break;
    case KindOfRPCServer:
      satellite = SatelliteServerPtr(new RPCServer(info));
      break;
    case KindOfXboxServer:
      satellite = SatelliteServerPtr(new RPCServer(info));
      break;
    default:
      ASSERT(false);
    }
    if (satellite) {
      satellite->setName(info->getName());
    }
  }
  return satellite;
}
 InternalPageServer(SatelliteServerInfoPtr info) {
   InternalPageServerImplPtr server
     (new TypedServer<InternalPageServerImpl, HttpRequestHandler>
      (RuntimeOption::ServerIP, info->getPort(), info->getThreadCount(),
       info->getTimeoutSeconds()));
   server->create(info->getURLs());
   m_server = server;
 }
 RPCServerImpl(const std::string &address, SatelliteServerInfoPtr info)
   : LibEventServer(address, info->getPort(), info->getThreadCount(),
                    info->getTimeoutSeconds()),
     m_serverInfo(info) {
 }
 DanglingPageServer(SatelliteServerInfoPtr info) {
   m_server = ServerPtr
     (new TypedServer<LibEventServer, HttpRequestHandler>
      (RuntimeOption::ServerIP, info->getPort(), info->getThreadCount(),
       info->getTimeoutSeconds()));
 }