commit f9f26d44502cee3f876e7e75155ee97f18e234d8
parent edb012e14af2fec6036aef49b30cc07a5b6342f3
Author: ThomasV <thomasv@gitorious>
Date: Mon, 19 Mar 2012 10:19:42 +0100
refactoring
Diffstat:
1 file changed, 45 insertions(+), 8 deletions(-)
diff --git a/client/interface.py b/client/interface.py
@@ -87,6 +87,9 @@ class Interface:
def handle_response(self, method, params, result):
if method == 'session.new':
+ # print result, "do nothing"
+ # session id is in the cookie
+
self.session_id, self.message = ast.literal_eval( result )
self.was_updated = True
@@ -95,7 +98,7 @@ class Interface:
self.was_updated = True
elif method == 'session.poll':
- blocks, changed_addresses = ast.literal_eval( result )
+ blocks, changed_addresses = result
if blocks == -1: raise BaseException("session not found")
self.blocks = int(blocks)
if changed_addresses:
@@ -129,8 +132,9 @@ class Interface:
elif method == 'numblocks.subscribe':
self.blocks = result
if self.newblock_callback: apply(self.newblock_callback,(result,))
+
else:
- print "received message:", c, method, params
+ print "received message:", method, params, result
@@ -153,7 +157,7 @@ class PollingInterface(Interface):
def update_wallet(self):
while True:
- self.send([('session.poll', self.session_id )])
+ self.send([('session.poll', [])])
if self.is_up_to_date: break
#if is_new or wallet.remote_url:
@@ -183,7 +187,8 @@ class PollingInterface(Interface):
def get_servers(self):
- thread.start_new_thread(self.update_servers_thread, ())
+ #thread.start_new_thread(self.update_servers_thread, ())
+ pass
def update_servers_thread(self):
# if my server is not reachable, I should get the list from one of the default servers
@@ -192,7 +197,9 @@ class PollingInterface(Interface):
for server in DEFAULT_SERVERS:
try:
self.peers_server = server
+
self.send([('server.peers',[])])
+
# print "Received server list from %s" % self.peers_server, out
break
except socket.timeout:
@@ -224,6 +231,9 @@ class NativeInterface(PollingInterface):
method, params = m
cmd = cmds[method]
+ if cmd == 'poll':
+ params = self.session_id
+
if cmd in ['h', 'tx']:
str_params = params[0]
elif type(params) != type(''):
@@ -244,7 +254,8 @@ class NativeInterface(PollingInterface):
s.close()
self.rtime = time.time() - t1
self.is_connected = True
- if cmd in[ 'peers','h']:
+
+ if cmd in[ 'peers','h','poll']:
out = ast.literal_eval( out )
if out=='': out=None #fixme
@@ -257,9 +268,21 @@ class NativeInterface(PollingInterface):
class HttpInterface(PollingInterface):
+ def start_session(self, addresses, version):
+ self.session_id = None
+ self.send([('client.version', [version]), ('server.banner',[]), ('numblocks.subscribe',[])])
+
+ #self.subscribe(addresses)
+
+ thread.start_new_thread(self.poll_thread, ())
+
def send(self, messages):
- import urllib2, json, time
+ import urllib2, json, time, cookielib
+
+ cj = cookielib.CookieJar()
+ opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
+ urllib2.install_opener(opener)
data = []
for m in messages:
@@ -271,9 +294,23 @@ class HttpInterface(PollingInterface):
self.message_id += 1
data_json = json.dumps(data)
- host = 'http://%s:%d'%( self.host if method!='server.peers' else self.peers_server, self.port )
- req = urllib2.Request(host, data_json, {'content-type': 'application/json'})
+ print data_json
+ #host = 'http://%s:%d'%( self.host if method!='server.peers' else self.peers_server, self.port )
+ host = 'http://%s:%d'%( self.host, self.port )
+
+ headers = {'content-type': 'application/json'}
+ if self.session_id:
+ print "adding cookie in header"
+ headers['cookie'] = 'SESSION=%s'%self.session_id
+
+ req = urllib2.Request(host, data_json, headers)
response_stream = urllib2.urlopen(req)
+
+ for index, cookie in enumerate(cj):
+ if cookie.name=='SESSION':
+ self.session_id = cookie.value
+ print "got session id from cookie", self.session_id
+
response = json.loads( response_stream.read() )
self.rtime = time.time() - t1