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 -~----------~----~----~----~------~----~------~--~---
