Mercurial > lbo > hg > stex
changeset 19:9792d78687b4
Client, Server: Support leader board by depot value
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Fri, 01 Mar 2019 22:23:03 +0100 |
parents | 219117c06ab9 |
children | 84c7dfe9ddf9 |
files | client/client.py server/server.py |
diffstat | 2 files changed, 57 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/client/client.py Fri Mar 01 21:56:25 2019 +0100 +++ b/client/client.py Fri Mar 01 22:23:03 2019 +0100 @@ -177,7 +177,7 @@ return value def to_dict(self): - s = {'cash': self.cash, 'stock': {}, '_stockdepot': True} + s = {'cash': self.cash, 'value': self.total_value(), 'stock': {}, '_stockdepot': True} for sym, stock in self.stock.items(): stock_sum = {'num': stock.current_num} s['stock'][sym] = stock_sum @@ -305,9 +305,9 @@ self.depotstock = depotstock self.sym = self.depotstock.sym - mainvbox = wid.QVBoxLayout(self) - mainvbox.addWidget(self.graph) - mainvbox.addLayout(self.init_buttonbox()) + stocksvbox = wid.QVBoxLayout(self) + stocksvbox.addWidget(self.graph) + stocksvbox.addLayout(self.init_buttonbox()) def init_buttonbox(self): buy = wid.QPushButton(' BUY ') @@ -428,6 +428,8 @@ waiting = False queue = [] + newGroupInfo = core.pyqtSignal(dict) + def __init__(self, zctx, creds): super().__init__() self.creds = creds @@ -485,6 +487,9 @@ print('DEBUG: Received response: {}'.format(msg)) self.waiting = False + if '_stockresp' in msg and 'groupinfo' in msg: + self.newGroupInfo.emit(msg['groupinfo']) + # Try sending oldest message. if len(self.queue) > 0: self.try_send(self.queue.pop(0)) @@ -528,17 +533,45 @@ def set_creds(self, creds): self.creds = creds + mainhbox = None + stocksvbox = None + stockrows = [] + widgets_per_hbox = 2 + + group_members_max = 12 + group_table = None + + def add_stock_widget(self, sw): + if len(self.stockrows) == 0 or self.stockrows[-1].count() >= self.widgets_per_hbox: + hbox = wid.QHBoxLayout() + hbox.addWidget(sw) + self.stockrows.append(hbox) + self.stocksvbox.addLayout(hbox) + else: + self.stockrows[-1].addWidget(sw) + return + def start_wait_window(self): - self.mainvbox = wid.QVBoxLayout(self) + self.mainhbox = wid.QHBoxLayout(self) + + self.stocksvbox = wid.QVBoxLayout(self) self.waiting = wid.QLabel("Waiting for incoming stock data - hang tight!", self) - self.mainvbox.addWidget(self.depot_widget) - self.mainvbox.addWidget(self.waiting) + self.stocksvbox.addWidget(self.depot_widget) + self.stocksvbox.addWidget(self.waiting) self.show() + self.group_table = wid.QTableWidget(self.group_members_max, 2, self) + self.group_table.setBaseSize(100, 400) + self.group_table.show() + + self.mainhbox.addLayout(self.stocksvbox) + self.mainhbox.addWidget(self.group_table) + self.sock = ClientSocket(self.zctx, self.creds) self.sock.on_new_message.connect(self.on_new_data) self.callback_sock = CallbackSocket(self.zctx, self.creds) self.callback_sock.login() + self.callback_sock.newGroupInfo.connect(self.on_new_group_info) stock_widgets = {} @@ -559,26 +592,27 @@ self.depot.add_stock(sym, depotstock) self.depot.priceUpdated.connect(sw.update) + @core.pyqtSlot(dict) + def on_new_group_info(self, groupinfo): + """Updates leader-board table.""" + members = groupinfo.items() + members = sorted(members, key=lambda i: i[1].get('value', -1)) + self.group_table.clear() + i = 0 + for (member, info) in members: + if i >= self.group_table.rowCount(): + break + value = info['value'] / 100 if 'value' in info else -1 + self.group_table.setItem(i, 0, wid.QTableWidgetItem(member)) + self.group_table.setItem(i, 1, wid.QTableWidgetItem('{} ΓΈ'.format(value))) + + @core.pyqtSlot() def on_periodic_timer(self): print('DEBUG: timer expired!') if not self.callback_sock: return self.callback_sock.send_depot(self.depot) - - mainvbox = None - hboxes = [] - widgets_per_hbox = 2 - - def add_stock_widget(self, sw): - if len(self.hboxes) == 0 or self.hboxes[-1].count() >= self.widgets_per_hbox: - hbox = wid.QHBoxLayout() - hbox.addWidget(sw) - self.hboxes.append(hbox) - self.mainvbox.addLayout(hbox) - else: - self.hboxes[-1].addWidget(sw) - return def main():
--- a/server/server.py Fri Mar 01 21:56:25 2019 +0100 +++ b/server/server.py Fri Mar 01 22:23:03 2019 +0100 @@ -198,7 +198,8 @@ print ('Client {}: {} {}'.format(msgs[0].hex(), msgs[1].decode(), msg)) custom_msg = msg.get('msg', '') - _groups.update(msg.get('group', None), msg.get('user', None), {'cash': custom_msg.get('cash', 0)}) + 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'))} sock.send_multipart([msgs[0], msgs[1], bytes(json.dumps(resp), 'utf-8')]) except Exception as e: