Ejemplo n.º 1
0
 def __init__(self, host, port=defaultport, autoconnect=True,
              timeout=defaulttimeout):
     Stream.__init__(self, autoconnect=False)
     self.host = host
     self.port = port
     self.timeout = timeout
     self.safe = True
     if autoconnect:
         self.connect()
Ejemplo n.º 2
0
 def disconnect(self):
     if not self._connected:
         return
     if hasattr(self, 'rsocket'):
         self.rsocket.shutdown(socket.SHUT_RD)
         self.rsocket.close()
         del self.rsocket
     if hasattr(self, 'wsocket'):
         self.wsocket.shutdown(socket.SHUT_WR)
         self.wsocket.close()
         del self.wsocket
     Stream.disconnect(self)
Ejemplo n.º 3
0
 def __init__(self, host, port=defaultport, autoconnect=True,
              timeout=defaulttimeout):
     Stream.__init__(self, autoconnect=False)
     self.tdelay = 0
     self.host = host
     self.port = port
     self.timeout = timeout
     self.safe = True
     # set these to numerical values so find_time_range is not triggered
     # and so called to min and max in read_event don't throw errors
     self._mintime = float('inf')
     self._maxtime = float('-inf')
     if autoconnect:
         self.connect()
Ejemplo n.º 4
0
 def start(self):  # Implement restart button with ai reloading
     self.scene.clear()
     self.drawDots()  # Coordinate helper
     self.loadAI()  # Get ais from plugins
     self.stream = Stream(self.ai)  # Main stream of events
     self.world = World(stream=self.stream)  # Main container of objects
     self.stream.start()
     self.world.ai = self.ai
     self.initWorld()  # Init barriers, and other stuff
     self.api = API(
         self.scene,
         self.world)  # TODO: remove singleton, make personal apis
     self.api.addIconsFolder('static')
     self.api.addIconsFolder('static/emblems')
     self.initAI()  # Create AI, place in World
Ejemplo n.º 5
0
 def disconnect(self):
     if not self._connected:
         return
     if hasattr(self, 'rconn'):
         self.rconn.shutdown(socket.SHUT_RD)
         self.rconn.close()
         del self.rconn
     if hasattr(self, 'wconn'):
         self.wconn.shutdown(socket.SHUT_RD)
         self.wconn.close()
         del self.wconn
     if hasattr(self, 'socket'):
         self.socket.shutdown(socket.SHUT_RD)
         self.socket.close()
         del self.socket
     Stream.disconnect(self)
Ejemplo n.º 6
0
    def connect(self):
        if self._connected:
            return
        logging.debug("Server: listening for client write connnection")
        self.host = resolve_host(self.host)
        try:
            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            #self.socket.settimeout(self.timeout)
            self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self.socket.bind((self.host, self.port))
            self.socket.listen(1)
            self.wconn, self.waddr = self.socket.accept()
            #self.wconn.settimeout(self.timeout)
        except socket.error as E:
            logging.error("Server.connect failed with: %s" % E)
            del self.socket
            return

        logging.debug("Server: building marshaler")
        self.wldo = \
            LDOBinary.LDOBinaryMarshaler(self.wconn.makefile('wb', 0))
        logging.debug("Server: init marshaler %s" % self.wldo)
        self.wldo.m_init()
        logging.debug("Server: flushing")
        self.wldo.flush()
        logging.debug("Server: built marshaler: %s" % self.wldo)

        logging.debug("Server: listening for client read connnection")
        try:
            self.rconn, self.raddr = self.socket.accept()
            #self.rconn.settimeout(self.timeout)
        except socket.error as E:
            self.wconn.close()
            del self.wconn, self.waddr, self.socket, self.wldo
            return

        logging.debug("Server: building unmarshaler")
        # strangly, the native server writes a stream header here
        self.rconn.sendall(LDOBinary.MAGIC + LDOBinary.VERSION +
                           chr(LDOBinary.MAJOR) + chr(LDOBinary.MINOR))
        self.rldo = \
            LDOBinary.LDOBinaryUnmarshaler(self.rconn.makefile('rb', 0))
        logging.debug("Server: built unmarshaler: %s" % self.rldo)
        self.rldo.read_stream_header = 1  # don't read the stream header
        self.rldo.um_init()
        Stream.connect(self)
Ejemplo n.º 7
0
 def start(self):  # Implement restart button with ai reloading
     self.scene.clear()
     self.drawDots()  # Coordinate helper
     self.loadAI()  # Get ais from plugins
     self.stream = Stream(self.ai)  # Main stream of events
     self.world = World(stream=self.stream)  # Main container of objects
     self.stream.start()
     self.world.ai = self.ai
     self.initWorld()  # Init barriers, and other stuff
     self.api = API(self.scene, self.world)  # TODO: remove singleton, make personal apis
     self.api.addIconsFolder('static')
     self.api.addIconsFolder('static/emblems')
     self.initAI()  # Create AI, place in World
Ejemplo n.º 8
0
 def connect(self):
     if self._connected:
         return
     self.host = resolve_host(self.host)
     try:
         self.rsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.rsocket.settimeout(self.timeout)
         self.rsocket.connect((self.host, self.port))
         self.rsocket.settimeout(socket.getdefaulttimeout())
     except socket.error as E:
         logging.error("StreamReader.start failed with: %s" % E)
         if hasattr(self, 'rsocket'):
             del self.rsocket
         return
     try:
         self.wsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.wsocket.settimeout(self.timeout)
         self.wsocket.connect((self.host, self.port))
         self.wsocket.settimeout(socket.getdefaulttimeout())
     except socket.error as E:
         logging.error("StreamReader.start failed with: %s" % E)
         if hasattr(self, 'wsocket'):
             del self.wsocket
         self.rsocket.shutdown(socket.SHUT_RD)
         self.rsocket.close()
         del self.rsocket
         return
     self.rldo = \
         LDOBinary.LDOBinaryUnmarshaler(self.rsocket.makefile('rb', 0))
     self.rldo.um_init()
     logging.debug("Client: built unmarshaler %s" % self.rldo)
     self.wldo = \
         LDOBinary.LDOBinaryMarshaler(self.wsocket.makefile('wb', 0))
     self.wldo.written_stream_header = 1  # don't write the stream header
     self.wldo.m_init()
     logging.debug("Client: built marshaler %s" % self.wldo)
     Stream.connect(self)
Ejemplo n.º 9
0
class UI(QMainWindow):
    """
        Main class. UI + graphics
    """
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Darknessers")
        self.setWindowIcon(QIcon('static/bulb.png'))
        self.resize(QSize(800, 600))

        scene = QGraphicsScene()
        self.scene = scene

        widget = QGraphicsView()
        # restart = QPushButton('Restart')
        # restart.clicked.connect(self.start)
        # widget.setLayout(QHBoxLayout())
        # widget.layout().addWidget(restart)
        widget.setScene(scene)

        self.setCentralWidget(widget)

        self.start()

    def start(self):  # Implement restart button with ai reloading
        self.scene.clear()
        self.drawDots()  # Coordinate helper
        self.loadAI()  # Get ais from plugins
        self.stream = Stream(self.ai)  # Main stream of events
        self.world = World(stream=self.stream)  # Main container of objects
        self.stream.start()
        self.world.ai = self.ai
        self.initWorld()  # Init barriers, and other stuff
        self.api = API(
            self.scene,
            self.world)  # TODO: remove singleton, make personal apis
        self.api.addIconsFolder('static')
        self.api.addIconsFolder('static/emblems')
        self.initAI()  # Create AI, place in World

    def initAI(self):  # Move not-gui logic to World
        for ai in self.ai:
            ai.world = World(ai, self.world)
            ###  # Start stats. Move to World
            self.world.stats[ai] = {
                'pos': QPointF(randint(-50, 50), randint(-50, 50)),
                'speed': 20,
                'skillpoints': 5,
                'hp': 50,
                'ac': 10,
                'light': 150,
                'light_angle': 90,
                'angle': 0
            }
            ###
            if ai.color == 'orange':
                self.world.stats[ai]['speed'] = 40
            ai.world.stream = self.stream
            ai.api = self.api
            ###  # Init start position and graphics logic
            cont = QGraphicsPolygonItem()
            cont.setPos(self.world.stats[ai]['pos'])  # Implement start areas
            ai.object = cont
            cont.ai = ai
            ###  # Draw light circle and color dot
            lc = QGraphicsEllipseItem(
                QRectF(QPointF(-ai.lightr, -ai.lightr),
                       QSizeF(ai.lightr * 2, ai.lightr * 2)), cont)
            lc.setStartAngle(
                (90 - self.world.stats[ai]['light_angle'] / 2) * 16)
            lc.setSpanAngle(self.world.stats[ai]['light_angle'] * 16)
            lc.setTransformOriginPoint(QPointF(0, 0))
            yl = QColor('yellow')
            yl.setAlpha(100)
            lc.setPen(QPen(yl))
            lc.setBrush(QBrush(yl))
            lc.setZValue(-50)
            cont.lc = lc
            em = QGraphicsPixmapItem(QPixmap(self.api.icons[ai.color]), cont)
            em.setZValue(50)
            em.setOffset(-10, -10)
            cont.em = em
            # ra = QGraphicsLineItem(QLineF(QPointF(0, 40), QPointF(0, 0)), cont)
            # cont.ra = ra
            self.scene.addItem(cont)
            self.connect(ai, SIGNAL('moved'), self.moveAI)
            self.stream.addEvent(ai.init)  # Start AI init method

    def initWorld(self):  # Move not-gui logic to World
        proto = QPolygonF(
            [QPointF(0, 0),
             QPointF(0, 50),
             QPointF(50, 50),
             QPointF(50, 0)])
        for i in range(0, 5):
            b = Barrier(proto)
            b.translate(QPointF(randint(-300, 300), randint(-300, 300)))
            self.world.barriers.append(b)
            item = self.scene.addPolygon(b)
            item.setBrush(QBrush(QColor('black')))

    def moveAI(self, ai):  # Drow changed position
        ai.object.setPos(ai.pos)
        ai.object.lc.setRotation(ai.angle)
        # ai.object.ra.setRotation(ai.angle)
        self.scene.update(self.scene.sceneRect())

    def drawDots(self):  # Helper
        tl = QPoint(-300, -300)
        br = QPoint(300, 300)
        step = 20
        for x in range(tl.x(), br.x(), step):
            for y in range(tl.y(), br.y(), step):
                e = self.scene.addEllipse(
                    QRectF(QPointF(x, y), QPointF(x + 0.5, y + 0.5)),
                    QPen(QColor('#555')))
                e.setZValue(-60)

    def loadAI(self):  # Load ais files
        self.loader = Loader(AI, 'ai')
        self.ai = self.loader.modules
Ejemplo n.º 10
0
 def update(self, n=100, **kwargs):
     try:
         Stream.update(self, n, **kwargs)
     except socket.timeout:
         logging.debug("Update timed out")
         return
Ejemplo n.º 11
0
class UI(QMainWindow):
    """
        Main class. UI + graphics
    """

    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Darknessers")
        self.setWindowIcon(QIcon('static/bulb.png'))
        self.resize(QSize(800, 600))

        scene = QGraphicsScene()
        self.scene = scene

        widget = QGraphicsView()
        # restart = QPushButton('Restart')
        # restart.clicked.connect(self.start)
        # widget.setLayout(QHBoxLayout())
        # widget.layout().addWidget(restart)
        widget.setScene(scene)

        self.setCentralWidget(widget)

        self.start()

    def start(self):  # Implement restart button with ai reloading
        self.scene.clear()
        self.drawDots()  # Coordinate helper
        self.loadAI()  # Get ais from plugins
        self.stream = Stream(self.ai)  # Main stream of events
        self.world = World(stream=self.stream)  # Main container of objects
        self.stream.start()
        self.world.ai = self.ai
        self.initWorld()  # Init barriers, and other stuff
        self.api = API(self.scene, self.world)  # TODO: remove singleton, make personal apis
        self.api.addIconsFolder('static')
        self.api.addIconsFolder('static/emblems')
        self.initAI()  # Create AI, place in World

    def initAI(self):  # Move not-gui logic to World
        for ai in self.ai:
            ai.world = World(ai, self.world)
            ###  # Start stats. Move to World
            self.world.stats[ai] = {
                'pos': QPointF(randint(-50, 50), randint(-50, 50)),
                'speed': 20,
                'skillpoints': 5,
                'hp': 50,
                'ac': 10,
                'light': 150,
                'light_angle': 90,
                'angle': 0
            }
            ###
            if ai.color == 'orange':
                self.world.stats[ai]['speed'] = 40
            ai.world.stream = self.stream
            ai.api = self.api
            ###  # Init start position and graphics logic
            cont = QGraphicsPolygonItem()
            cont.setPos(self.world.stats[ai]['pos'])  # Implement start areas
            ai.object = cont
            cont.ai = ai
            ###  # Draw light circle and color dot
            lc = QGraphicsEllipseItem(QRectF(QPointF(-ai.lightr, -ai.lightr), QSizeF(ai.lightr * 2, ai.lightr * 2)), cont)
            lc.setStartAngle((90 - self.world.stats[ai]['light_angle'] / 2) * 16)
            lc.setSpanAngle(self.world.stats[ai]['light_angle'] * 16)
            lc.setTransformOriginPoint(QPointF(0, 0))
            yl = QColor('yellow')
            yl.setAlpha(100)
            lc.setPen(QPen(yl))
            lc.setBrush(QBrush(yl))
            lc.setZValue(-50)
            cont.lc = lc
            em = QGraphicsPixmapItem(QPixmap(self.api.icons[ai.color]), cont)
            em.setZValue(50)
            em.setOffset(-10, -10)
            cont.em = em
            # ra = QGraphicsLineItem(QLineF(QPointF(0, 40), QPointF(0, 0)), cont)
            # cont.ra = ra
            self.scene.addItem(cont)
            self.connect(ai, SIGNAL('moved'), self.moveAI)
            self.stream.addEvent(ai.init)  # Start AI init method

    def initWorld(self):  # Move not-gui logic to World
        proto = QPolygonF([QPointF(0, 0), QPointF(0, 50), QPointF(50, 50), QPointF(50, 0)])
        for i in range(0, 5):
            b = Barrier(proto)
            b.translate(QPointF(randint(-300, 300), randint(-300, 300)))
            self.world.barriers.append(b)
            item = self.scene.addPolygon(b)
            item.setBrush(QBrush(QColor('black')))

    def moveAI(self, ai):  # Drow changed position
        ai.object.setPos(ai.pos)
        ai.object.lc.setRotation(ai.angle)
        # ai.object.ra.setRotation(ai.angle)
        self.scene.update(self.scene.sceneRect())

    def drawDots(self):  # Helper
        tl = QPoint(-300, -300)
        br = QPoint(300, 300)
        step = 20
        for x in range(tl.x(), br.x(), step):
            for y in range(tl.y(), br.y(), step):
                e = self.scene.addEllipse(QRectF(QPointF(x, y), QPointF(x + 0.5, y + 0.5)), QPen(QColor('#555')))
                e.setZValue(-60)

    def loadAI(self):  # Load ais files
        self.loader = Loader(AI, 'ai')
        self.ai = self.loader.modules