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

📄 metaserver.py

📁 Air Traffic Controller这个游戏旨于将你放置到飞机交通控制器的位置上。指导飞机飞到它们正确的目的地。这是一个后勤学的游戏且要提前思考
💻 PY
字号:
# $Id: metaserver.py,v 1.7 2002/02/17 21:43:37 marijn Exp $# An air traffic simulation game. This is the meta server. # 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 osimport setupos.environ["IDLPATH"] = setup.idl_dirimport CORBA, Meta, Meta__POAimport randomimport timeclass MetaServer:    def __init__(self):        argv = []	argv.append('ORBIIOPIPv4=1')        simServers = {}        	self.orb = CORBA.ORB_init(argv)	poa = self.orb.resolve_initial_references("RootPOA")	ref = Meta_Client_Impl(simServers)._this()	open(setup.meta_client_ior, "w").write(self.orb.object_to_string(ref))	ref = Meta_Server_Impl(simServers)._this()	open(setup.meta_server_ior, "w").write(self.orb.object_to_string(ref))		poa.the_POAManager.activate()    def run(self):	print "Starting meta server"	self.orb.run()# defines the Meta::Client interface.class Meta_Client_Impl(Meta__POA.Client):    def __init__(self, simServers):        self._sims = simServers    def getServerList(self, version):        self._reapServers(self._sims)        return map((lambda s: s.info), self._sims.values() )    def getServerData(self, serverId):        for i in self._sims.values():            if(i.info.serverIor == serverId):                return i.data        raise Meta.NoExist    def latestVersion(self):        v = Meta.Version()        v.major = setup.version.major        v.minor = setup.version.minor        v.patch = setup.version.patch        return v    def _reapServers(self, l):        now = time.time()        for i in l.keys():            if (now > setup.meta_server_timeout + l[i].timestamp):                print "reaped %s(%d)" % (l[i].info.hostName, i)                del self._sims[i]class Sim:    def __init__(self, info, data):        self.info = info        self.data = data        self.timestamp = 0                class Meta_Server_Impl(Meta__POA.Server):    _max = pow(2,30) # maximum random number.    def __init__(self, sims):        self._sims = sims    def announce(self, info, data):        k = random.randint(0, self._max)        s = Sim(info, data)        s.timestamp = time.time() # set timestamp.        self._sims[k] = s        return k    def retract(self, id):        try:            del self._sims[id]        except(KeyError):            raise Meta.NoExist    def ping(self, id):        try:            s = self._sims[id]            now = time.time()            lag = now - s.timestamp            s.timestamp = now        except(KeyError):            raise Meta.NoExist    def pingData(self, id, data):        self.ping(id)        self._sims[id].data = data        # $Log: metaserver.py,v $# Revision 1.7  2002/02/17 21:43:37  marijn# Improved server startup.## Revision 1.6  2002/02/01 15:07:36  marijn# updated copyright information## Revision 1.5  2001/12/12 05:54:46  marijn# Various bugfixes.## Revision 1.4  2001/12/10 00:19:29  marijn# Various bug fixes.## Revision 1.3  2001/11/30 05:40:47  marijn# Synced client and server code with new Meta IDL## Revision 1.2  2001/11/19 00:25:58  marijn# py merged back into HEAD## Revision 1.1.2.5  2001/11/16 03:47:32  marijn# Changed server timeout logic## 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 05:22:40  marijn# merged programs into one. Removed unneeded threading stuff#

⌨️ 快捷键说明

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