# coding=utf-8
import time
import datetime
__author__ = 'JIE'
#! /usr/bin/env python
#coding=utf-8

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()







# coding=utf-8
import time
import datetime
__author__ = 'JIE'
#! /usr/bin/env python
#coding=utf-8

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()







# coding=utf-8 #! /usr/bin/env python #coding=utf-8