| 
					
				 | 
			
			
				@@ -11,25 +11,30 @@ from demeter.core import * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from demeter.mqtt import * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from tornado.tcpserver import TCPServer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from tornado.ioloop  import IOLoop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from tornado import stack_context   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from tornado.escape import native_str  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class Connection(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	clients = set() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	EOF = '|e|' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	def __init__(self, stream, address): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Connection.clients.add(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._pub = Pub() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self._stream = stream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self._address = address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self._stream.set_close_callback(self.on_close) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self.read_message() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	def read_message(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self._stream.read_until('\n', self.broadcast_messages) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._message_callback = stack_context.wrap(self.on_message)   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._stream.read_until(self.EOF, self._message_callback) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	def broadcast_messages(self, data): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pub = Pub() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		temp = data.split(':') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def on_message(self, data): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		data = data.replace(self.EOF, '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		temp = data.split('|:|') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		key = temp[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		value = temp[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		pub.push(key, value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._pub.push(key, value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		#print "User said:", data[:-1], self._address 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		""" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -52,11 +57,14 @@ class Server(TCPServer): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		#print "connection num is:", len(Connection.clients) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class Client(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	EOF = '|e|' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	def __init__(self, host='0.0.0.0', port=8000): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self.connect = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self.connect.connect((host, port)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	def send(self, msg): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self.connect.sendall(msg + '\n') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		msg = msg + self.EOF 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self.connect.sendall(msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		#data = self.connect.recv(1024) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def close(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		self.connect.close() 
			 |