| 
					
				 | 
			
			
				@@ -0,0 +1,47 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#!/usr/bin/env python 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# -*- coding: utf-8 -*- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	demeter tcp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	name:server.py 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	author:rabin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+""" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from tornado.tcpserver import TCPServer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from tornado.ioloop  import IOLoop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class Connection(object):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	clients = set()	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def __init__(self, stream, address):    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Connection.clients.add(self)    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._stream = stream	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._address = address	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._stream.set_close_callback(self.on_close)	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self.read_message()	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		print "A new user has entered the chat room.", address    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def read_message(self):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._stream.read_until('\n', self.broadcast_messages)	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def broadcast_messages(self, data):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		print "User said:", data[:-1], self._address   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for conn in Connection.clients:	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			conn.send_message(data)	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self.read_message()	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def send_message(self, data):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self._stream.write(data)    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def on_close(self):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		print "A user has left the chat room.", self._address   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Connection.clients.remove(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class ChatServer(TCPServer):	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	def handle_stream(self, stream, address):    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		print "New connection :", address, stream    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Connection(stream, address)    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		print "connection num is:", len(Connection.clients)   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if __name__ == '__main__':	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	print "Server start ......"	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	server = ChatServer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	server.listen(8000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	IOLoop.instance().start() 
			 |