source: remote_control/puzzlebox_brainstorms_server.py @ 52

Last change on this file since 52 was 52, checked in by sc, 11 years ago

client_thinkgear:

  • bugfix for client failing to send initial message

server:

  • debug/log cleanup
  • removed unnecessary client import

server_thinkgear:

install.nsi:

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