diff options
author | Diego Roversi <diegor@tiscali.it> | 2019-09-08 18:12:27 +0200 |
---|---|---|
committer | Diego Roversi <diegor@tiscali.it> | 2019-09-08 18:12:27 +0200 |
commit | 1d9925c287b318ec21343e2682b51ab6a36ae8db (patch) | |
tree | 17d1c0ac21eea6f291146520afa8381db4586fb4 /BubBob.py |
initial commit from cvs 1.6.2
Diffstat (limited to 'BubBob.py')
-rwxr-xr-x | BubBob.py | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/BubBob.py b/BubBob.py new file mode 100755 index 0000000..52820c3 --- /dev/null +++ b/BubBob.py @@ -0,0 +1,164 @@ +#! /usr/bin/env python + +# +# This script is used to start the server. +# For command-line usage please run +# +# python bubbob/bb.py --help +# + +# __________ +import os, sys +print 'Running on Python', sys.version +if __name__ == '__main__': + LOCALDIR = sys.argv[0] +else: + LOCALDIR = __file__ +try: + LOCALDIR = os.readlink(LOCALDIR) +except: + pass +sys.argv[0] = os.path.abspath(LOCALDIR) +LOCALDIR = os.path.dirname(sys.argv[0]) +# ---------- + +import socket, tempfile + +sys.path.insert(0, LOCALDIR) +os.chdir(LOCALDIR) + +try: + username = '-'+os.getlogin() +except: + try: + import pwd + username = '-'+pwd.getpwuid(os.getuid())[0] + except: + username = '' +TAGFILENAME = 'BubBob-%s%s.url' % (socket.gethostname(), username) +TAGFILENAME = os.path.join(tempfile.gettempdir(), TAGFILENAME) + + +def load_url_file(): + try: + url = open(TAGFILENAME, 'r').readline().strip() + except (OSError, IOError): + return None, None + if not url.startswith('http://127.0.0.1:'): + return None, None + url1 = url[len('http://127.0.0.1:'):] + try: + port = int(url1[:url1.index('/')]) + except ValueError: + return None, None + return url, port + +def look_for_local_server(): + # Look for a running local web server + url, port = load_url_file() + if port is None: + return None + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect(('127.0.0.1', port)) + except socket.error, e: + return None + try: + s.shutdown(2) + s.close() + except Exception, e: + pass + url2, port2 = load_url_file() + if port2 != port: + return None + return url2 + +def start_local_server(): + MAINSCRIPT = os.path.join('bubbob', 'bb.py') + has_server = os.path.exists(MAINSCRIPT) + if hasattr(os, 'fork') and hasattr(os, 'dup2'): + if os.fork() == 0: + # in the child process + if has_server: + sys.path.insert(0, os.path.join(LOCALDIR, 'bubbob')) + import bb + bb.BubBobGame.Quiet = 1 + else: + sys.path.insert(0, os.path.join(LOCALDIR, 'http2')) + import httppages + import gamesrv, stdlog + logfile = stdlog.LogFile() + if has_server: + bb.start_metaserver(TAGFILENAME, 0) + else: + httppages.main(None, TAGFILENAME, 0) + if logfile: + print >> logfile + if logfile: + print "Logging to", logfile.filename + fd = logfile.f.fileno() + try: + # detach from parent + os.dup2(fd, 1) + os.dup2(fd, 2) + os.dup2(fd, 0) + except OSError: + pass + logfile.close() + gamesrv.mainloop() + sys.exit(0) + else: + if not has_server: + MAINSCRIPT = os.path.join('http2', 'httppages.py') + args = [sys.executable, MAINSCRIPT, '--quiet', + '--saveurlto=%s' % TAGFILENAME] + # (quoting sucks on Windows) ** 42 + if sys.platform == 'win32': + args[0] = '"%s"' % (args[0],) + os.spawnv(os.P_NOWAITO, sys.executable, args) + + +# main +url = look_for_local_server() +if not url: + start_local_server() + # wait for up to 5 seconds for the server to start + for i in range(10): + import time + time.sleep(0.5) + url = look_for_local_server() + if url: + break + else: + print >> sys.stderr, 'The local server is not starting, giving up.' + sys.exit(1) + +try: + import webbrowser + browser = webbrowser.get() + name = getattr(browser, 'name', browser.__class__.__name__) + print "Trying to open '%s' with '%s'..." % (url, name) + browser.open(url) +except: + exc, val, tb = sys.exc_info() + print '-'*60 + print >> sys.stderr, "Failed to launch the web browser:" + print >> sys.stderr, " %s: %s" % (exc.__name__, val) + print + print "Sorry, I guess you have to go to the following URL manually:" +else: + print "Done running '%s'." % name + if look_for_local_server() != url: + # assume that browser.open() waited for the browser to finish + # and that the server has been closed from the browser. + raise SystemExit + print + print '-'*60 + print "If the browser fails to open the page automatically," + print "you will have to manually go to the following URL:" +print ' ', url +print '-'*60 +print "Note that the server runs in the background. You have to use" +print "the 'Stop this program' link to cleanly stop it." +print "Normally, however, running this script multiple times should" +print "not create multiple servers in the background." |