12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- demeter tcp
- name:server.py
- author:rabin
- """
- import socket
- import time
- 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._message_callback = stack_context.wrap(self.on_message)
- self._stream.read_until(self.EOF, self._message_callback)
-
- def on_message(self, data):
- data = data.replace(self.EOF, '')
- temp = data.split('|:|')
- key = temp[0]
- value = temp[1]
- self._pub.push(key, value)
-
- #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 Server(TCPServer):
- def handle_stream(self, stream, address):
- #print "New connection :", address, stream
- Connection(stream, address)
- #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):
- msg = msg + self.EOF
- self.connect.sendall(msg)
- #data = self.connect.recv(1024)
- def close(self):
- self.connect.close()
|