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()
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)
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()
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 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)
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)
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 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)
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
def update(self, n=100, **kwargs): try: Stream.update(self, n, **kwargs) except socket.timeout: logging.debug("Update timed out") return
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