コード例 #1
0
        public void Record(MessageRecord record)
        {
            if (record == null)
            {
                return;
            }

            if (_all.Contains(record))
            {
                return;
            }
            _all.Add(record);

            // Important, don't override what's already there
            if (record.Node.IsEmpty())
            {
                record.Node = _graph.NodeId;
            }

            // Letting the remote AppDomain's know about it.
            GlobalMessageTracking.SendMessage(record);

            var history = _histories[record.Id];

            history.Record(record);

            if (record.ParentId.IsNotEmpty() && record.ParentId != Guid.Empty.ToString())
            {
                var parent = _histories[record.ParentId];
                parent.AddChild(history); // this is idempotent, so we're all good
            }
        }
コード例 #2
0
        public static void Record(MessageTrack track)
        {
            _lock.Write(() =>
            {
                Debug.WriteLine("Track: " + track);


                if (track.Status == MessageTrack.Sent)
                {
                    _sent.Add(track);
                    _outstanding.Add(track);
                }
                else
                {
                    _received.Add(track);
                    _outstanding.Remove(track);
                }
            });

            _lock.Read(() =>
            {
                if (!_outstanding.Any())
                {
                    GlobalMessageTracking.SendMessage(new AllMessagesComplete());
                }

                return(true);
            });
        }
コード例 #3
0
        public void StartUp()
        {
            try
            {
                _server = _registry.ToRuntime();

                GlobalMessageTracking.SendMessage(new ApplicationStarted
                {
                    ApplicationName = _registry.GetType().Name,
                    HomeAddress     = _server.BaseAddress,
                    Timestamp       = DateTime.Now,
                    Watcher         = _server.Get <AssetSettings>().CreateFileWatcherManifest(_server.Files)
                });
            }
            catch (HostingFailedException e)
            {
                GlobalMessageTracking.SendMessage(new InvalidApplication
                {
                    ExceptionText = e.Message,
                    Message       = "Access denied."
                });
            }
            catch (Exception e)
            {
                GlobalMessageTracking.SendMessage(new InvalidApplication
                {
                    ExceptionText = e.ToString(),
                    Message       = "Bootstrapping {0} Failed!".ToFormat(_registry.GetType().Name)
                });
            }
        }
コード例 #4
0
 public void Shutdown()
 {
     GlobalMessageTracking.Stop();
     if (_shutdown != null)
     {
         _shutdown.Dispose();
     }
 }
コード例 #5
0
 public void Receive(RemoteGo message)
 {
     Task.Factory.StartNew(() =>
     {
         Thread.Sleep(500);
         GlobalMessageTracking.ReceivedMessage(message);
     });
 }
コード例 #6
0
        public void SetUp()
        {
            theListener = new RecordingListener();
            var hub = new MessagingHub();

            hub.AddListener(theListener);

            var remoteListener = new RemoteListener(hub);

            GlobalMessageTracking.Start(remoteListener);
        }
コード例 #7
0
        public IDisposable Load(Dictionary <string, string> properties)
        {
            //ObjectFactory.Initialize(x => x.AddRegistry<SampleRegistry>());
            GlobalMessageTracking.SendMessage(new ServiceStarted {
                ActivatorTypeName = typeof(SampleService).AssemblyQualifiedName
            });
            GlobalMessageTracking.SendMessage(new ServiceStarted {
                ActivatorTypeName = typeof(RemoteService).AssemblyQualifiedName
            });

            return(this);
        }
コード例 #8
0
        public void send_message_by_category()
        {
            GlobalMessageTracking.SendMessage("category1", "some message");

            var expected = new ServiceMessage
            {
                Category = "category1", Message = "some message"
            };

            Wait.Until(() => theListener.Received.Contains(expected));

            theListener.Received.OfType <ServiceMessage>().Single()
            .ShouldBe(expected);
        }
コード例 #9
0
        public void coordinate_message_history_via_remote_service()
        {
            using (var runner = RemoteServiceRunner.For <SampleBootstrapper>())
            {
                runner.WaitForServiceToStart <SampleService.SampleService>();
                runner.WaitForServiceToStart <SampleService.RemoteService>();

                MessageHistory.ConnectRemoteListeners(runner);

                var foo = new Foo();

                GlobalMessageTracking.SentMessage(foo);


                GlobalMessageTracking.Messaging.WaitForMessage <AllMessagesComplete>(() => runner.SendRemotely(foo), 60000)
                .ShouldNotBeNull();
            }
        }
コード例 #10
0
        public void Start(string bootstrapperName, Dictionary <string, string> properties, MarshalByRefObject remoteListener)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            //var domainSetup = AppDomain.CurrentDomain.SetupInformation;

            // TODO -- what the hell here? This is bad bad bad.
            //System.Environment.CurrentDirectory = domainSetup.ApplicationBase;

            // TODO -- need to handle exceptions gracefully here
            GlobalMessageTracking.Start((IRemoteListener)remoteListener);

            var loader = ApplicationLoaderFinder.FindLoader(bootstrapperName);

            _shutdown = loader.Load(properties);

            GlobalMessageTracking.SendMessage(new LoaderStarted
            {
                LoaderTypeName = _shutdown.GetType().FullName
            });
        }
コード例 #11
0
 public void Send <T>(T message)
 {
     GlobalMessageTracking.SendMessage(message);
 }
コード例 #12
0
 public void Receive(TestSignal message)
 {
     GlobalMessageTracking.SendMessage(new TestResponse {
         Number = message.Number
     });
 }
コード例 #13
0
 public void Teardown()
 {
     GlobalMessageTracking.Stop();
 }