Changeset 283 for trunk


Ignore:
Timestamp:
08/23/11 15:55:04 (10 years ago)
Author:
sc
Message:

Server:

  • cleaned up handling of disconnected sockets

Interface:

  • save/export data to platform-specific home directory by default
  • initial support for customDataHeaders
  • subclass/parent data access support added
Location:
trunk/Puzzlebox/Synapse
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Puzzlebox/Synapse/Interface.py

    r282 r283  
    118118                self.packets['signals'] = [] 
    119119                 
     120                self.customDataHeaders = [] 
     121                 
    120122                if UPDATE_INTERFACE_VIA_TIMER: 
    121123                        self.updateInterfaceTimer = QtCore.QTimer() 
     
    123125                                                    QtCore.SIGNAL("timeout()"), \ 
    124126                                                    self.updateInterface) 
     127                 
     128                if (sys.platform == 'win32'): 
     129                        self.homepath = os.path.join( \ 
     130                           os.environ['HOMEDRIVE'], \ 
     131                           os.environ['HOMEPATH'], \ 
     132                           'Desktop') 
     133                else: 
     134                        self.homepath = os.environ['HOME'] 
     135                 
     136                if not os.path.exists(self.homepath): 
     137                        self.homepath = os.getcwd() 
    125138         
    126139         
     
    576589                session_time = self.calculateSessionTime() 
    577590                 
    578                 self.textLabelSessionTime.setText(session_time) 
    579                  
    580                 self.textLabelPacketsReceived.setText( "%i" % \ 
    581                         self.thinkGearConnectServer.protocol.packet_count) 
    582                 self.textLabelPacketsDropped.setText( "%i" % \ 
    583                         self.thinkGearConnectServer.protocol.bad_packets) 
     591                if self.parent == None: 
     592                        target = self 
     593                else: 
     594                        target = self.parent 
     595                 
     596                target.textLabelSessionTime.setText(session_time) 
     597                 
     598                target.textLabelPacketsReceived.setText( "%i" % \ 
     599                        target.thinkGearConnectServer.protocol.packet_count) 
     600                target.textLabelPacketsDropped.setText( "%i" % \ 
     601                        target.thinkGearConnectServer.protocol.bad_packets) 
    584602         
    585603         
     
    588606        def calculateSessionTime(self): 
    589607                 
     608                if self.parent == None: 
     609                        server = self.thinkGearConnectServer 
     610                else: 
     611                        server = self.parent.thinkGearConnectServer 
     612                 
    590613                session_time = time.time() - \ 
    591                         self.thinkGearConnectServer.protocol.session_start_timestamp 
     614                        server.protocol.session_start_timestamp 
    592615                 
    593616                session_time = int(session_time) 
     
    763786        def collectData(self): 
    764787                 
     788                if self == None: 
     789                        target = self 
     790                else: 
     791                        target = self.parent 
     792                 
    765793                data = {} 
    766794                 
    767                 data['rawEeg'] = self.packets['rawEeg'] 
    768                 data['signals'] = self.packets['signals'] 
     795                data['rawEeg'] = target.packets['rawEeg'] 
     796                data['signals'] = target.packets['signals'] 
    769797                 
    770798                data['sessionTime'] = self.calculateSessionTime() 
    771799                 
    772                 data['profileName'] = str(self.lineEditSessionProfile.text()) 
     800                data['profileName'] = str(target.lineEditSessionProfile.text()) 
    773801                 
    774802                return(data) 
     
    779807        def saveData(self): 
    780808                 
     809                if self == None: 
     810                        target = self 
     811                else: 
     812                        target = self.parent 
     813                 
    781814                data = self.collectData() 
    782815                 
    783                 #output_file = 'data.synapse' 
    784                  
    785816                (date, localtime) = self.parseTimeStamp(time.time()) 
    786817                 
    787818                default_filename = '%s %s.synapse' % (date, \ 
    788                                       self.lineEditSessionProfile.text()) 
    789                  
    790                 output_file = QtGui.QFileDialog.getSaveFileName(self, \ 
    791                                  "Save Synapse Data File", \ 
    792                                  default_filename, \ 
    793                                  "Synapse Data File (*.synapse)") 
    794                  
    795                  
    796                 file = open(output_file, 'w') 
     819                                      target.lineEditSessionProfile.text()) 
     820                                       
     821                default_filename = os.path.join(self.homepath, default_filename) 
     822                 
     823                output_file = QtGui.QFileDialog.getSaveFileName(parent=target, \ 
     824                                 caption="Save Session Data to File", \ 
     825                                 dir=default_filename, \ 
     826                                 filter="Puzzlebox Synapse Data File (*.synapse)") 
     827                 
     828                try: 
     829                        output_file = output_file[0] 
     830                except: 
     831                        pass 
     832                 
     833                file = open(str(output_file), 'w') 
    797834                pickle.dump(data, file) 
    798835                file.close() 
     
    803840        def exportData(self): 
    804841                 
    805                 #output_file = 'text.synapse' 
     842                if self == None: 
     843                        target = self 
     844                else: 
     845                        target = self.parent 
    806846                 
    807847                (date, localtime) = self.parseTimeStamp(time.time()) 
    808848                 
    809849                default_filename = '%s %s.csv' % (date, \ 
    810                                       self.lineEditSessionProfile.text()) 
    811                  
    812                 output_file = QtGui.QFileDialog.getSaveFileName(self, \ 
    813                                  "Export Synapse Data to File", \ 
    814                                  default_filename, \ 
    815                                  "CSV File (*.csv);;Text File (*.txt)") 
    816                  
    817                 print output_file 
     850                                      target.lineEditSessionProfile.text()) 
     851                 
     852                default_filename = os.path.join(self.homepath, default_filename) 
     853                 
     854                output_file = QtGui.QFileDialog.getSaveFileName(parent=target, \ 
     855                                 caption="Export Session Data to File", \ 
     856                                 dir=default_filename, \ 
     857                                 filter="CSV File (*.csv);;Text File (*.txt)") 
     858                 
     859                try: 
     860                        output_file = output_file[0] 
     861                except: 
     862                        pass 
    818863                 
    819864                if str(output_file).endswith('.csv'): 
     
    824869                else: 
    825870                         
    826                         outputData = self.textEditDebugConsole.toPlainText() 
    827                          
    828                          
    829                 file = open(output_file, 'w') 
     871                        try: 
     872                                outputData = self.textEditDebugConsole.toPlainText() 
     873                        except: 
     874                                outputData = self.exportDataToCSV() 
     875                         
     876                         
     877                file = open(str(output_file), 'w') 
    830878                file.write(outputData) 
    831879                file.close() 
     
    836884        def exportDataToCSV(self): 
    837885                 
    838                 header = 'Date,Time,Delta,Theta,Low Alpha,High Alpha,Low Beta,High Beta,Low Gamma,Mid Gamma,Attention,Meditation,Signal Level\n' 
     886                if self == None: 
     887                        target = self 
     888                else: 
     889                        target = self.parent 
     890                 
     891                header = 'Date,Time,Delta,Theta,Low Alpha,High Alpha,Low Beta,High Beta,Low Gamma,Mid Gamma,Attention,Meditation,Signal Level' 
     892                 
     893                for each in target.customDataHeaders: 
     894                        header = header + ',%s' % each 
     895                 
     896                header = header + '\n' 
    839897                 
    840898                csv = {} 
    841899                 
    842                 for packet in self.packets['signals']: 
     900                for packet in target.packets['signals']: 
    843901                         
    844902                        if 'rawEeg' in packet.keys(): 
     
    847905                        if packet['timestamp'] not in csv.keys(): 
    848906                                 
    849                                 print packet 
     907                                #print packet 
    850908                                timestamp = packet['timestamp'] 
    851909                                (date, localtime) = self.parseTimeStamp(timestamp) 
     
    928986        def resetData(self): 
    929987                 
    930                 self.packets['rawEeg'] = [] 
    931                 self.packets['signals'] = [] 
    932                  
    933                 self.thinkGearConnectServer.protocol.session_start_timestamp = \ 
     988                if self == None: 
     989                        target = self 
     990                else: 
     991                        target = self.parent 
     992                 
     993                target.packets['rawEeg'] = [] 
     994                target.packets['signals'] = [] 
     995                 
     996                target.thinkGearConnectServer.protocol.session_start_timestamp = \ 
    934997                        time.time() 
    935998                 
    936                 self.thinkGearConnectServer.protocol.packet_count = 0 
    937                 self.thinkGearConnectServer.protocol.bad_packets = 0 
     999                target.thinkGearConnectServer.protocol.packet_count = 0 
     1000                target.thinkGearConnectServer.protocol.bad_packets = 0 
    9381001                 
    9391002                self.updateProfileSessionStatus() 
    9401003                 
    941                 self.textEditDebugConsole.setText("") 
     1004                try: 
     1005                        target.textEditDebugConsole.setText("") 
     1006                except: 
     1007                        pass 
    9421008         
    9431009         
  • trunk/Puzzlebox/Synapse/Server.py

    r279 r283  
    266266                for connection in self.connections: 
    267267                         
    268                         if ((connection.state() != QtNetwork.QAbstractSocket.ConnectingState) and \ 
    269                                  (connection.state() != QtNetwork.QAbstractSocket.ConnectedState)): 
    270                                  
    271                                 if self.DEBUG: 
    272                                         print "- - [%s] Deleting disconnected socket" % self.socket.name 
    273                                  
    274                                 connection.deleteLater() 
    275                                 # Delete references to disconnected sockets 
     268                        try: 
     269                         
     270                                if ((connection.state() != QtNetwork.QAbstractSocket.ConnectingState) and \ 
     271                                        (connection.state() != QtNetwork.QAbstractSocket.ConnectedState)): 
     272                                         
     273                                        if self.DEBUG: 
     274                                                print "- - [%s] Deleting disconnected socket" % self.socket.name 
     275                                         
     276                                        connection.deleteLater() 
     277                                        # Delete references to disconnected sockets 
     278                                        del (self.connections[connection_index]) 
     279                         
     280                        except: 
     281                                # Delete references to sockets throwing exceptions 
    276282                                del (self.connections[connection_index]) 
    277                          
    278283                         
    279284                        connection_index += 1 
Note: See TracChangeset for help on using the changeset viewer.