def spawnDedicatedZone(self, simAvatar, zoneName, simPort):
        if zoneName == 'any':
            #we pick
            znames = [zone.name for zone in self.zones]
            #list of all instances
            zinstances = []
            for zi in self.liveZoneInstances:
                zinstances.append(zi)
            for zi in self.waitingZoneInstances:
                zinstances.append(zi)

            for zi in zinstances:
                if zi.zone.name in znames:
                    znames.remove(zi.zone.name)

            if not len(znames):
                #all zones served
                raise "all zones server, this isn't actually an error... eventually we serve another zone instance, based on waiting etc"

            zoneName = znames[0]
        else:
            #let's see if we launched this zone
            for zi in self.waitingZoneInstances:
                if zi.port == simPort:
                    return zi

        #this is a dedicated server that has been launched remotely,
        #shouldn't happen for right now... so we'll assert
        traceback.print_stack()
        print "AssertionError: dedicated server launched remotely, shouldn't happen for now!"
        return

        zone = Zone.byName(zoneName)
        #hrm
        ip = self.zoneIP  #see world server main.py
        simPassword = ""
        z = ZoneInstance(zone, ip, simPort, simPassword, None)
        z.time = self.time
        self.waitingZoneInstances.append(z)
        return z
    def getPlayerZone(self, pavatar, simPort, simPassword):
        # If the world is shutting down, return None.
        if self.shuttingDown:
            return None

        player = pavatar.player

        allzi = []
        allzi.extend(self.liveZoneInstances)
        allzi.extend(self.waitingZoneInstances)

        #select zone
        if player.darkness:
            logZone = player.darknessLogZone
        elif player.monster:
            logZone = player.monsterLogZone
        else:
            logZone = player.logZone

        for z in allzi:
            if z.zone == logZone:
                #for now if zone is up just join that one
                return z

        #zone isn't up
        if CoreSettings.PGSERVER:
            raise AssertionError, "Error, Zone %s isn't up!" % logZone.name

        if self.singlePlayer:
            ip = '127.0.0.1'
            z = ZoneInstance(logZone, ip, simPort, simPassword, None)
            z.world = self
            z.time = self.time
            self.waitingZoneInstances.append(z)
            return z
        else:
            #the zone isn't up and we are multiplayer, so we need to launch the process
            return self.startZoneProcess(logZone.name)

        return z
 def spawnDedicatedZone(self,simAvatar,zoneName,simPort):
     if zoneName == 'any':
         #we pick
         znames = [zone.name for zone in self.zones]
         #list of all instances
         zinstances = []
         for zi in self.liveZoneInstances:
             zinstances.append(zi)
         for zi in self.waitingZoneInstances:
             zinstances.append(zi)
             
         for zi in zinstances:
             if zi.zone.name in znames:
                 znames.remove(zi.zone.name)
                 
         if not len(znames):
             #all zones served
             raise "all zones server, this isn't actually an error... eventually we serve another zone instance, based on waiting etc"
             
         zoneName = znames[0]
     else:
         #let's see if we launched this zone
         for zi in self.waitingZoneInstances:
             if zi.port == simPort:
                 return zi
         
     #this is a dedicated server that has been launched remotely, 
     #shouldn't happen for right now... so we'll assert
     traceback.print_stack()
     print "AssertionError: dedicated server launched remotely, shouldn't happen for now!"
     return
     
     zone = Zone.byName(zoneName)
     #hrm
     ip = self.zoneIP #see world server main.py
     simPassword = ""
     z = ZoneInstance(zone,ip,simPort,simPassword,None)
     z.time = self.time
     self.waitingZoneInstances.append(z)
     return z
 def getPlayerZone(self, pavatar, simPort, simPassword):
     # If the world is shutting down, return None.
     if self.shuttingDown:
         return None
     
     player = pavatar.player
     
     allzi = []
     allzi.extend(self.liveZoneInstances)
     allzi.extend(self.waitingZoneInstances)
     
     #select zone
     if player.darkness:
         logZone = player.darknessLogZone
     elif player.monster:
         logZone = player.monsterLogZone
     else:
         logZone = player.logZone
     
     for z in allzi:
         if z.zone == logZone:
             #for now if zone is up just join that one
             return z
     
     #zone isn't up
     if CoreSettings.PGSERVER:
         raise AssertionError,"Error, Zone %s isn't up!"%logZone.name
     
     if self.singlePlayer:
         ip = '127.0.0.1'
         z = ZoneInstance(logZone,ip,simPort,simPassword,None)
         z.world = self
         z.time = self.time
         self.waitingZoneInstances.append(z)
         return z
     else:
         #the zone isn't up and we are multiplayer, so we need to launch the process
         return self.startZoneProcess(logZone.name)
     
     return z
    def startZoneProcess(self, zoneName, dynamic=True):
        port = None
        for x in xrange(self.zoneStartPort, self.zoneStartPort + 100):
            if x in self.usedZonePorts:
                continue
            port = x
            self.usedZonePorts.append(x)
            break

        if port == None:
            traceback.print_stack()
            print "AssertionError: no port assigned!"
            return

        zone = Zone.byName(zoneName)
        #hrm
        ip = self.zoneIP  #see world server main.py
        simPassword = ""
        z = ZoneInstance(zone, ip, port, simPassword, None)
        z.world = self
        z.time = self.time
        z.dynamic = dynamic

        self.waitingZoneInstances.append(z)

        if self.frozen:
            cmd = r'..\bin\ZoneServer.exe'
            args = ""
        else:
            cmd = sys.executable
            path = os.getcwd()
            args = r'%s/zoneserver.py' % path

        args += r' -dedicated'
        args += r' -serverport %i -zone %s -world %s -worldport %i' % (
            port, zoneName, self.multiName, self.worldPort)
        if dynamic:
            args += r' -dynamic'

        for arg in sys.argv:
            if arg.startswith("gameconfig="):
                args += " %s" % arg

        if sys.platform[:6] != "darwin":
            # Just don't provide cluster number via gameconfig until
            #  MoM uses gameconfig as well.
            args += r' -cluster=%i' % self.clusterNum
            s = 'start "%s" %s %s' % (os.getcwd(), cmd, args)
            s = os.path.normpath(s)
            print s
            os.system(s)

        else:
            if arg.startswith("-wx"):
                args += " -wx"

            cmd = sys.executable
            args = args.split(" ")
            args.insert(0, cmd)
            s = 'pythonw -c \'import os;os.spawnv(os.P_NOWAIT,"%s",[%s])\'' % (
                cmd, ','.join('"%s"' % arg for arg in args))
            print s
            os.system(s)

        return z
 def startZoneProcess(self,zoneName,dynamic=True):
     port = None
     for x in xrange(self.zoneStartPort,self.zoneStartPort+100):
         if x in self.usedZonePorts:
             continue
         port = x
         self.usedZonePorts.append(x)
         break
         
     if port == None:
         traceback.print_stack()
         print "AssertionError: no port assigned!"
         return
     
     zone = Zone.byName(zoneName)
     #hrm
     ip = self.zoneIP #see world server main.py
     simPassword = ""
     z = ZoneInstance(zone,ip,port,simPassword,None)
     z.world = self
     z.time = self.time
     z.dynamic = dynamic
     
     self.waitingZoneInstances.append(z)
     
     if self.frozen:
         cmd  =  r'..\bin\ZoneServer.exe'
         args = ""
     else:
         cmd  = sys.executable
         path = os.getcwd()
         args = r'%s/zoneserver.py'%path
     
     args += r' -dedicated'
     args += r' -serverport %i -zone %s -world %s -worldport %i'%(port,zoneName,self.multiName,self.worldPort)
     if dynamic:
         args += r' -dynamic'
     
     for arg in sys.argv:
         if arg.startswith("gameconfig="):
             args += " %s"%arg
     
     if sys.platform[:6] != "darwin":
         # Just don't provide cluster number via gameconfig until
         #  MoM uses gameconfig as well.
         args += r' -cluster=%i'%self.clusterNum
         s = 'start "%s" %s %s'%(os.getcwd(),cmd,args)
         s = os.path.normpath(s)
         print s
         os.system(s)
     
     else:
         if arg.startswith("-wx"):
             args += " -wx"
         
         cmd = sys.executable
         args = args.split(" ")
         args.insert(0,cmd)
         s = 'pythonw -c \'import os;os.spawnv(os.P_NOWAIT,"%s",[%s])\''%(cmd,','.join('"%s"'%arg for arg in args))
         print s
         os.system(s)
     
     return z