public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
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 --]

      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