|
|
import sys
|
|
sys.path.insert(0, './tmsp')
|
|
|
|
from wire import *
|
|
from server import *
|
|
|
|
|
|
# tmsp application interface
|
|
|
|
class CounterApplication():
|
|
def __init__(self):
|
|
self.hashCount = 0
|
|
self.txCount = 0
|
|
self.commitCount = 0
|
|
|
|
def open(self):
|
|
return CounterAppContext(self)
|
|
|
|
class CounterAppContext():
|
|
def __init__(self, app):
|
|
self.app = app
|
|
self.hashCount = app.hashCount
|
|
self.txCount = app.txCount
|
|
self.commitCount = app.commitCount
|
|
self.serial = False
|
|
|
|
def echo(self, msg):
|
|
return msg, 0
|
|
|
|
def info(self):
|
|
return ["hash, tx, commit counts:%d, %d, %d"%(self.hashCount, self.txCount, self.commitCount)], 0
|
|
|
|
def set_option(self, key, value):
|
|
if key == "serial" and value == "on":
|
|
self.serial = True
|
|
return 0
|
|
|
|
def append_tx(self, txBytes):
|
|
if self.serial:
|
|
txByteArray = bytearray(txBytes)
|
|
if len(txBytes) >= 2 and txBytes[:2] == "0x":
|
|
txByteArray = hex2bytes(txBytes[2:])
|
|
txValue = decode_big_endian(BytesBuffer(txByteArray), len(txBytes))
|
|
if txValue != self.txCount:
|
|
return None, 1
|
|
self.txCount += 1
|
|
return None, 0
|
|
|
|
def get_hash(self):
|
|
self.hashCount += 1
|
|
if self.txCount == 0:
|
|
return "", 0
|
|
h = encode_big_endian(self.txCount, 8)
|
|
h.reverse()
|
|
return str(h), 0
|
|
|
|
def commit(self):
|
|
self.commitCount += 1
|
|
return 0
|
|
|
|
def rollback(self):
|
|
return 0
|
|
|
|
def add_listener(self):
|
|
return 0
|
|
|
|
def rm_listener(self):
|
|
return 0
|
|
|
|
def event(self):
|
|
return
|
|
|
|
|
|
if __name__ == '__main__':
|
|
l = len(sys.argv)
|
|
if l == 1:
|
|
port = 46658
|
|
elif l == 2:
|
|
port = int(sys.argv[1])
|
|
else:
|
|
print "too many arguments"
|
|
quit()
|
|
|
|
print 'TMSP Demo APP (Python)'
|
|
|
|
app = CounterApplication()
|
|
server = TMSPServer(app, port)
|
|
server.main_loop()
|