source: remote_control/puzzlebox_brainstorms_network_client_thinkgear.py @ 74

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

brainstorms:

  • continued file and class renaming in response to conversions

from PyGame/Twisted? frameworks to Qt

network_client:

  • initial checkin of Qt based Brainstorms client

network_client_thinkgear:

File size: 7.9 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Brainstorms - Network - Client - Thinkgear
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.28
12#
13#####################################################################
14
15import os, sys, time
16
17from PyQt4 import QtCore, QtGui, QtNetwork
18
19import simplejson as json
20
21import puzzlebox_brainstorms_configuration as configuration
22#import puzzlebox_logger
23
24#####################################################################
25# Globals
26#####################################################################
27
28DEBUG = 1
29
30SERVER_HOST = configuration.THINKGEAR_SERVER_HOST
31SERVER_PORT = configuration.THINKGEAR_SERVER_PORT
32
33DELIMITER = configuration.THINKGEAR_DELIMITER
34
35THINKGEAR_CONFIGURATION_PARAMETERS = configuration.THINKGEAR_CONFIGURATION_PARAMETERS
36
37THINKGEAR_AUTHORIZATION_ENABLED = configuration.THINKGEAR_AUTHORIZATION_ENABLED
38AUTHORIZATION_REQUEST = configuration.THINKGEAR_AUTHORIZATION_REQUEST
39
40#####################################################################
41# Classes
42#####################################################################
43
44class puzzlebox_brainstorms_network_client_thinkgear:
45       
46        def __init__(self, log, \
47                          server_host=SERVER_HOST, \
48                          server_port=SERVER_PORT, \
49                          DEBUG=DEBUG, \
50                          parent=None):
51               
52                self.log = log
53                self.DEBUG = DEBUG
54                self.parent=parent
55               
56                self.server_host = server_host
57                self.server_port = server_port
58               
59                self.is_authorized = True
60               
61                self.configureNetwork()
62       
63       
64        ##################################################################
65       
66        def configureNetwork(self):
67       
68                #self.blockSize = 0
69                self.socket = QtNetwork.QTcpSocket()
70                self.socket.name = 'ThinkGear Server'
71               
72                self.socket.readyRead.connect(self.printReply)
73                self.socket.error.connect(self.displayError)
74               
75                # Authorization not yet working
76                #if THINKGEAR_AUTHORIZATION_ENABLED:
77                        #self.sendCommand(AUTHORIZATION_REQUEST)
78               
79                self.sendCommand(THINKGEAR_CONFIGURATION_PARAMETERS)
80       
81       
82        ##################################################################
83       
84        def printReply(self, reply=None):
85               
86                socket_buffer = self.socket.readAll()
87               
88                for packet in socket_buffer.split(DELIMITER):
89                       
90                        if packet != '':
91                               
92                                data = json.loads(packet.data())
93                               
94                                if self.DEBUG:
95                                        print "<-- [%s] Received:" % self.socket.name,
96                                        print data
97                               
98                                self.processPacketThinkGear(data)
99       
100       
101        ##################################################################
102       
103        def displayError(self, socketError):
104               
105                if self.DEBUG:
106                        if (socketError != QtNetwork.QAbstractSocket.RemoteHostClosedError):
107                                print "ERROR [%s]:" % self.socket.name,
108                                print self.socket.errorString()
109               
110               
111                if (self.parent != None):
112               
113                        if socketError == QtNetwork.QAbstractSocket.RemoteHostClosedError:
114                                pass
115                       
116                        elif socketError == QtNetwork.QAbstractSocket.HostNotFoundError:
117                                QtGui.QMessageBox.information(self.parent, \
118                                                                   self.socket.name, \
119                                           "The server host was not found. Please check the host name and "
120                                           "port settings.")
121                       
122                        elif socketError == QtNetwork.QAbstractSocket.ConnectionRefusedError:
123                                QtGui.QMessageBox.information(self.parent, \
124                                                                   self.socket.name,
125                                           "The server connection was refused by the peer. Make sure the "
126                                           "server is running, and check that the host name "
127                                           "and port settings are correct.")
128                       
129                        else:
130                                QtGui.QMessageBox.information(self.parent, \
131                                                                   self.socket.name, \
132                                           "The following error occurred: %s." % \
133                                           self.socket.errorString())
134       
135       
136        ##################################################################
137       
138        def sendCommand(self, command):
139               
140                if self.DEBUG:
141                        print "--> [%s] Sending:" % self.socket.name,
142                        print command
143               
144                self.socket.abort()
145                self.socket.connectToHost(self.server_host, self.server_port)
146               
147                data = json.dumps(command)
148               
149                if self.socket.waitForConnected(3000):
150                        self.socket.write(data)
151       
152       
153        ##################################################################
154       
155        def processPacketThinkGear(self, packet):
156               
157                if ('isAuthorized' in packet.keys()):
158                       
159                        self.isAuthorized = response['isAuthorized']
160               
161               
162                if ('eSense' in packet.keys()):
163                       
164                        if ('attention' in packet['eSense'].keys()):
165                                if (self.parent != None):
166                                        self.parent.progressBarConcentration.setValue(packet['eSense']['attention'])
167                       
168                        if ('meditation' in packet['eSense'].keys()):
169                                if (self.parent != None):
170                                        self.parent.progressBarRelaxation.setValue(packet['eSense']['meditation'])
171       
172       
173        ##################################################################
174       
175        def authorize_and_send_parameters(self,\
176                                          thinkgear_parameters, \
177                                          authorization_request):
178               
179                if self.DEBUG:
180                        print "--> [ThinkGear Client] Sending Authorization Request:",
181                        print authorization_request
182               
183               
184                d = self.send_parameters(thinkgear_parameters, authorization_request)
185                d.addCallback(self.update_authorization)
186
187
188#####################################################################
189# Command line class
190#####################################################################
191
192#class puzzlebox_brainstorms_network_client_command_line(puzzlebox_brainstorms_client):
193       
194        #def __init__(self, log, \
195                          #command_parameters, \
196                          #server_host=SERVER_HOST, \
197                          #server_port=SERVER_PORT, \
198                          #DEBUG=DEBUG):
199               
200                #self.log = log
201                #self.DEBUG=DEBUG
202               
203                #self.command_parameters = command_parameters
204                #self.server_host = server_host
205                #self.server_port = server_port
206                #self.max_connection_attempts = MAX_CONNECTION_ATTEMPTS
207       
208       
209        ###################################################################
210       
211        #def execute_command_line(self):
212               
213                #(command) = self.parse_command_line(self.command_parameters)
214               
215                #d = self.send_command(command)
216                #d.addCallback(self.print_response_and_stop)
217       
218       
219        ###################################################################
220       
221        #def print_response_and_stop(self, response):
222               
223                #if self.DEBUG:
224                        #print "---> [Client] Server Response:",
225                        #print response
226               
227                #try:
228                        #reactor.stop()
229                #except:
230                        #print "ERROR: Can't stop reactor that isn't running."
231       
232       
233        ###################################################################
234       
235        #def parse_command_line(self, command_parameters):
236               
237                #try:
238                        #command = command_parameters[0]
239                #except:
240                        #command = None
241               
242               
243                #return(command)
244
245
246#####################################################################
247# Main
248#####################################################################
249
250if __name__ == '__main__':
251       
252        #log = puzzlebox_logger.puzzlebox_logger(logfile='thinkgear_client')
253        log = None
254       
255        command_parameters = sys.argv[1:]
256       
257        #log.info("Command parameters: %s" % command_parameters)
258       
259        #client = puzzlebox_brainstorms_client_twisted_command_line(log, \
260                                                           #command_parameters, \
261                                                           #server_host=SERVER_HOST, \
262                                                           #server_port=SERVER_PORT, \
263                                                           #DEBUG=DEBUG)
264       
265        #reactor.callWhenRunning(client.execute_command_line)
266        #reactor.run()
267       
268       
269       
270       
271        #authorization_request = AUTHORIZATION_REQUEST
272        #thinkgear_parameters = THINKGEAR_PARAMETERS
273       
274        #thinkgear_client = puzzlebox_thinkgear_client( \
275                    #log, \
276                    #server_host=SERVER_HOST, \
277                    #server_port=SERVER_PORT, \
278                    #DEBUG=DEBUG)
279       
280       
281        #if ENABLE_THINKGEAR_AUTHORIZATION:
282                ## Use ThinkGear authentication
283                #reactor.callWhenRunning( \
284                        #thinkgear_client.authorize_and_send_parameters, \
285                        #thinkgear_parameters, \
286                        #authorization_request)
287       
288        #else: 
289                ## Do not use ThinkGear authentication
290                #authorization_request = None
291                #reactor.callWhenRunning( \
292                        #thinkgear_client.send_parameters, \
293                        #thinkgear_parameters, \
294                        #authorization_request)
295
Note: See TracBrowser for help on using the repository browser.