source: rc/puzzlebox_brainstorms_server.py @ 21

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

rc:

  • turn_left_in_reverse support added

server:

  • turn_left_in_reverse support added

configuration:

  • tweaked settings for vector arrows

images:

  • svg arrows scaled down to 254x242 for n900 display

client:

  • turn_left_in_reverse support added

client_interface:

  • turn_left_in_reverse support added
File size: 5.3 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# 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#
13# Last Update: 2010.02.01
14#
15#####################################################################
16
17import os, signal, sys, time
18import cPickle as pickle
19
20from twisted.internet import reactor, protocol, defer
21
22import puzzlebox_brainstorms_configuration as configuration
23import puzzlebox_brainstorms_client
24#import puzzlebox_logger
25
26#####################################################################
27# Globals
28#####################################################################
29
30DEBUG = 1
31
32SERVER_HOST = configuration.SERVER_HOST
33SERVER_PORT = configuration.SERVER_PORT
34
35#####################################################################
36# Classes
37#####################################################################
38
39class puzzlebox_brainstorms_server(protocol.ServerFactory):
40       
41        def __init__(self, log, DEBUG=DEBUG):
42               
43                self.protocol = puzzlebox_brainstorms_server_protocol
44               
45                self.log = log
46                self.DEBUG = DEBUG
47               
48                self.registry = {}
49       
50       
51        ##################################################################
52       
53        def process_instruction(self, instruction):
54               
55                #self.log.debug("Received instruction: %s" % instruction)
56                #if self.DEBUG:
57                        #print "Received instruction: %s" % instruction
58               
59                d = defer.Deferred()
60                response = 'instruction received'
61               
62                if 'command' in instruction:
63                        response = '%s instruction received' % instruction['command']
64                       
65                        if self.DEBUG:
66                                print response
67                       
68                        if 'information' in instruction:
69                                information = instruction['information']
70                       
71                       
72                        if instruction['command'] == 'test_drive':
73                                command = 'python puzzlebox_brainstorms_rc.py --command=test_drive'
74                                os.system(command)
75                       
76                       
77                        elif instruction['command'] == 'drive_forward':
78                                command = 'python puzzlebox_brainstorms_rc.py --command=drive_forward'
79                                os.system(command)
80                       
81                       
82                        elif instruction['command'] == 'drive_reverse':
83                                command = 'python puzzlebox_brainstorms_rc.py --command=drive_reverse'
84                                os.system(command)
85                       
86                       
87                        elif instruction['command'] == 'turn_left':
88                                command = 'python puzzlebox_brainstorms_rc.py --command=turn_left'
89                                os.system(command)
90                       
91                       
92                        elif instruction['command'] == 'turn_right':
93                                command = 'python puzzlebox_brainstorms_rc.py --command=turn_right'
94                                os.system(command)
95                       
96                       
97                        elif instruction['command'] == 'turn_left_in_reverse':
98                                command = 'python puzzlebox_brainstorms_rc.py --command=turn_left_in_reverse'
99                                os.system(command)
100                       
101                       
102                        elif instruction['command'] == 'turn_right_in_reverse':
103                                command = 'python puzzlebox_brainstorms_rc.py --command=turn_right_in_reverse'
104                                os.system(command)
105                       
106                       
107                        else:
108                               
109                                #self.log.error("Unrecognized command received: %s" % instruction)
110                                if self.DEBUG:
111                                        print "Unrecognized command received: %s" % instruction
112                                reponse = 'unrecognized instruction'
113               
114               
115                if response:
116                        d.callback(response)
117               
118               
119                return d
120       
121       
122        ##################################################################
123       
124        def process_connection_lost(self, instruction):
125               
126                if not instruction:
127                       
128                        #self.log.debug("Connection lost with no instruction")
129                       
130                        if self.DEBUG:
131                                print "--> [Server] Connection lost with no instruction"
132               
133               
134                else:
135                       
136                        #self.log.debug("Connection lost with no instruction")
137                       
138                        #if self.DEBUG:
139                                #print "--> [Server] Connection lost"
140                               
141                        pass
142
143
144#####################################################################
145# Protocol
146#####################################################################
147
148class puzzlebox_brainstorms_server_protocol(protocol.Protocol):
149       
150        def __init__(self):
151                self.instruction = {}
152                self.data_chunk = ""
153       
154       
155        ##################################################################
156       
157        def dataReceived(self, data):
158               
159                self.data_chunk += data
160                try:
161                        self.instruction = pickle.loads(self.data_chunk)
162                except Exception, e:
163                        self.factory.log.error("Partial data received (or error: %s)." % e)
164                else:
165                        self.data_chunk = ""
166                       
167                        d = self.factory.process_instruction(self.instruction.copy())
168                        d.addCallback(self.send_response)
169       
170       
171        ##################################################################
172       
173        def send_response(self, response):
174               
175               
176                response = pickle.dumps(response)
177               
178                self.transport.write(response)
179       
180       
181        ##################################################################
182       
183        def connectionLost(self, reason):
184               
185                self.factory.process_connection_lost(self.instruction)
186
187
188#####################################################################
189# Main
190#####################################################################
191
192if __name__ == '__main__':
193
194        #log = puzzlebox_logger.puzzlebox_logger(logfile='master_control')
195        log = None
196       
197        # Collect default settings and command line parameters
198        server_host = SERVER_HOST
199        server_port = SERVER_PORT
200       
201        for each in sys.argv:
202               
203                if each.startswith("--host="):
204                        server_host = each[ len("--host="): ]
205                if each.startswith("--port="):
206                        server_port = each[ len("--port="): ]
207       
208       
209        mcp = puzzlebox_brainstorms_server(log, DEBUG)
210        reactor.listenTCP(port=server_port, factory=mcp, interface=server_host)
211        reactor.run()
212
Note: See TracBrowser for help on using the repository browser.