Checking whether my piece of shit scanner still works ;-)
I drawed on paper a little class diagram. Have fun trying to read what
my scanner made of it.
On Thu, 2006-11-09 at 00:20 +0100, Philip Van Hoof wrote:
> There was a desire to have a type that defines the role of a send queue.
>
> A few design questions for the group
>
> E-mail applications often have to support multiple send accounts. The
> user typically selects per message which send account is going to be
> used.
>
> o. My opinion is that mobile users don't care about it, and want the
> software to auto detect which send account should be used
>
> o. Nevertheless, should the send queue register per message being send
> which send account to use?
>
> o. Or should such a send queue play send queue for one specific send
> account (so that you have more than one send queue if you have more than
> one send account) (I favor this one)
>
> o. If option three, should there be a TnySendQueueGroup type too? One
> that can classify between the available TnySendQueues which one to use
> in case the user (or developer) selected "auto detect it for me". In
> this case would the detecting code be implemented in the
> TnySendQueueGroup type (or a TnySendQueueClassifyer if you prefer that
> name).
>
> The API in case of option three and four is like this:
>
> interface TnySendQueue
> {
> Event on_msg_sent
> void add (TnyMsg msg);
> }
>
>
>
> In design pattern - correct OO code it looks like this:
>
> interface ObservableSubject
> {
> void subscribe (Observer o);
> void unsubscribe (Observer o);
> void notify ();
> }
>
> interface Observer
> {
> void update ();
> }
>
> interface TnySendQueue : ObservableSubject
> {
> void add (TnyMsg msg);
> }
>
>
> public class TnyMySendQueue : TnySendQueue
> {
> private List observers;
> private List messages;
>
> public void subscribe (Observer o)
> {
> observers.add (o)
> }
>
> public void unsubscribe (Observer o)
> {
> observers.remove (o)
> }
>
> private void thread_start ()
> {
> while (messages.Count > 0)
> {
> lock messages
> msg = messages.Current
> unlock messages
>
> send (msg)
> this.notify()
>
> lock messages
> messages.RemoveCurrent
> unlock messages
> }
> }
>
> public void add (TnyMsg msg)
> {
> if a thread isn't runnig
> start a thread
>
> lock messages
> messages.add (msg)
> unlock messages
> }
>
> public void notify ()
> {
> foreach observer o in observers
> do
> o.update ()
> done
> }
> }
>
>
>
> Opinions? Thoughts?
>
>
--
Philip Van Hoof, software developer at x-tend
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
work: vanhoof at x-tend dot be
http://www.pvanhoof.be - http://www.x-tend.be
Attachment:
file.tiff
Description: TIFF image