You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
728 B
Python
35 lines
728 B
Python
import math
|
|
|
|
EOC = "\0"
|
|
|
|
def to_numeric(identifier):
|
|
return ((ord(identifier[:1]) - 1) * 255) + (ord(identifier[1:]) - 1)
|
|
|
|
def to_identifier(numeric):
|
|
return chr(int(math.floor(numeric / 255) + 1)) + chr((numeric % 255) + 1)
|
|
|
|
class Channel:
|
|
numeric = 0
|
|
binary = False
|
|
handler = None
|
|
client = None
|
|
|
|
def __init__(self, client, handler, binary=False):
|
|
self.handler = handler
|
|
self.binary = binary
|
|
self.client = client
|
|
|
|
def process_chunk(self, chunk):
|
|
self.handler.process(chunk)
|
|
|
|
def send(self, data):
|
|
self.client.stream.send(to_identifier(self.numeric) + data + EOC)
|
|
|
|
class Handler:
|
|
def process(self, chunk):
|
|
pass
|
|
|
|
class EchoHandler(Handler):
|
|
def process(self, chunk):
|
|
print "Received %s" % chunk
|