Mercurial > lbo > hg > stex
changeset 30:7171bc4fe498
WIP: Move buy/sell to server side
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 10 Mar 2019 14:23:42 +0100 |
parents | 879ae3f7a4d9 |
children | 28a99798938c |
files | client/client.py server/server.py |
diffstat | 2 files changed, 26 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/client/client.py Sun Mar 03 18:37:55 2019 +0100 +++ b/client/client.py Sun Mar 10 14:23:42 2019 +0100 @@ -202,6 +202,8 @@ upd is a stock update message. """ self.current_price = upd['price'] + if 'qty' in upd: + self.current_num = upd['qty'] if upd['split']: self.current_num = self.current_num * 2 @@ -454,21 +456,27 @@ def send_depot(self, depot): summary = depot.to_dict() - if not self.try_send(summary): - self.queue.pop(0) + # Don't attempt to send if something's already waiting. + self.try_send(summary, permanent=False) - def wrap(self, msg): + def send_order(self, order): + """order should contain the keys 'symbol', 'qty'.""" + order['type'] = 'order' + self.try_send(order, permanent=True) + + def wrap(self, msg, type): return json.dumps({ '_stockcallback': True, 'user': self.creds.user, 'password': self.creds.password, 'group': self.creds.group, + 'type': type, 'msg': msg, }) - def try_send(self, msg): - msg = self.wrap(msg) - if self.waiting: + def try_send(self, msg, permanent=True): + msg = self.wrap(msg, msg.get('type', 'callback')) + if self.waiting and permanent: self.queue.append(msg) else: try: @@ -477,7 +485,8 @@ return True except Exception as e: print ('DEBUG: Send failed on REQ socket: ', e) - self.queue.append(msg) + if permanent: + self.queue.append(msg) assert len(self.queue) < 5 return False
--- a/server/server.py Sun Mar 03 18:37:55 2019 +0100 +++ b/server/server.py Sun Mar 10 14:23:42 2019 +0100 @@ -216,15 +216,20 @@ msg = json.loads(msgs[2].decode()) LOG.log('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), msg)) - custom_msg = msg.get('msg', '') - groupinfo = {'cash': custom_msg.get('cash', -1), 'value': custom_msg.get('value', -1)} - - _groups.update(msg.get('group', None), msg.get('user', None), groupinfo) - resp = {'_stockresp': True, 'ok': True, 'groupinfo': _groups.get(msg.get('group'))} + custom_msg = msg.get('msg', {}) + self.handle_message(custom_msg) sock.send_multipart([msgs[0], msgs[1], bytes(json.dumps(resp), 'utf-8')]) except Exception as e: raise e + def handle_message(self, message): + if '_stocklogin' in message: + pass + if '_stockdepot' in message: + groupinfo = {'cash': custom_msg.get('cash', -1), 'value': custom_msg.get('value', -1)} + _groups.update(msg.get('group', None), msg.get('user', None), groupinfo) + resp = {'_stockresp': True, 'ok': True, 'groupinfo': _groups.get(msg.get('group'))} + def main(): ctx = zmq.Context() s = Server(ctx)