Re: A send-queue type



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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]