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