Home | Trees | Indices | Help |
---|
|
1 import util.Strings as Strings 2 import pdb 3 from operationscore.Input import * 4 import socket, json, time 5 import logging as main_log 6 import string 7 from select import select 810 """TCPInput is a input to receive input on a TCP port. In its current incarnation, it parses 11 json data into python dicts. Warning: contains a bug where init will hang until it receives a 12 connection. Specify: 13 <Port> -- Port number to listen on."""6815 self.HOST = '' # Symbolic name meaning all available interfaces 16 self.PORT = self.argDict['Port'] # Arbitrary non-privileged port 17 self.BUFFER_SIZE = 1024 18 self.IS_RESPONDING = 1 19 20 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 21 self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 22 self.sock.bind((self.HOST, self.PORT)) 23 self.sock.listen(1) 24 25 isreadable=select([self.sock],[],[], 0)[0] 26 self.conn = None 27 if isreadable: 28 (self.conn, self.address) = self.sock.accept()2931 if self.conn == None: 32 isreadable=select([self.sock],[],[], 0)[0] 33 if isreadable: 34 (self.conn, self.address) = self.sock.accept() 35 else: 36 return 37 38 data = self.conn.recv(self.BUFFER_SIZE) 39 main_log.debug('Incoming data', data) 40 41 if not data or 'end' in data: # data end, close socket 42 main_log.debug('End in data') 43 print 'end of stream' 44 self.IS_RESPONDING = 0 45 self.conn.close() 46 self.sock.close() 47 48 if self.IS_RESPONDING == 1: # if 'responding', respond to the received data 49 try: 50 for datagroup in data.split('\n'): 51 if datagroup != None and datagroup != '': 52 dataDict = json.loads(datagroup) 53 #if dataDict['type'] != 1: 54 #print dataDict 55 self.respond(dataDict) 56 except Exception as exp: 57 print str(exp) 58 else: 59 # if not 'responding', don't respond to data and restart socket 60 # * an incomplete hack for now. will be changed if same-type-multi-Input is implemented. 61 62 self.IS_RESPONDING = 1 63 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 64 self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 65 self.sock.bind((self.HOST, self.PORT)) 66 self.sock.listen(1) 67 (self.conn, self.address) = self.sock.accept()
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Fri Feb 18 16:55:27 2011 | http://epydoc.sourceforge.net |