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)