changeset 16:227434cd0f01

Implement group interaction in server and client
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 01 Mar 2019 17:58:07 +0100
parents 5ca8854eaab8
children 77bb87bc9e7f
files client/client.py server/server.py
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/client/client.py	Fri Mar 01 17:41:25 2019 +0100
+++ b/client/client.py	Fri Mar 01 17:58:07 2019 +0100
@@ -109,6 +109,7 @@
     def ok_clicked(self):
         self.save_default('addr', self.addr.text())
         self.save_default('user', self.user.text())
+        self.save_default('group', self.group.text())
         self.save_default('password', self.password.text())
         self.accepted.emit()
         self.finished.emit(1)
--- a/server/server.py	Fri Mar 01 17:41:25 2019 +0100
+++ b/server/server.py	Fri Mar 01 17:58:07 2019 +0100
@@ -19,6 +19,23 @@
 _splitvalue = 20000
 _maxhistory = 100
 
+class Groups:
+    """Groups manages depot subscriptions for groups."""
+    groups = {}
+
+    def update(self, group, user, info):
+        """updates user info in a group. info is a dict containing the fields 'cash'."""
+        if not (group and user and info):
+            return
+        print('updated ', group, user, info)
+        self.groups[group] = {} if group not in self.groups else self.groups[group]
+        self.groups[group][user] = info
+
+    def get(self, group):
+        """gets a dict with 'user' -> {'depot': _} mapping."""
+        return self.groups.get(group, None)
+
+_groups = Groups()
 
 class Stock:
         symbol = ''
@@ -178,11 +195,14 @@
                 try:
                     msgs = sock.recv_multipart()
                     assert len(msgs) > 2
-                    print ('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), json.loads(msgs[2].decode())))
-                    resp = {'_stockresp': True, 'ok': True}
+                    msg = json.loads(msgs[2].decode())
+                    print ('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), msg))
+                    _groups.update(msg.get('group', None), msg.get('user', None), msg.get('msg', {}))
+                    resp = {'_stockresp': True, 'ok': True, 'groupinfo': _groups.get(msg.get('group'))}
                     sock.send_multipart([msgs[0], msgs[1], bytes(json.dumps(resp), 'utf-8')])
                 except Exception as e:
                     print(e)
+                    raise e
 
 
 def main():