source: rc/puzzlebox_brainstorms_server.py @ 25

Last change on this file since 25 was 25, checked in by sc, 12 years ago

server:

  • major cleanup, unecessary code pruned

client_interface_button:

  • whitespace cleanup

client:

  • major cleanup, unecessary code pruned

client_interface:

  • major cleanup, unecessary code pruned

client_interface_component:

  • whitespace cleanup
File size: 3.8 KB
RevLine 
[4]1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Brainstorms - Server
5#
6# Copyright Puzzlebox Productions, LLC (2010)
7#
8# Portions of this code have been previously
9# released under the GNU Pulic License (GPL) version 2
10# and is Copyright Steven M. Castellotti (2010)
11# For more information please refer to http://www.gnu.org/copyleft/gpl.htm
12#
[25]13# Last Update: 2010.02.02
[4]14#
15#####################################################################
16
[5]17import os, signal, sys, time
[4]18import cPickle as pickle
19
20from twisted.internet import reactor, protocol, defer
21
[5]22import puzzlebox_brainstorms_configuration as configuration
23import puzzlebox_brainstorms_client
[4]24#import puzzlebox_logger
25
26#####################################################################
27# Globals
28#####################################################################
29
30DEBUG = 1
31
[5]32SERVER_HOST = configuration.SERVER_HOST
33SERVER_PORT = configuration.SERVER_PORT
[4]34
35#####################################################################
36# Classes
37#####################################################################
38
[13]39class puzzlebox_brainstorms_server(protocol.ServerFactory):
[6]40       
[4]41        def __init__(self, log, DEBUG=DEBUG):
[6]42               
[13]43                self.protocol = puzzlebox_brainstorms_server_protocol
[6]44               
[4]45                self.log = log
46                self.DEBUG = DEBUG
[6]47               
[4]48                self.registry = {}
[6]49       
50       
[4]51        ##################################################################
[6]52       
[25]53        def process_command(self, command):
[8]54               
[4]55                d = defer.Deferred()
[6]56               
[25]57                response = '%s command received' % command
[6]58               
[25]59                if self.DEBUG:
60                        print '--> [Server] %s command received' % command
[6]61               
[25]62                command = 'python puzzlebox_brainstorms_rc.py --command=%s' % command
63                os.system(command)
64               
65               
[4]66                if response:
67                        d.callback(response)
[6]68               
[7]69               
[4]70                return d
[6]71       
72       
[4]73        ##################################################################
[6]74       
[25]75        def process_connection_lost(self, command):
[6]76               
[25]77                if not command:
[6]78                       
[25]79                        #self.log.debug("Connection lost with no command")
[6]80                       
[5]81                        if self.DEBUG:
[25]82                                print "--> [Server] Connection lost with no command"
[4]83               
[6]84               
85                else:
[4]86                       
[25]87                        #self.log.debug("Connection lost")
[4]88                       
[12]89                        #if self.DEBUG:
90                                #print "--> [Server] Connection lost"
[25]91                       
[13]92                        pass
[4]93
94
95#####################################################################
96# Protocol
97#####################################################################
98
[13]99class puzzlebox_brainstorms_server_protocol(protocol.Protocol):
[6]100       
[4]101        def __init__(self):
[25]102               
103                self.command = None
[4]104                self.data_chunk = ""
[6]105       
106       
[4]107        ##################################################################
[6]108       
[4]109        def dataReceived(self, data):
[6]110               
[4]111                self.data_chunk += data
[25]112               
[4]113                try:
[25]114                        self.command = pickle.loads(self.data_chunk)
115               
[4]116                except Exception, e:
117                        self.factory.log.error("Partial data received (or error: %s)." % e)
[25]118               
[4]119                else:
120                        self.data_chunk = ""
[6]121                       
[25]122                        d = self.factory.process_command("%s" % self.command)
[4]123                        d.addCallback(self.send_response)
[6]124       
125       
[4]126        ##################################################################
[6]127       
[4]128        def send_response(self, response):
[6]129               
[4]130                response = pickle.dumps(response)
[6]131               
[4]132                self.transport.write(response)
[6]133       
134       
[4]135        ##################################################################
136       
[6]137        def connectionLost(self, reason):
138               
[25]139                self.factory.process_connection_lost(self.command)
[4]140
141
142#####################################################################
143# Main
144#####################################################################
145
146if __name__ == '__main__':
[25]147       
[4]148        #log = puzzlebox_logger.puzzlebox_logger(logfile='master_control')
149        log = None
[6]150       
[4]151        # Collect default settings and command line parameters
152        server_host = SERVER_HOST
153        server_port = SERVER_PORT
154       
155        for each in sys.argv:
156               
157                if each.startswith("--host="):
158                        server_host = each[ len("--host="): ]
159                if each.startswith("--port="):
160                        server_port = each[ len("--port="): ]
[6]161       
162       
[13]163        mcp = puzzlebox_brainstorms_server(log, DEBUG)
[4]164        reactor.listenTCP(port=server_port, factory=mcp, interface=server_host)
165        reactor.run()
166
Note: See TracBrowser for help on using the repository browser.