Example #1
0
class ThreadedRunner(Runnable):

    def __init__(self, runnable):
        self._runnable = runnable
        self._notifier = Event()
        self._result = None
        self._error = None
        self._traceback = None
        self._thread = None

    def run(self):
        try:
            self._result = self._runnable()
        except:
            self._error, self._traceback = sys.exc_info()[1:]
        self._notifier.set()

    __call__ = run

    def run_in_thread(self, timeout):
        self._thread = Thread(self, name=TIMEOUT_THREAD_NAME)
        self._thread.setDaemon(True)
        self._thread.start()
        self._notifier.wait(timeout)
        return self._notifier.isSet()

    def get_result(self):
        if self._error:
            raise self._error, None, self._traceback
        return self._result

    def stop_thread(self):
        self._thread.stop()
Example #2
0
 def execute(self, runnable):
     runner = Runner(runnable)
     thread = Thread(runner, name='RobotFrameworkTimeoutThread')
     thread.setDaemon(True)
     thread.start()
     thread.join(int(self._timeout * 1000))
     if thread.isAlive():
         thread.stop()
         raise TimeoutError(self._error)
     return runner.get_result()
Example #3
0
 def execute(self, runnable):
     runner = Runner(runnable)
     thread = Thread(runner, name='RobotFrameworkTimeoutThread')
     thread.setDaemon(True)
     thread.start()
     thread.join(int(self._timeout * 1000))
     if thread.isAlive():
         thread.stop()
         raise TimeoutError(self._error)
     return runner.get_result()
class GameBase(Runnable):
    components = GameComponent
    canvas = Canvas
    thread = Thread
    dbg = Graphics
    db_image = BufferedImage
    
    running = False
    is_paused = False
    game_over = False
    is_applet = False
    size_changed = False
    game_time = GameTime()
    updates = 0
    
    NO_DELAYS_PER_YIELD = 16
    MAX_FRAME_SKIPS = 5
    period = None
    game_start_time = None
    frames_skipped = None
    
    gelapsed_before = System.nanoTime()
    gelapsed_after = System.nanoTime()
    
    MAX_STAT_INTERVAL = 1
    NUM_FPS = 10
    stats_interval = 0
    prev_stats_time = 0
    total_elapsed_time = 0
    time_spend_in_game = 0
    frame_count = 0
    fps_store = []
    stats_count = 0
    average_fps = 0
    total_frames_skipped = 0
    ups_store = 0
    average_ups = 0
    df = DecimalFormat("0.##")


    def set_size(self, size):
        self.canvas.setSize(size)
        self.size_changed = True


    def set_resolution(self, size):
        self.set_size(size)


    def get_resolution(self):
        return Dimension(self.db_image.getWidth(), self.db_image.getHeight())


    def get_is_active(self):
        if self.is_paused == True:
            return False
        else:
            return True


    def get_is_applet(self):
        return self.is_applet


    def set_is_applet(self, flag):
        if type(flag) is not type(True):
            raise Exception("Flag passed to set_is_applet not a boolean. Got %s instead." % type(flag))
        self.is_applet = flag


    def get_stats_avg_fps(self):
        return self.average_fps


    def get_stats_avg_ups(self):
        return self.average_ups


    def __init__(self, size, fps):
        self.set_size(size)
        Component.setPreferredSize(size)
        Component.setMinimumSize(size)
        Component.setMaximumSize(size)
        
        Component.setBackground(Color.white)
        
        Component.setFocusable(True)
        Component.requestFocus()
        
        db_image = BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB)
        
        self.fps_store = self.NUM_FPS
        self.ups_store = self.NUM_FPS
        i = 0
        if i < self.NUM_FPS:
            self.fps_store[i] = 0
            self.ups_store[i] = 0
            i += 1


    def run(self):
        before_time = None
        after_time = None
        time_diff = None
        sleep_time = None
        over_sleep_time = 0
        no_delays = 0
        excess = 0
        
        game_start_time = System.nanoTime()
        prev_stats_time = game_start_time
        before_time = game_start_time
        
        running = True
        
        while running:
            self.game_update()
            self.game_render()
            self.paint_screen()
            
            after_time = System.nanoTime()
            time_diff = after_time - before_time
            sleep_time = (self.period - time_diff) - over_sleep_time
            
            if sleep_time > 0:
                try:
                    Thread.sleep(sleep_time)
                except InterruptedException as e:
                    pass
                over_sleep_time = (System.nanoTime() - after_time) - sleep_time
            else:
                excess -= sleep_time
                over_sleep_time = 0
                
                if (no_delays + 1) >= self.NO_DELAYS_PER_YIELD:
                    Thread.yield()
                    no_delays = 0
            
            before_time = System.nanoTime()
            
            skips = 0
            
            while excess > self.period and skips < self.MAX_FRAME_SKIPS:
                excess -= self.period
                self.game_update()
                skips += 1
            
            self.frames_skipped += skips
            
            self.store_stats()
        
        self.print_stats()
        System.exit(0)


    def store_stats(self):
        self.frame_count += 1
        self.stats_interval += self.period
        
        if self.stats_interval >= self.MAX_STAT_INTERVAL:
            time_now = System.nanoTime()
            self.time_spend_in_game = time_now - self.game_start_time
            
            real_elapsed_time = time_now - self.prev_stats_time
            self.total_elapsed_time += real_elapsed_time
            
            self.total_frames_skipped += self.frames_skipped
            
            if self.total_elapsed_time > 0:
                actual_fps = self.frame_count / self.total_elapsed_time
                actual_ups = (self.frame_count + self.total_frames_skipped) / self.total_elapsed_time
            
            self.fps_store[self.stats_count % self.NUM_FPS] = actual_fps
            self.ups_store[self.stats_count % self.NUM_FPS] = actual_ups
            self.stats_count += 1
            
            i = 0
            if i < self.NUM_FPS:
                total_fps = self.fps_store[i]
                total_ups = self.ups_store[i]
                i += 1
            
            if self.stats_count < self.NUM_FPS:
                self.average_fps = total_fps / self.stats_count
                self.average_ups = total_ups / self.stats_count
            else:
                self.average_fps = total_fps / self.NUM_FPS
                self.average_ups = total_ups / self.NUM_FPS
            
            self.frames_skipped = 0
            self.prev_stats_time = time_now
            self.stats_interval = 0


    def game_update(self):
        self.gelapsed_after = System.nanoTime()
        
        self.game_time.elapsed_game_time.set_span(self.gelapsed_before, self.gelapsed_after)
        self.game_time.elapsed_real_time.set_span(self.gelapsed_before, self.gelapsed_after)
        
        self.game_time.total_game_time.set_span(self.game_start_time, self.gelapsed_after)
        self.game_time.total_real_time.set_span(self.game_start_time, self.gelapsed_after)
        
        self.gelapsed_before = System.nanoTime()
        
        if self.running and self.is_paused is not True and self.game_over is not True:
            for item in self.components.getComponents():
                item.update(self.game_time)
            self.updates += 1


    def get_render(self):
        if self.db_image is None or self.size_changed:
            size = Dimension(Component.getWidth(), Component.getHeight())
            self.set_size(size)
            Component.setPreferredSize(size)
            Component.setMinimumSize(size)
            Component.setMaximumSize(size)
            self.size_changed = False
            
            try:
                self.db_image = BufferedImage(Component.getWidth(), Component.getHeight(), BufferedImage.TYPE_INT_RGB)
            except JavaException as e:
                self.db_image = None
                System.out.println("Render Error: %s" % e)
                System.out.println("Render Error: Buffer not initialized properly")
                System.out.println("Render Error: Resolving...")


    def paint_screen(self):
        bs = Canvas.getBufferStrategy()
        if bs is None:
            Canvas.createBufferStrategy(3)
        
        g = bs.getDrawGraphics()
        g.drawImage(self.db_image, 0, 0, Component.getWidth(), Component.getHeight(), None)
        g.dispose()
        bs.show()


    def start_game(self):
        if self.running:
            return
        self.thread = Thread(self)
        self.thread.start()
        self.running = True


    def stop_game(self):
        if self.running is None:
            return
        self.thread.stop()
        self.running = False


    def set_preferred_fps(self, fps):
        self.period = 1000/fps


    def reset_elapsed_time(self):
        self.game_time.elapsed_game_time.set_span(0)
        self.game_time.elapsed_real_time.set_span(0)


    def add_component(self, game_component):
        game_component.initialize()
        game_component.load_content()
        self.components.add(game_component)


    def remove_component(self, game_component):
        game_component.unload_content()
        self.components.remove(game_component)


    def resume_game(self):
        self.is_paused = False


    def pause_game(self):
        self.is_paused = True


    def print_stats(self):
        System.out.println("Frame Count/Loss: %s / %s" % (self.frame_count, self.total_frames_skipped))
        System.out.println("Average FPS: %s" % self.df.format(self.average_fps))
        System.out.println("Average UPS: %s" % self.df.format(self.average_ups))
        System.out.println("TIme Spend: %s secs" % self.time_spend_in_game)
        System.out.println("Total Updates: %s" % self.updates)
        System.out.println("dbImage: %s" % self.db_image.toString())
Example #5
0
File: vpn.py Project: cygmris/enos
class VPNService(Container, MultiPointVPNService):
    def __init__(self):
        Resource.__init__(self, "MultiPointVPNService")
        print "MultiPoint VPN Service is starting"
        self.vpnIndex = {}
        self.vpnIndexById = {}
        self.topology = None
        self.coretopology = None
        self.lock = threading.Lock()
        self.properties['mat'] = True  # Default.
        self.loadService()
        self.saveThread = Thread(target=self.autosave)
        self.saveThread.start()
        if self.topology != None:
            self.setscc()

    def setscc(self):
        self.SCC = SdnControllerClient()
        self.sccThread = JavaThread(self.SCC)
        self.sccThread.start()
        self.VPNcallback = VpnCallback("MP-VPN Service", self)
        setcallback(self.VPNcallback)
        self.SCC.setCallback(self.VPNcallback)

    def settopos(self, popstoponame, coretoponame):
        self.properties['topology'] = popstoponame
        self.topology = Container.getContainer(self.properties['topology'])
        self.properties['coretopology'] = coretoponame
        self.coretopology = Container.getContainer(
            self.properties['coretopology'])
        # We can now set up the callback
        self.setscc()
        self.saveService()

    def shutdown(self):
        self.saveThread.stop()
        if self.sccThread != None:
            self.sccThread.stop()
            self.SCC.clearCallback()
        MultiPointVPNServiceFactory.delete()

    def autosave(self):
        while True:
            if not self.topology == None:
                self.saveService()
                for (x, vpn) in self.vpnIndex.items():
                    vpn.saveVPN()
            time.sleep(60)

    def saveService(self):
        self.properties['sid'] = self.sid
        if self.topology != None:
            self.properties['topology'] = self.topology.getResourceName()
        if self.coretopology != None:
            self.properties[
                'coretopology'] = self.coretopology.getResourceName()
        try:
            self.save()
        except:
            print "Failed to save VPN Service\n", sys.exc_info()[0]

    def loadService(self):
        stored = Container.getContainer(self.getResourceName())
        mapResource(obj=self, resource=stored)
        if 'topology' in self.properties:
            self.topology = Container.getContainer(self.properties['topology'])
        if 'coretopology' in self.properties:
            self.coretopology = Container.getContainer(
                self.properties['coretopology'])
        vpns = self.loadResources({"resourceType": "VPN"})
        for v in vpns:
            vpn = VPN(v.getResourceName())
            vpn.loadVPN(self)
            self.vpnIndex[v.getResourceName()] = vpn
            self.vpnIndexById[vpn.vid] = vpn
        if not 'mat' in self.properties:
            self.properties['mat'] = True

    def newVid(self):
        with self.lock:
            while True:
                v = random.randint(1, 65535)
                if not v in self.vpnIndexById:
                    return v

    def getSite(self, s):
        global sites
        if s in sites:
            return sites[s]
        else:
            return None

    def getHost(self, s):
        return tbns[s]

    def addVpn(self, vpn):
        self.vpnIndex[vpn.name] = vpn
        self.vpnIndexById[vpn.vid] = vpn
        self.saveResource(vpn)

    def createVPN(self, vpnname):
        if vpnname in self.vpnIndex:
            return None
        vpn = VPN(vpnname, vs=self)
        self.vid = self.newVid()
        self.addVpn(vpn)
        return vpn

    def deleteVPN(self, vpnname):
        if not vpnname in self.vpnIndex:
            print "vpn name %s not found" % vpnname
            return
        vpn = self.vpnIndex[vpnname]
        for h in vpn.hostsites.keys():
            self.delhostbymac(vpn, h)
        for s in vpn.vpnsites.values():
            self.delsite(vpn, s)
        for p in vpn.pops.values():
            self.delpop(vpn, p)
        self.vpnIndex.pop(vpn.name)
        self.vpnIndexById.pop(vpn.vid)
        self.deleteResource(vpn)
        print "VPN %s removed successfully." % (vpn.name)
        return True

    def getVPN(self, vpnname):
        if not vpnname in self.vpnIndex:
            return None
        return self.vpnIndex[vpnname]

    def addPOP(self, vpn, pop):
        if not vpn.addpop(pop):
            return False
        return True

    def deletePOP(self, vpn, pop):
        if not vpn.delpop(pop):
            return False
        return True

    def addSite(self, vpn, site, vlan):
        if not vpn.addsite(site, vlan):
            # possible issues: duplicated site
            return False
        return True

    def deleteSite(self, vpn, site):
        if not vpn.delsite(site):
            return False
        return True

    def addhostbymac(self, vpn, site, mac):
        if not vpn.addhostbymac(site, mac):
            print "Error while adding host."
            return
        print "Host %s has been added into VPN %s successfully at site %s" % (
            mac, vpn.name, site['name'])

    def delhostbymac(self, vpn, mac):
        if not vpn.delhostbymac(mac):
            print "Error while deleting host."
            return
Example #6
0
File: vpn.py Project: esnet/enos
class VPNService(Container,MultiPointVPNService):
    def __init__(self):
        Resource.__init__(self,"MultiPointVPNService")
        print "MultiPoint VPN Service is starting"
        self.vpnIndex = {}
        self.vpnIndexById = {}
        self.topology = None
        self.coretopology = None
        self.lock = threading.Lock()
        self.properties['mat'] = True # Default.
        self.loadService()
        self.saveThread = Thread(target=self.autosave)
        self.saveThread.start()
        if self.topology != None:
            self.setscc()

    def setscc(self):
        self.SCC = SdnControllerClient()
        self.sccThread = JavaThread(self.SCC)
        self.sccThread.start()
        self.VPNcallback = VpnCallback("MP-VPN Service", self)
        setcallback(self.VPNcallback)
        self.SCC.setCallback(self.VPNcallback)

    def settopos(self, popstoponame, coretoponame):
        self.properties['topology'] = popstoponame
        self.topology = Container.getContainer(self.properties['topology'])
        self.properties['coretopology'] = coretoponame
        self.coretopology = Container.getContainer(self.properties['coretopology'])
        # We can now set up the callback
        self.setscc()
        self.saveService()

    def shutdown(self):
        self.saveThread.stop()
        if self.sccThread != None:
            self.sccThread.stop()
            self.SCC.clearCallback()
        MultiPointVPNServiceFactory.delete()

    def autosave(self):
        while True:
            if not self.topology == None:
                self.saveService()
                for (x,vpn) in self.vpnIndex.items():
                    vpn.saveVPN()
            time.sleep(60)

    def saveService(self):
        self.properties['sid'] = self.sid
        if self.topology != None:
            self.properties['topology'] = self.topology.getResourceName()
        if self.coretopology != None:
            self.properties['coretopology'] = self.coretopology.getResourceName()
        try:
            self.save()
        except:
            print "Failed to save VPN Service\n", sys.exc_info()[0]

    def loadService(self):
        stored = Container.getContainer(self.getResourceName())
        mapResource (obj=self,resource=stored)
        if 'topology' in self.properties:
            self.topology = Container.getContainer(self.properties['topology'])
        if 'coretopology' in self.properties:
            self.coretopology = Container.getContainer(self.properties['coretopology'])
        vpns = self.loadResources({"resourceType":"VPN"})
        for v in vpns:
            vpn = VPN(v.getResourceName())
            vpn.loadVPN(self)
            self.vpnIndex[v.getResourceName()] = vpn
            self.vpnIndexById[vpn.vid] = vpn
        if not 'mat' in self.properties:
            self.properties['mat'] = True

    def newVid(self):
        with self.lock:
            while True:
                v = random.randint(1,65535)
                if not v in self.vpnIndexById:
                    return v

    def getSite(self,s):
        global sites
        if s in sites:
            return sites[s]
        else:
            return None

    def getHost(self,s):
        return tbns[s]

    def addVpn(self,vpn):
        self.vpnIndex[vpn.name] = vpn
        self.vpnIndexById[vpn.vid] = vpn
        self.saveResource(vpn)

    def createVPN(self,vpnname):
        if vpnname in self.vpnIndex:
            return None
        vpn = VPN(vpnname,vs=self)
        self.vid = self.newVid()
        self.addVpn(vpn)
        return vpn

    def deleteVPN(self,vpnname):
        if not vpnname in self.vpnIndex:
            print "vpn name %s not found" % vpnname
            return
        vpn = self.vpnIndex[vpnname]
        for h in vpn.hostsites.keys():
            self.delhostbymac(vpn, h)
        for s in vpn.vpnsites.values():
            self.delsite(vpn, s)
        for p in vpn.pops.values():
            self.delpop(vpn, p)
        self.vpnIndex.pop(vpn.name)
        self.vpnIndexById.pop(vpn.vid)
        self.deleteResource(vpn)
        print "VPN %s removed successfully." % (vpn.name)
        return True

    def getVPN(self,vpnname):
        if not vpnname in self.vpnIndex:
            return None
        return self.vpnIndex[vpnname]

    def addPOP(self,vpn, pop):
        if not vpn.addpop(pop):
            return False
        return True

    def deletePOP(self,vpn, pop):
        if not vpn.delpop(pop):
            return False
        return True

    def addSite(self, vpn, site, vlan):
        if not vpn.addsite(site, vlan):
            # possible issues: duplicated site
            return False
        return True

    def deleteSite(self, vpn, site):
        if not vpn.delsite(site):
            return False
        return True

    def addhostbymac(self, vpn, site, mac):
        if not vpn.addhostbymac(site, mac):
            print "Error while adding host."
            return
        print "Host %s has been added into VPN %s successfully at site %s" % (mac, vpn.name, site['name'])

    def delhostbymac(self,vpn, mac):
        if not vpn.delhostbymac(mac):
            print "Error while deleting host."
            return