?? metaserver.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#
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -