From: Matt Corallo <bitcoin-list@bluematt•me>
To: bitcoin-development@lists•sourceforge.net
Subject: Re: [Bitcoin-development] Notifications from client/wallet
Date: Thu, 14 Jul 2011 16:13:04 +0200 [thread overview]
Message-ID: <1310652784.2284.192.camel@Desktop666> (raw)
In-Reply-To: <CAJNQ0st6Fo+VgVWj-AA5x8EvetZt4H=PR=n5q6NhZ6RyR0HYOA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2801 bytes --]
This sounds cool, I started implementing the other half of this a couple
days ago. My broad idea of a source cleanup (that sipa largely wrote)
is to have a central notification interface which wallet(s)/net/block
store/etc all communicate with, and then an interface, like the one
proposed here, which GUI/RPC/etc use to communicate with wallet/net.
This should allow for very clean separation of pieces and large-scale
rewrites of one or another part (or drop-in replacements) without
touching anything but the parts that are being redone. This should also
allow for cool programs (like pushpoold/a block notification server/etc)
to use Bitcoin as a library fairly efficiently.
Matt
On Thu, 2011-07-14 at 05:19 +0000, John Smith wrote:
> Hello all,
>
> I'd like to add notifications to the client and wallet, to decouple UI
> and core communication, and especially so that UIs no longer have to
> poll for changes.
>
> I propose to use the boost::signal mechanism for that. It is basically
> a glorified callback system, but allows decoupled delivery of
> 'signals' from an object. Multiple other objects can listen in on an
> event without the emitting object having to care.
>
> Wallet:
>
> class CWallet { ...
> boost::signal<void(int64)> balanceChanged;
> }
>
>
> void CWallet::newTx (...) {
>
> ...
> balanceChanged(new_balance);
> ...
> }
>
>
>
> UI:
>
> GUI::GUI(CWallet *wallet) {
> ...
> wallet->balanceChanged.connect(boost::bind(&GUI::balanceChanged,
> this, _1));
> }
> GUI::balanceChanged(int64 new_balance) {
> someWidget->setValue(new_balance);
> }
>
>
> Specific notifications that would be useful:
>
> Wallet:
> * balanceChanged(int64): spendable balance changed
> * transactionAdded(int256): new transaction added to wallet
> * transactionUpdated(int256): transaction info changed
> * transactionRemoved(int256): transaction removed from wallet
> (can this happen? for completeness)
> * addressAdded(int160): address was added to address book
> * addressUpdated(int160): address label/other metadata was
> modified
> * addressRemoved(int160): address was removed from address book
> * notification(std::string message, int severity): warning/error
> occured in wallet processing, notify user
> * int askFee(std::string message, ...): ask user for fee
> Network client:
> * numConnectionsChanged(int): new connections / connections
> broken
> * numBlocksChanged(int): new blocks came in or other changes to
> block chain
> * notification(std::string message, int severity): warning/error
> occured in network processing, notify user
>
> JS
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
prev parent reply other threads:[~2011-07-14 14:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-14 5:19 John Smith
2011-07-14 9:10 ` Pieter Wuille
2011-07-14 14:13 ` Matt Corallo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1310652784.2284.192.camel@Desktop666 \
--to=bitcoin-list@bluematt$(echo .)me \
--cc=bitcoin-development@lists$(echo .)sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox