first jsonrpc commands

This commit is contained in:
ThomasV 2011-12-23 01:34:50 +03:00
parent cba7983b66
commit 3ada7b61fe
1 changed files with 55 additions and 50 deletions

View File

@ -372,6 +372,34 @@ def client_thread(ipaddr,conn):
conn.close() conn.close()
def cmd_stop(data):
global stopping
if password == data:
stopping = True
return 'ok'
else:
return 'wrong password'
def cmd_load(pw):
if password == pw:
return repr( len(sessions) )
else:
return 'wrong password'
def clear_cache(pw):
if password == pw:
store.tx_cache = {}
return 'ok'
else:
return 'wrong password'
def get_cache(pw,addr):
if password == pw:
return store.tx_cache.get(addr)
else:
return 'wrong password'
def do_command(cmd, data, ipaddr): def do_command(cmd, data, ipaddr):
@ -504,43 +532,14 @@ def do_command(cmd, data, ipaddr):
out = repr( store.get_history( address ) ) out = repr( store.get_history( address ) )
elif cmd == 'load': elif cmd == 'load':
if password == data: out = cmd_load(data)
out = repr( len(sessions) )
else:
out = 'wrong password'
elif cmd =='tx': elif cmd =='tx':
out = send_tx(data) out = send_tx(data)
print "sent tx:", out print "sent tx:", out
elif cmd =='clear_cache':
if password == data:
store.tx_cache = {}
out = 'ok'
else:
out = 'wrong password'
elif cmd =='get_cache':
try:
pw, addr = data
except:
addr = None
if addr:
if password == pw:
out = store.tx_cache.get(addr)
out = repr(out)
else:
out = 'wrong password'
else:
out = "error: "+ repr(data)
elif cmd == 'stop': elif cmd == 'stop':
global stopping out = cmd_stop(data)
if password == data:
stopping = True
out = 'ok'
else:
out = 'wrong password'
elif cmd == 'peers': elif cmd == 'peers':
out = repr(peer_list.values()) out = repr(peer_list.values())
@ -553,8 +552,6 @@ def do_command(cmd, data, ipaddr):
def memorypool_update(store): def memorypool_update(store):
ds = BCDataStream.BCDataStream() ds = BCDataStream.BCDataStream()
store.mempool_keys = [] store.mempool_keys = []
@ -634,37 +631,44 @@ def irc_thread():
s.close() s.close()
def jsonrpc_thread(store):
# see http://code.google.com/p/jsonrpclib/
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer
server = SimpleJSONRPCServer(('localhost', 8080))
server.register_function(store.get_history, 'history')
server.register_function(lambda : peer_list.values(), 'peers')
server.register_function(cmd_stop, 'stop')
server.register_function(cmd_load, 'load')
server.register_function(lambda : block_number, 'blocks')
server.register_function(clear_cache, 'clear_cache')
server.register_function(get_cache, 'get_cache')
server.serve_forever()
import traceback import traceback
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv)>1: if len(sys.argv)>1:
import jsonrpclib
server = jsonrpclib.Server('http://localhost:8080')
cmd = sys.argv[1] cmd = sys.argv[1]
if cmd == 'load': if cmd == 'load':
request = "('load','%s')#"%password out = server.load(password)
elif cmd == 'peers': elif cmd == 'peers':
request = "('peers','')#" out = server.peers()
elif cmd == 'stop': elif cmd == 'stop':
request = "('stop','%s')#"%password out = server.stop(password)
elif cmd == 'clear_cache': elif cmd == 'clear_cache':
request = "('clear_cache','%s')#"%password out = server.clear_cache(password)
elif cmd == 'get_cache': elif cmd == 'get_cache':
request = "('get_cache',('%s','%s'))#"%(password,sys.argv[2]) out = server.get_cache(password,sys.argv[2])
elif cmd == 'h': elif cmd == 'h':
request = "('h','%s')#"%sys.argv[2] out = server.history(sys.argv[2])
elif cmd == 'b': elif cmd == 'b':
request = "('b','')#" out = server.blocks()
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
s.connect((config.get('server','host'), config.getint('server','port')))
s.send( request )
out = ''
while 1:
msg = s.recv(1024)
if msg: out += msg
else: break
s.close()
print out print out
sys.exit(0) sys.exit(0)
@ -686,6 +690,7 @@ if __name__ == '__main__':
store.mempool_keys = {} store.mempool_keys = {}
thread.start_new_thread(listen_thread, (store,)) thread.start_new_thread(listen_thread, (store,))
thread.start_new_thread(jsonrpc_thread, (store,))
thread.start_new_thread(clean_session_thread, ()) thread.start_new_thread(clean_session_thread, ())
if (config.get('server','irc') == 'yes' ): if (config.get('server','irc') == 'yes' ):
thread.start_new_thread(irc_thread, ()) thread.start_new_thread(irc_thread, ())