Exactly On Fri, Jun 5, 2009 at 1:34 PM, Jason Meckley <[email protected]>wrote:
> > "Reply is sent to the same _endpoint_Reply is Send to the endpoint > that sent > the message" > > Wait, Just read this again, it clicked. Reply is Sending back to the > Sender. The instance of the sender object is not the same instance > that send the message. > > On Jun 5, 1:02 pm, Ayende Rahien <[email protected]> wrote: > > Reply is sent to the same _endpoint_Reply is Send to the endpoint that > sent > > the message > > > > Messaging is a great fit for UI, but you need to use it in a push / pull > > model. > > That is, you get a message, then you tell the UI about it, handling the > > cross thread issues along the way > > > > On Fri, Jun 5, 2009 at 12:48 PM, Jason Meckley <[email protected] > >wrote: > > > > > > > > > Ah... So in my scenario Bus.Send() is sending the message to a new > > > instance of Pong. When Pong replies, it's sent to a new instance of > > > Ping, etc... None of these instances are ever displayed to the user. > > > > > It makes sense with Publish/Notify/Send that new instances would be > > > created. This raises a few questions. > > > > > How does Reply work or what is it's purpose? > > > Is it replying to the the same instance of the object that sent/ > > > published/notified, or is just replying to the end point, the actual > > > instance handling the reply is different than the one who sent it? > > > How is Reply different than Send()? > > > (the previous 3 questions, are probably just the same question asked 3 > > > different ways :) ) > > > > > The more I experiment with messaging the more it appears messaging > > > doesn't seem to be a good fit for UI. Rather it's a backend framework/ > > > function. If this is true then it seems you would need an additional > > > layer between the GUI and messaging to handle the response/ > > > subscription of the results of processing messages. > > > > > On Jun 5, 11:59 am, Ayende Rahien <[email protected]> wrote: > > > > RSB will force components to be transient > > > > > > On Fri, Jun 5, 2009 at 11:51 AM, Jason Meckley < > [email protected] > > > >wrote: > > > > > > > 1st I spiked my own console app with simple console.writeline > > > > > messages. this worked, so long as i blocked the instance > subscription > > > > > with a ManualResetEvent. didn't care for that too much as i'm > blocking > > > > > a thread (no performance gain) and the concept of messaging and a > > > > > console was already provided with the source. > > > > > > > now i'm moving on to a simple winforms app. messaging seems to make > > > > > more sense here because the UI could consume messages and update > the > > > > > interface automatically for the user. > > > > > > > here is my setup. > > > > > 1 form, with 2 user controls (Ping and Pong) > > > > > Ping consumes SentToPing messages and Pong consumes SentToPong > > > > > messages. > > > > > When form 1 is shown it tells Ping to send a message to pong > > > > > Pong consumes the message, changes the background color (red, > green), > > > > > and replies > > > > > Ping consumes the message, changes the background color (orange, > blue) > > > > > and replies > > > > > This continues for 10 iterations, then replies stop. > > > > > > > all is working except: > > > > > the background color does not change. > > > > > no exceptions are thrown. > > > > > I can step through all the code without error. > > > > > > > having zero experience with win form development am I missing > > > > > something? > > > > > code below. > > > > > > > public partial class Main : Form > > > > > { > > > > > private readonly Ping Ping; > > > > > private readonly Pong Pong; > > > > > > > public Main(Ping ping, Pong pong) > > > > > { > > > > > Ping = ping; > > > > > Pong = pong; > > > > > InitializeComponent(); > > > > > Shown += MainShown; > > > > > } > > > > > > > private void MainShown(object sender, EventArgs e) > > > > > { > > > > > Controls.Add(Ping); > > > > > Controls.Add(Pong); > > > > > > > Ping.Top = 10; > > > > > Pong.Top = Ping.Height + 20; > > > > > > > Ping.SendAMessageToPong(); > > > > > > > Shown -= MainShown; > > > > > } > > > > > } > > > > > public partial class Ping : > > > > > UserControl, > > > > > ConsumerOf<SendToPing> > > > > > { > > > > > private readonly IServiceBus Bus; > > > > > > > public Ping(IServiceBus bus) > > > > > { > > > > > Bus = bus; > > > > > InitializeComponent(); > > > > > } > > > > > > > public void Consume(SendToPing message) > > > > > { > > > > > var number = message.Number; > > > > > BackColor = number%2 == 0 ? Color.Orange : > Color.Blue; > > > > > > > Thread.Sleep(500); > > > > > Bus.Reply(new SendToPong {Number = number + 1}); > > > > > } > > > > > > > public void SendAMessageToPong() > > > > > { > > > > > Bus.Send(new SendToPong {Number = 1}); > > > > > } > > > > > } > > > > > > > public partial class Pong : > > > > > UserControl, > > > > > ConsumerOf<SendToPong> > > > > > { > > > > > private readonly IServiceBus Bus; > > > > > > > public Pong(IServiceBus bus) > > > > > { > > > > > Bus = bus; > > > > > InitializeComponent(); > > > > > } > > > > > > > public void Consume(SendToPong message) > > > > > { > > > > > var number = message.Number; > > > > > if (number > 10) return; > > > > > > > BackColor = number % 2 == 0 ? Color.Red : > Color.Green; > > > > > > > Thread.Sleep(500); > > > > > Bus.Reply(new SendToPing {Number = number + 1}); > > > > > } > > > > > } > > > > > > > public class StartableForm : IStartable > > > > > { > > > > > private readonly Main Form; > > > > > > > public StartableForm(Main form) > > > > > { > > > > > Form = form; > > > > > } > > > > > > > public void Start() > > > > > { > > > > > Application.Run(Form); > > > > > } > > > > > > > public void Stop() > > > > > { > > > > > } > > > > > } > > > > > > > public class StartableServiceBus : IStartable > > > > > { > > > > > private readonly IStartableServiceBus Bus; > > > > > > > public StartableServiceBus(IStartableServiceBus bus) > > > > > { > > > > > Bus = bus; > > > > > } > > > > > > > public void Start() > > > > > { > > > > > Bus.Start(); > > > > > } > > > > > > > public void Stop() > > > > > { > > > > > Bus.Dispose(); > > > > > } > > > > > } > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Rhino Tools Dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rhino-tools-dev?hl=en -~----------~----~----~----~------~----~------~--~---
