def __setitem__(self, key, value): if type(value) == types.InstanceType: value.oid = key # set value self.updateCacheItem(key) self.cache[key] = value #value.setModified(0) # write through new objects if not self.has_key(key): raise ige.ServerException("'%s' created using set method" % key)
def computeScanner(obj1, obj2, playerMaps, signatures): d = math.hypot(obj1.x - obj2.x, obj1.y - obj2.y) sigMod = signatures.get(obj2.oid, 0) if hasattr(obj1, "scannerPwr"): recordScanLevel(d, obj2, sigMod, obj1.scannerPwr, obj1.owner, playerMaps) elif hasattr(obj1, "scannerPwrs"): for owner, scannerPwr in obj1.scannerPwrs.iteritems(): recordScanLevel(d, obj2, sigMod, scannerPwr, owner, playerMaps) else: raise ige.ServerException("Unsupported object")
def create(self, object, id = None): #@log.debug("Creating new object", id) if not id: id = self.nextID while self.has_key(id): id += 1 self.nextID = id + 1 object.oid = id #@log.debug("OID =", id) if self.has_key(id): raise ige.ServerException("'%s' created twice" % id) self.cache[id] = object self.addNewCacheItem(id) self.put(id, pickle.dumps(object, pickle.HIGHEST_PROTOCOL)) return id
def restore(self, filename): log.message("Restoring database from file", filename) fh = file(filename, "r") line = fh.readline().strip() if line != "IGE OUTER SPACE BACKUP VERSION 1": raise ige.ServerException("Incorrect header: %s" % line) while True: key = fh.readline().strip() if key == "END OF BACKUP": break data = fh.readline().strip() key = binascii.a2b_hex(key) data = binascii.a2b_hex(data) self.db.put(key, data, txn = self.txn) log.message("Database restored")
def loadBSDDBBackup(self, filename): log.message("Restoring database from file", filename) fh = file(filename, "r") for hLine in ("VERSION=3", "format=bytevalue", "type=btree", "keys=1", "HEADER=END"): line = fh.readline().strip() if line != hLine: raise ige.ServerException("Incorrect header: %s" % line) while True: key = fh.readline().strip() if key == "DATA=END": break data = fh.readline().strip() key = int(binascii.a2b_hex(key)) data = binascii.a2b_hex(data) #@log.debug("Storing key", key) self.put(key, data) log.message("Database restored")
def getSpeedBoost(tran, player, objs): speedBoost = 10000.0 for obj in objs: if obj.type == Const.T_PLANET: system = tran.db[obj.compOf] elif obj.type in (Const.T_SYSTEM, Const.T_WORMHOLE): system = obj else: raise ige.ServerException("Not a planet or system") # tmpBoost = 1.0 for planetID in system.planets: planet = tran.db[planetID] if planet.owner == player.oid: tmpBoost = max(tmpBoost, planet.fleetSpeedBoost) elif tran.gameMngr.cmdPool[player.type].isPactActive( tran, player, planet.owner, Const.PACT_ALLOW_TANKING): tmpBoost = max(tmpBoost, planet.fleetSpeedBoost) speedBoost = min(speedBoost, tmpBoost) #@log.debug("Speed boost", speedBoost) return speedBoost
def restore(self, filename, include = None): log.message("Restoring database from file", filename) fh = file(filename, "r") line = fh.readline().strip() if line != "IGE OUTER SPACE BACKUP VERSION 1": raise ige.ServerException("Incorrect header: %s" % line) imported = 0 skipped = 0 while True: key = fh.readline().strip() if key == "END OF BACKUP": break data = fh.readline().strip() key = binascii.a2b_hex(key) if include and not include(key): skipped += 1 continue imported += 1 data = binascii.a2b_hex(data) #@log.debug("Storing key", key) self.put(key, data) log.message("Database restored (%d imported, %d skipped)" % (imported, skipped))
def create(self, object, id = None): #@log.debug("Creating new object", id) if not id: id = self.nextID while self.has_key(id): id += 1 self.nextID = id + 1 id = self.keyMethod(id) object.oid = id elif hasattr(object, "oid") and object.oid != id: id = self.keyMethod(id) log.message("Object OID '%s' != forced OID '%s' - FIXING" % (object.oid, id)) object.oid = id else: id = self.keyMethod(id) #@log.debug("OID =", id) if self.has_key(id): raise ige.ServerException("'%s' created twice" % id) self.cache[id] = object self._addNewCacheItem(id) self.put(id, pickle.dumps(object, pickle.HIGHEST_PROTOCOL)) return id