File: server_console.py

package info (click to toggle)
pyscrabble 1.6.2-3
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 15,276 kB
  • ctags: 1,396
  • sloc: python: 11,667; sh: 429; makefile: 67
file content (100 lines) | stat: -rw-r--r-- 3,087 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python
from twisted.internet import reactor
import warnings
warnings.filterwarnings("ignore")

from nevow import appserver
from pyscrabble import constants
from pyscrabble import dist
from pyscrabble import manager
import logging
import os
import ConfigParser

class ServerConsole(object):
    '''
    Console Server
    '''
    
    def __init__(self):
        '''
        Constructor
        '''
        
        self.configure()
    
    def startConsole(self, installSignals=True):
        '''
        Start the console
        
        @param installSignals: True to install custom signal handlers
        '''
        
        from pyscrabble.net.server import ScrabbleServerFactory
        self.gameFactory = ScrabbleServerFactory()
        
        from pyscrabble.net.site import ScrabbleSite
        self.site = appserver.NevowSite( ScrabbleSite(self.gameFactory) )
        
        reactor.listenTCP(self.g_port, self.gameFactory)
        reactor.listenTCP(self.w_port, self.site)
        
        if installSignals:
            import signal
            signal.signal(signal.SIGTERM, self.handleSignal)
            signal.signal(signal.SIGINT, self.handleSignal)
            if hasattr(signal, "SIGBREAK"):
                signal.signal(signal.SIGBREAK, self.handleSignal)

        logger = logging.getLogger("pyscrabble.server_console")
        logger.info('Server running')
        
        reactor.run(installSignalHandlers=False)
    
    def handleSignal(self, signum, frame):
        '''
        Handle signal
        
        @param signum:
        @param frame:
        '''
        logger = logging.getLogger("pyscrabble.server_console")
        logger.info("Server caught signal: %s. Shutting down..." % str(signum))
        self.stopConsole()
    
    def stopConsole(self):
        '''
        Stop the console
        '''
        logger = logging.getLogger("pyscrabble.server_console")
        logger.info("Console stopped")
        
        self.gameFactory.stopFactory()
        reactor.stop()
    
    def configure(self):
        '''
        Configure the server
        '''
        dist.ensure_config_dir(dist.CONFIG_DIR)
        resources = manager.ResourceManager()
        logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)s %(levelname)s %(message)s',
                    filename=resources["config"][constants.LOG_FILE],
                    filemode='w')
        
        
        config = resources["config"][constants.SERVER_CONSOLE_CONFIG]
        
        if not os.path.exists(config):
            raise IOError, "%s must exist in %s" % (constants.SERVER_CONSOLE_CONFIG, resources["config"].path)
            
        parser = ConfigParser.ConfigParser()
        parser.read( config )
        self.w_port = int(parser.get("pyscrabble","web_port"))
        self.g_port = int(parser.get("pyscrabble","game_port"))
        
if __name__ == '__main__':
    x = ServerConsole()
    x.startConsole()