⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simserver.py

📁 Air Traffic Controller这个游戏旨于将你放置到飞机交通控制器的位置上。指导飞机飞到它们正确的目的地。这是一个后勤学的游戏且要提前思考
💻 PY
字号:
# $Id: simserver.py,v 1.13 2002/02/17 21:43:37 marijn Exp $# An air traffic simulation game.# Copyright (C) 2000,1,2  Marijn Vriens <marijn@sanity.dhs.org>## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USAimport sysimport osimport setupos.environ["IDLPATH"] = setup.idl_dirimport CORBA, SimulationServer, SimulationServer__POAimport timeimport randomimport UserDictimport metaclientimport simuserimport simdataclass SimServer:   def __init__(self):      argv = []      argv.append('ORBIIOPIPv4=1')            self.d = simdata.SimData()      self.u = simuser.SimUsers()      self._metaStarted = 0            self.orb = CORBA.ORB_init()      self.poa = self.orb.resolve_initial_references("RootPOA")      ref = SimServer_Sim_Impl(self.d, self.u)._this()      self.ior = self.orb.object_to_string(ref)      open(setup.sim_server_ior, "w").write(self.ior)      self.meta = metaclient.MetaClient(self.ior)      ref = SimServer_Ticker_Impl(self.meta, self.d, self.u)._this()      self.tick_ior = self.orb.object_to_string(ref)      self.poa.the_POAManager.activate()   def announce(self):      try:         self.meta.announce()         print "Meta server was notified"      except(CORBA.COMM_FAILURE):         if(self._metaStarted):            print "Waiting for meta server to come online: #%d" % self._metaStarted            self._metaStarted = self._metaStarted + 1            self.meta.reloadIor()            time.sleep(0.5)         else:            print "Meta-server should be started"            cmd = sys.argv[0] + " --meta &"            os.popen(cmd, 'r', 0)            self._metaStarted = 1         self.announce()         def run(self):      cmd = sys.argv[0] + " --ticker --ior=" + self.tick_ior + " &"      os.popen(cmd)      print "Done. Now starting orb"             self.orb.run()class SimServer_Sim_Impl(SimulationServer__POA.Sim):   def __init__(self, d, u):      self.d = d      self.u = u   def connect(self, nick):      id = 0      try:         id = self.u.createUser(nick)      except "NickTaken":         raise SimulationServer.NickTaken      return id   def disconnect(self, id):      try:         self.u.removeUser(id)      except KeyError:         raise SimulationServer.NoExist      return None       # data related methods.   def getUpdate(self, userId):      #print "getUpdate called, %d" % userId      try:         user = self.u[userId]      except(KeyError):         raise SimulationServer.NoExist      update = SimulationServer.UpdateType()      update.planeUpdateList = user.genIdlPlaneUpdateList()      update.objsEntryList    = self.d.genIdlObjsEntryList(user.getTimeOfLastUpdate())      update.objsLeaveList    = self.d.genIdlObjsLeaveList(user.getTimeOfLastUpdate())            self.d.reapDeleted(self.u.getUpdateTimeOfSlowestUser())      user.markAsUpdated()            return update        def subscribe(self, userId, entityId):      #print "subscribe called"      if not self.u.has_key(userId):         raise SimulationServer.NoExist      if not self.d.has_key(entityId):         raise SimulationServer.NoExist      self.u[userId].subscribeToEntity(self.d[entityId])   def unsubscribe(self, userId, entityId):      #print "unsubscribe called"      if not self.u.has_key(userId):         raise SimulationServer.NoExist      if not self.d.has_key(entityId):         raise SimulationServer.NoExist      self.u[userId].unsubscribeFromEntity(entityId)   def giveOrder(self, userId, entityId, order):      if not self.u.has_key(userId):         raise SimulationServer.NoExist      if not self.d.has_key(entityId):         raise SimulationServer.NoExist      if not order:         raise SimulationServer.MissingParameter      if not self.u[userId].checkAuthority(entityId):         raise(SimulationServer.NoAuthorityOverObject)      r = self.d[entityId].processOrder(order)      self.u[userId].markAsUpdated()      return r      class SimServer_Ticker_Impl(SimulationServer__POA.Ticker):   def __init__(self, meta, d, u):      self.meta = meta      self.u = u      self.d = d      self._metaPing = time.time()   def update(self):      now = time.time()      for o in self.d.values(): # call update on the objs.         o.update()      if random.randint(0,7) < 1: # add a new obj to the sim.         self._addPlane(self.d)      if now > (self._metaPing + setup.sim_server_meta_ping):         # send a ping to the meta server.          self.meta.ping()         self._metaPing = now   def _addPlane(self, dataDict):      o = simdata.Plane()      o.pos.speed(1)      o.pos.heading(random.random()*360)      dataDict.add(o)        # $Log: simserver.py,v $# Revision 1.13  2002/02/17 21:43:37  marijn# Improved server startup.## Revision 1.12  2002/02/04 15:50:34  marijn# Added order receiving methods## Revision 1.11  2002/02/01 15:07:36  marijn# updated copyright information## Revision 1.10  2002/01/14 15:40:41  marijn# re-indentation## Revision 1.9  2002/01/13 16:05:56  marijn# All updates now go via getUpdate(). Split genIdl into Full and Reduced## Revision 1.8  2002/01/12 23:53:56  marijn# Refactored simuser and simdata## Revision 1.7  2002/01/04 11:27:46  marijn# Debug output to show datastream.## Revision 1.6  2001/12/26 02:35:14  marijn# Added temp Plane to SimObj conversion## Revision 1.5  2001/12/26 01:24:43  marijn# Added Plane class## Revision 1.4  2001/12/25 02:00:08  marijn# various fixes and updates.## Revision 1.3  2001/11/27 20:59:06  marijn# sending of simple sim objcts## Revision 1.2  2001/11/19 00:25:58  marijn# py merged back into HEAD## Revision 1.1.2.6  2001/11/16 03:56:47  marijn# Client connects to SimServer## Revision 1.1.2.5  2001/11/15 05:20:30  marijn# Ticker process now started automaticly by sim-server## Revision 1.1.2.4  2001/11/14 06:27:47  marijn# Simserver now pings the meta server.## Revision 1.1.2.3  2001/11/11 07:25:16  marijn# Added simserver update ticker## Revision 1.1.2.2  2001/11/11 05:22:40  marijn# merged programs into one. Removed unneeded threading stuff## Revision 1.1.2.1  2001/11/07 20:08:09  marijn# Added SimServer and threading#

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -