コード例 #1
0
        public async Task messageBroker_POCO_broadcast_async_should_not_fail()
        {
            var expected = 4;
            var actual = 0;

            var dispatcher = new NullDispatcher();
            var broker = new MessageBroker( dispatcher );

            broker.Subscribe<PocoTestMessage>( this, ( s, msg ) =>
            {
                actual++;
            } );

            broker.Subscribe<PocoTestMessage>( this, ( s, msg ) =>
            {
                actual++;
            } );

            broker.Subscribe<PocoTestMessage>( this, ( s, msg ) =>
            {
                actual++;
            } );

            await broker.BroadcastAsync( this, new PocoTestMessage() );
            
            actual++;

            Assert.AreEqual( expected, actual );
        }
コード例 #2
0
        public void Construct(ILogger logger)
        {
            var sut = new MessageBroker(logger);

            Assert.NotNull(sut);
            Assert.Equal(logger, sut.Logger);
        }
コード例 #3
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            msgBroker = new MessageBroker();
            bool isCreatedNew = false;
            try
            {
                _mutex = new Mutex(true, mutexName, out isCreatedNew);


                if (isCreatedNew)
                {
                    base.OnStartup(e);
                }
                else
                {
                    MessageBox.Show("Application already started.", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
                    Application.Current.Shutdown(0);
                }


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace + "\n\n" + "Application Existing...", "Exception thrown");
                Application.Current.Shutdown(0);
            }
        }
コード例 #4
0
ファイル: UnitTest1.cs プロジェクト: mikael-kuhn/mscourse
 public void TestBroker()
 {
     TestMessage message = new TestMessage {Id = Guid.NewGuid(), Text = "Some text"};
     MessageBroker broker = new MessageBroker();
     broker.Write(message);
     TestMessage readMessage = broker.Read<TestMessage>(0);
     Assert.IsNotNull(readMessage);
 }
コード例 #5
0
        public void SubscribeToEventsGrowsSubscriberbase(MessageBroker sut)
        {
            sut.Subscribe<DummyMessage>(evt => Assert.IsType<DummyMessage>(evt));

            Assert.True(sut.Subscriptions[typeof(DummyMessage)].Count() == 1);

            sut.Subscribe<DummyMessage>(Assert.NotNull);

            Assert.True(sut.Subscriptions[typeof(DummyMessage)].Count() == 2);
        }
コード例 #6
0
        public void UnsubscribeFromEvent(MessageBroker sut)
        {
            var subId = sut.Subscribe<DummyMessage>(evt => Assert.IsType<DummyMessage>(evt));

            Assert.True(sut.Subscriptions[typeof(DummyMessage)].Any());

            sut.Unsubscribe<DummyMessage>(subId);

            Assert.False(sut.Subscriptions[typeof(DummyMessage)].Any());
        }
 private static void StartJob()
 {
     var messageBroker = new MessageBroker();
     var timer = new System.Timers.Timer();
     timer.Elapsed += new System.Timers.ElapsedEventHandler(messageBroker.CheckMessages);
     timer.Interval = 5000;
     timer.Enabled = true;
     timer.AutoReset = true;
     timer.Start();
 }
コード例 #8
0
        public void Manager_Should_Call_Created_Event_In_An_Interested_Handler()
        {
            var mockSysexFirmwareMessageHandler = new Mock<IHandle<object>>();

            var manager = new MessageBroker();
            manager.Subscribe(mockSysexFirmwareMessageHandler.Object);

            manager.CreateEvent(new object());

            mockSysexFirmwareMessageHandler.Verify(p => p.Handle(It.IsAny<object>()),Times.Once());
        }
コード例 #9
0
        public void Broker_Successfully_Unsubscribes_Multiple_IHandle_Class()
        {
            var broker = new MessageBroker();

            var mockTestHandler = new Mock<object>();
            mockTestHandler.As<IHandle<object>>();
            mockTestHandler.As<IHandle<SysexFirmwareMessage>>();

            broker.Subscribe(mockTestHandler.Object);
            broker.UnSubscribe(mockTestHandler.Object);

            broker.CreateEvent(new object());
            broker.CreateEvent(new SysexFirmwareMessage());
            mockTestHandler.As<IHandle<object>>().Verify(p => p.Handle(It.IsAny<object>()), Times.Never());
            mockTestHandler.As<IHandle<SysexFirmwareMessage>>().Verify(p => p.Handle(It.IsAny<SysexFirmwareMessage>()), Times.Never());
        }
コード例 #10
0
        public void Publish(MessageBroker sut, string expected)
        {
            var counter = 0;
            var message = new DummyMessage { Identifier = expected };

            sut.Subscribe<DummyMessage>(
                evt =>
                {
                    Assert.Equal(expected, evt.Identifier);
                    counter++;
                });

            sut.Publish(message);

            Assert.Equal(1, counter);
        }
コード例 #11
0
ファイル: ServiceBase.cs プロジェクト: GodLesZ/svn-dump
		internal ServiceBase(MessageBroker messageBroker, ServiceDefinition serviceDefinition) {
			_messageBroker = messageBroker;
			_serviceDefinition = serviceDefinition;

			_destinations = new Hashtable();
			if (this.ServiceDefinition.Destinations != null) {
				foreach (DestinationDefinition destinationDefinition in this.ServiceDefinition.Destinations) {
					AdapterDefinition adapterDefinition = null;
					AdapterRef adapterRef = destinationDefinition.AdapterRef;
					if (adapterRef != null)
						adapterDefinition = serviceDefinition.GetAdapterByRef(adapterRef.Ref);
					else
						adapterDefinition = serviceDefinition.GetDefaultAdapter();
					CreateDestination(destinationDefinition, adapterDefinition);
				}
			}
		}
コード例 #12
0
ファイル: Program.cs プロジェクト: mikael-kuhn/mscourse
 static void Main(string[] args)
 {
     Console.WriteLine("Gui");
     while (true)
     {
         string input = Console.ReadLine();
         int id = 0;
         if (int.TryParse(input, out id))
         {
             MessageBroker broker = new MessageBroker();
             broker.Write(new BookingReadyForInvoicing {Id = id});
         }
         else
         {
             Console.WriteLine("Done");
             Console.ReadKey();
         }
     }
 }
コード例 #13
0
		public void messageBroker_unsubscribe_specific_subscriber_should_remove_only_subscriptions_for_that_subscriber()
		{
			const int expected = 1;
			var actual = 0;

			var dispatcher = new NullDispatcher();
			var target = new MessageBroker( dispatcher );

			var subscriber1 = new Object();
			var subscriber2 = new Object();

			target.Subscribe<LegacyTestMessage>( subscriber1, msg => { actual++; } );
			target.Subscribe<LegacyTestMessage>( subscriber1, msg => { actual++; } );
			target.Subscribe<LegacyTestMessage>( subscriber1, msg => { actual++; } );

			target.Subscribe<LegacyTestMessage>( subscriber2, msg => { actual++; } );

			target.Unsubscribe( subscriber1 );

			target.Dispatch( new LegacyTestMessage( this ) );

			actual.Should().Be.EqualTo( expected );
		}
コード例 #14
0
        public void Sync()
        {
            var mb = new MessageBroker();
            var l = new List<string>();

            var d1 = mb.Subscribe<int>(x => l.Add("a:" + x));
            var d2 = mb.Subscribe<int>(x => l.Add("b:" + x));
            var d3 = mb.ToObservable<int>().Subscribe(x => l.Add("c:" + x));

            mb.Publish(100);
            l.Is("a:100", "b:100", "c:100"); l.Clear();

            d2.Dispose();
            mb.Publish(200);
            l.Is("a:200", "c:200"); l.Clear();

            d3.Dispose();
            mb.Publish(300);
            l.Is("a:300"); l.Clear();

            d1.Dispose();
            mb.Publish(400);
            l.Count.Is(0);
        }
コード例 #15
0
		public void MessageBroker_subscriber_using_a_base_class_should_be_dispatched_using_a_derived_class_message()
		{
			var actual = false;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<IMessage>( this, msg => actual = true );
			broker.Dispatch( new LegacyTestMessage( this ) );

			actual.Should().Be.True();
		}
コード例 #16
0
		public void messageBroker_MIXED_subscribe_IMessage_normal_should_not_notify_POCO()
		{
			var expected = false;
			var actual = false;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<IMessage>( this, ( msg ) => actual = true );
			broker.Dispatch( this, new PocoTestMessage() );

			actual.Should().Be.EqualTo( expected );
		}
コード例 #17
0
 public void OnModuleLoad(MessageBroker broker)
 {
     sci.Init(broker);
 }
コード例 #18
0
        private void ForwardToPowerAdapter(Command command)
        {
            command.SetProperty(MessageProperties.PinNumber, _PowerAdapterPin);

            MessageBroker.Send(command, _PowerAdapterUid);
        }
コード例 #19
0
		public void messageBroker_POCO_should_broadcast_non_POCO_message_with_correct_Sender()
		{
			Object expected = this;
			Object actual = null;

			var h = new ManualResetEvent( false );
			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, msg =>
			{
				actual = msg.Sender;
				h.Set();
			} );

			broker.Broadcast( this, new LegacyTestMessage() );

			h.WaitOne();

			Assert.AreEqual( expected, actual );
		}
コード例 #20
0
		public void messageBroker_POCO_should_dispatch_non_POCO_message_and_subscribe_as_POCO()
		{
			var received = false;
			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, ( s, msg ) =>
			{
				received = true;
			} );

			broker.Dispatch( this, new LegacyTestMessage() );
			Assert.IsTrue( received );
		}
コード例 #21
0
 public JsonRpcExecutive(MessageBroker messageBroker)
     : base(messageBroker)
 {
 }
コード例 #22
0
 /// <summary>
 /// Основной конструктор, принимающий экземпляр брокера сообщений.
 /// </summary>
 /// <param name="messageBroker">Брокер сообщений.</param>
 public BrokerController(MessageBroker messageBroker)
 {
     _messageBroker = messageBroker ?? throw new ArgumentNullException(nameof(messageBroker));
 }
コード例 #23
0
ファイル: ProcessFilter.cs プロジェクト: tawmuller/fluorinefx
        public override void Invoke(AMFContext context)
        {
            MessageOutput messageOutput = context.MessageOutput;

            for (int i = 0; i < context.AMFMessage.BodyCount; i++)
            {
                AMFBody      amfBody      = context.AMFMessage.GetBodyAt(i);
                ResponseBody responseBody = null;
                //Check for Flex2 messages and skip
                if (amfBody.IsEmptyTarget)
                {
                    continue;
                }

                if (amfBody.IsDebug)
                {
                    continue;
                }
                if (amfBody.IsDescribeService)
                {
                    responseBody = new ResponseBody();
                    responseBody.IgnoreResults = amfBody.IgnoreResults;
                    responseBody.Target        = amfBody.Response + AMFBody.OnResult;
                    responseBody.Response      = null;
                    DescribeService describeService = new DescribeService(amfBody);
                    responseBody.Content = describeService.GetDescription();
                    messageOutput.AddBody(responseBody);
                    continue;
                }

                //Check if response exists.
                responseBody = messageOutput.GetResponse(amfBody);
                if (responseBody != null)
                {
                    continue;
                }

                try
                {
                    MessageBroker   messageBroker   = _endpoint.GetMessageBroker();
                    RemotingService remotingService = messageBroker.GetService(RemotingService.RemotingServiceId) as RemotingService;
                    if (remotingService == null)
                    {
                        string serviceNotFound = __Res.GetString(__Res.Service_NotFound, RemotingService.RemotingServiceId);
                        responseBody = new ErrorResponseBody(amfBody, new FluorineException(serviceNotFound));
                        messageOutput.AddBody(responseBody);
                        if (log.IsErrorEnabled)
                        {
                            log.Error(serviceNotFound);
                        }
                        continue;
                    }
                    Destination destination = null;
                    if (destination == null)
                    {
                        destination = remotingService.GetDestinationWithSource(amfBody.TypeName);
                    }
                    if (destination == null)
                    {
                        destination = remotingService.DefaultDestination;
                    }
                    //At this moment we got a destination with the exact source or we have a default destination with the "*" source.
                    if (destination == null)
                    {
                        string destinationNotFound = __Res.GetString(__Res.Destination_NotFound, amfBody.TypeName);
                        responseBody = new ErrorResponseBody(amfBody, new FluorineException(destinationNotFound));
                        messageOutput.AddBody(responseBody);
                        if (log.IsErrorEnabled)
                        {
                            log.Error(destinationNotFound);
                        }
                        continue;
                    }

                    try
                    {
                        remotingService.CheckSecurity(destination);
                    }
                    catch (UnauthorizedAccessException exception)
                    {
                        responseBody = new ErrorResponseBody(amfBody, exception);
                        if (log.IsDebugEnabled)
                        {
                            log.Debug(exception.Message);
                        }
                        continue;
                    }

                    //Cache check
                    string source        = amfBody.TypeName + "." + amfBody.Method;
                    IList  parameterList = amfBody.GetParameterList();
                    string key           = FluorineFx.Configuration.CacheMap.GenerateCacheKey(source, parameterList);
                    if (FluorineConfiguration.Instance.CacheMap.ContainsValue(key))
                    {
                        object result = FluorineFx.Configuration.FluorineConfiguration.Instance.CacheMap.Get(key);
                        if (result != null)
                        {
                            if (log != null && log.IsDebugEnabled)
                            {
                                log.Debug(__Res.GetString(__Res.Cache_HitKey, source, key));
                            }
                            responseBody = new ResponseBody(amfBody, result);
                            messageOutput.AddBody(responseBody);
                            continue;
                        }
                    }

                    FactoryInstance factoryInstance = destination.GetFactoryInstance();
                    factoryInstance.Source = amfBody.TypeName;
                    if (FluorineContext.Current.ActivationMode != null)                 //query string can override the activation mode
                    {
                        factoryInstance.Scope = FluorineContext.Current.ActivationMode;
                    }
                    object instance = factoryInstance.Lookup();

                    if (instance != null)
                    {
                        try
                        {
                            bool isAccessible = TypeHelper.GetTypeIsAccessible(instance.GetType());
                            if (!isAccessible)
                            {
                                string msg = __Res.GetString(__Res.Type_InitError, amfBody.TypeName);
                                if (log.IsErrorEnabled)
                                {
                                    log.Error(msg);
                                }
                                responseBody = new ErrorResponseBody(amfBody, new FluorineException(msg));
                                messageOutput.AddBody(responseBody);
                                continue;
                            }

                            MethodInfo mi = null;
                            if (!amfBody.IsRecordsetDelivery)
                            {
                                mi = MethodHandler.GetMethod(instance.GetType(), amfBody.Method, amfBody.GetParameterList());
                            }
                            else
                            {
                                //will receive recordsetid only (ignore)
                                mi = instance.GetType().GetMethod(amfBody.Method);
                            }
                            if (mi != null)
                            {
                                object[] roleAttributes = mi.GetCustomAttributes(typeof(RoleAttribute), true);
                                if (roleAttributes != null && roleAttributes.Length == 1)
                                {
                                    RoleAttribute roleAttribute = roleAttributes[0] as RoleAttribute;
                                    string[]      roles         = roleAttribute.Roles.Split(',');

                                    bool authorized = messageBroker.LoginManager.DoAuthorization(roles);
                                    if (!authorized)
                                    {
                                        throw new UnauthorizedAccessException(__Res.GetString(__Res.Security_AccessNotAllowed));
                                    }
                                }

                                #region Invocation handling
                                PageSizeAttribute pageSizeAttribute  = null;
                                MethodInfo        miCounter          = null;
                                object[]          pageSizeAttributes = mi.GetCustomAttributes(typeof(PageSizeAttribute), true);
                                if (pageSizeAttributes != null && pageSizeAttributes.Length == 1)
                                {
                                    pageSizeAttribute = pageSizeAttributes[0] as PageSizeAttribute;
                                    miCounter         = instance.GetType().GetMethod(amfBody.Method + "Count");
                                    if (miCounter != null && miCounter.ReturnType != typeof(System.Int32))
                                    {
                                        miCounter = null; //check signature
                                    }
                                }
                                ParameterInfo[] parameterInfos = mi.GetParameters();
                                //Try to handle missing/optional parameters.
                                object[] args = new object[parameterInfos.Length];
                                if (!amfBody.IsRecordsetDelivery)
                                {
                                    if (args.Length != parameterList.Count)
                                    {
                                        string msg = __Res.GetString(__Res.Arg_Mismatch, parameterList.Count, mi.Name, args.Length);
                                        if (log != null && log.IsErrorEnabled)
                                        {
                                            log.Error(msg);
                                        }
                                        responseBody = new ErrorResponseBody(amfBody, new ArgumentException(msg));
                                        messageOutput.AddBody(responseBody);
                                        continue;
                                    }
                                    parameterList.CopyTo(args, 0);
                                    if (pageSizeAttribute != null)
                                    {
                                        PagingContext pagingContext = new PagingContext(pageSizeAttribute.Offset, pageSizeAttribute.Limit);
                                        PagingContext.SetPagingContext(pagingContext);
                                    }
                                }
                                else
                                {
                                    if (amfBody.Target.EndsWith(".release"))
                                    {
                                        responseBody = new ResponseBody(amfBody, null);
                                        messageOutput.AddBody(responseBody);
                                        continue;
                                    }
                                    string recordsetId = parameterList[0] as string;
                                    string recordetDeliveryParameters = amfBody.GetRecordsetArgs();
                                    byte[] buffer = System.Convert.FromBase64String(recordetDeliveryParameters);
                                    recordetDeliveryParameters = System.Text.Encoding.UTF8.GetString(buffer);
                                    if (recordetDeliveryParameters != null && recordetDeliveryParameters != string.Empty)
                                    {
                                        string[] stringParameters = recordetDeliveryParameters.Split(new char[] { ',' });
                                        for (int j = 0; j < stringParameters.Length; j++)
                                        {
                                            if (stringParameters[j] == string.Empty)
                                            {
                                                args[j] = null;
                                            }
                                            else
                                            {
                                                args[j] = stringParameters[j];
                                            }
                                        }
                                        //TypeHelper.NarrowValues(argsStore, parameterInfos);
                                    }
                                    PagingContext pagingContext = new PagingContext(System.Convert.ToInt32(parameterList[1]), System.Convert.ToInt32(parameterList[2]));
                                    PagingContext.SetPagingContext(pagingContext);
                                }

                                TypeHelper.NarrowValues(args, parameterInfos);

                                try
                                {
                                    InvocationHandler invocationHandler = new InvocationHandler(mi);
                                    object            result            = invocationHandler.Invoke(instance, args);

                                    if (FluorineConfiguration.Instance.CacheMap != null && FluorineConfiguration.Instance.CacheMap.ContainsCacheDescriptor(source))
                                    {
                                        //The result should be cached
                                        CacheableObject cacheableObject = new CacheableObject(source, key, result);
                                        FluorineConfiguration.Instance.CacheMap.Add(cacheableObject.Source, cacheableObject.CacheKey, cacheableObject);
                                        result = cacheableObject;
                                    }
                                    responseBody = new ResponseBody(amfBody, result);

                                    if (pageSizeAttribute != null)
                                    {
                                        int    totalCount  = 0;
                                        string recordsetId = null;

                                        IList  list = amfBody.GetParameterList();
                                        string recordetDeliveryParameters = null;
                                        if (!amfBody.IsRecordsetDelivery)
                                        {
                                            //fist call paging
                                            object[] argsStore = new object[list.Count];
                                            list.CopyTo(argsStore, 0);
                                            recordsetId = System.Guid.NewGuid().ToString();
                                            if (miCounter != null)
                                            {
                                                //object[] counterArgs = new object[0];
                                                totalCount = (int)miCounter.Invoke(instance, args);
                                            }
                                            string[] stringParameters = new string[argsStore.Length];
                                            for (int j = 0; j < argsStore.Length; j++)
                                            {
                                                if (argsStore[j] != null)
                                                {
                                                    stringParameters[j] = argsStore[j].ToString();
                                                }
                                                else
                                                {
                                                    stringParameters[j] = string.Empty;
                                                }
                                            }
                                            recordetDeliveryParameters = string.Join(",", stringParameters);
                                            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(recordetDeliveryParameters);
                                            recordetDeliveryParameters = System.Convert.ToBase64String(buffer);
                                        }
                                        else
                                        {
                                            recordsetId = amfBody.GetParameterList()[0] as string;
                                        }
                                        if (result is DataTable)
                                        {
                                            DataTable dataTable = result as DataTable;
                                            dataTable.ExtendedProperties["TotalCount"]  = totalCount;
                                            dataTable.ExtendedProperties["Service"]     = recordetDeliveryParameters + "/" + amfBody.Target;
                                            dataTable.ExtendedProperties["RecordsetId"] = recordsetId;
                                            if (amfBody.IsRecordsetDelivery)
                                            {
                                                dataTable.ExtendedProperties["Cursor"]      = Convert.ToInt32(list[list.Count - 2]);
                                                dataTable.ExtendedProperties["DynamicPage"] = true;
                                            }
                                        }
                                    }
                                }
                                catch (UnauthorizedAccessException exception)
                                {
                                    responseBody = new ErrorResponseBody(amfBody, exception);
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug(exception.Message);
                                    }
                                }
                                catch (Exception exception)
                                {
                                    if (exception is TargetInvocationException && exception.InnerException != null)
                                    {
                                        responseBody = new ErrorResponseBody(amfBody, exception.InnerException);
                                    }
                                    else
                                    {
                                        responseBody = new ErrorResponseBody(amfBody, exception);
                                    }
                                    if (log.IsDebugEnabled)
                                    {
                                        log.Debug(__Res.GetString(__Res.Invocation_Failed, mi.Name, exception.Message));
                                    }
                                }
                                #endregion Invocation handling
                            }
                            else
                            {
                                responseBody = new ErrorResponseBody(amfBody, new MissingMethodException(amfBody.TypeName, amfBody.Method));
                            }
                        }
                        finally
                        {
                            factoryInstance.OnOperationComplete(instance);
                        }
                    }
                    else
                    {
                        responseBody = new ErrorResponseBody(amfBody, new TypeInitializationException(amfBody.TypeName, null));
                    }
                }
                catch (Exception exception)
                {
                    if (log != null && log.IsErrorEnabled)
                    {
                        log.Error(exception.Message, exception);
                    }
                    responseBody = new ErrorResponseBody(amfBody, exception);
                }
                messageOutput.AddBody(responseBody);
            }
        }
コード例 #24
0
        public override void Invoke(AMFContext context)
        {
            MessageBroker messageBroker = _endpoint.GetMessageBroker();

            try
            {
                AMFHeader amfHeader = context.AMFMessage.GetHeader(AMFHeader.CredentialsHeader);
                if (amfHeader != null && amfHeader.Content != null)
                {
                    string userId   = ((ASObject)amfHeader.Content)["userid"] as string;
                    string password = ((ASObject)amfHeader.Content)["password"] as string;
                    //Clear credentials header, further requests will not send the credentials
                    ASObject asoObject = new ASObject();
                    asoObject["name"]           = AMFHeader.CredentialsHeader;
                    asoObject["mustUnderstand"] = false;
                    asoObject["data"]           = null;//clear
                    AMFHeader header = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObject);
                    context.MessageOutput.AddHeader(header);
                    IPrincipal principal = _endpoint.GetMessageBroker().LoginManager.Login(userId, amfHeader.Content as IDictionary);
                    string     key       = EncryptCredentials(_endpoint, principal, userId, password);
                    ASObject   asoObjectCredentialsId = new ASObject();
                    asoObjectCredentialsId["name"]           = AMFHeader.CredentialsIdHeader;
                    asoObjectCredentialsId["mustUnderstand"] = false;
                    asoObjectCredentialsId["data"]           = key;//set
                    AMFHeader headerCredentialsId = new AMFHeader(AMFHeader.RequestPersistentHeader, true, asoObjectCredentialsId);
                    context.MessageOutput.AddHeader(headerCredentialsId);
                }
                else
                {
                    amfHeader = context.AMFMessage.GetHeader(AMFHeader.CredentialsIdHeader);
                    if (amfHeader != null)
                    {
                        string key = amfHeader.Content as string;
                        if (key != null)
                        {
                            _endpoint.GetMessageBroker().LoginManager.RestorePrincipal(key);
                        }
                    }
                    else
                    {
                        _endpoint.GetMessageBroker().LoginManager.RestorePrincipal();
                    }
                }
            }
            catch (UnauthorizedAccessException exception)
            {
                for (int i = 0; i < context.AMFMessage.BodyCount; i++)
                {
                    AMFBody           amfBody           = context.AMFMessage.GetBodyAt(i);
                    ErrorResponseBody errorResponseBody = new ErrorResponseBody(amfBody, exception);
                    context.MessageOutput.AddBody(errorResponseBody);
                }
            }
            catch (Exception exception)
            {
                if (log != null && log.IsErrorEnabled)
                {
                    log.Error(exception.Message, exception);
                }
                for (int i = 0; i < context.AMFMessage.BodyCount; i++)
                {
                    AMFBody           amfBody           = context.AMFMessage.GetBodyAt(i);
                    ErrorResponseBody errorResponseBody = new ErrorResponseBody(amfBody, exception);
                    context.MessageOutput.AddBody(errorResponseBody);
                }
            }
        }
コード例 #25
0
        public void Empty()
        {
            var queue = new MessageBroker <object>();

            Assert.IsFalse(queue.TryReceive(out var _));
        }
コード例 #26
0
ファイル: AMFEndpoint.cs プロジェクト: saggelopoulos/AMFCore
 public AMFEndpoint(MessageBroker messageBroker, ChannelSettings channelSettings) : base(messageBroker, channelSettings)
 {
     _waitingPollRequests = new AtomicInteger();
 }
コード例 #27
0
 private Task OnPinChanged(PinChanged value)
 {
     return(MessageBroker.Publish(PinValueChangedEvent.Create(Uid, value.PinNumber, value.IsRising)));
 }
コード例 #28
0
		public void MessageBroker_MIXED_subscriber_using_a_base_class_should_be_dispatched_using_a_derived_class_message_even_using_different_messages()
		{
			var actual = 0;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<Object>( this, ( s, msg ) => actual++ );
			broker.Dispatch( this, new PocoTestMessage() );
			broker.Dispatch( new LegacyAnotherTestMessage( this ) );

			actual.Should().Be.EqualTo( 2 );
		}
コード例 #29
0
		public void MessageBroker_POCO_subscriber_using_a_base_class_should_be_dispatched_only_to_the_expected_inheritance_chain()
		{
			var actual = 0;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<PocoTestMessage>( this, ( s, m ) => actual++ );
			broker.Dispatch( this, new PocoMessageDerivedFromTestMessage() );
			broker.Dispatch( this, new AnotherPocoTestMessage() );

			actual.Should().Be.EqualTo( 1 );
		}
コード例 #30
0
ファイル: ProcessFilter.cs プロジェクト: sandboxorg/AMFCore
        public override void Invoke(AMFContext context)
        {
            MessageOutput messageOutput = context.MessageOutput;

            for (int i = 0; i < context.AMFMessage.BodyCount; i++)
            {
                AMFBody      amfBody      = context.AMFMessage.GetBodyAt(i);
                ResponseBody responseBody = null;
                //Check for Flex2 messages and skip
                if (amfBody.IsEmptyTarget)
                {
                    continue;
                }

                //Check if response exists.
                responseBody = messageOutput.GetResponse(amfBody);
                if (responseBody != null)
                {
                    continue;
                }

                try
                {
                    MessageBroker   messageBroker   = _endpoint.GetMessageBroker();
                    RemotingService remotingService = messageBroker.GetService(RemotingService.RemotingServiceId) as RemotingService;
                    if (remotingService == null)
                    {
                        string serviceNotFound = __Res.GetString(__Res.Service_NotFound, RemotingService.RemotingServiceId);
                        responseBody = new ErrorResponseBody(amfBody, new AMFException(serviceNotFound));
                        messageOutput.AddBody(responseBody);
                        continue;
                    }
                    Destination destination = null;
                    if (destination == null)
                    {
                        destination = remotingService.GetDestinationWithSource(amfBody.TypeName);
                    }
                    if (destination == null)
                    {
                        destination = remotingService.DefaultDestination;
                    }
                    //At this moment we got a destination with the exact source or we have a default destination with the "*" source.
                    if (destination == null)
                    {
                        string destinationNotFound = __Res.GetString(__Res.Destination_NotFound, amfBody.TypeName);
                        responseBody = new ErrorResponseBody(amfBody, new AMFException(destinationNotFound));
                        messageOutput.AddBody(responseBody);
                        continue;
                    }

                    //Cache check
                    string source        = amfBody.TypeName + "." + amfBody.Method;
                    IList  parameterList = amfBody.GetParameterList();

                    FactoryInstance factoryInstance = destination.GetFactoryInstance();
                    factoryInstance.Source = amfBody.TypeName;
                    object instance = factoryInstance.Lookup();

                    if (instance != null)
                    {
                        bool isAccessible = TypeHelper.GetTypeIsAccessible(instance.GetType());
                        if (!isAccessible)
                        {
                            string msg = __Res.GetString(__Res.Type_InitError, amfBody.TypeName);
                            responseBody = new ErrorResponseBody(amfBody, new AMFException(msg));
                            messageOutput.AddBody(responseBody);
                            continue;
                        }

                        MethodInfo mi = null;
                        if (!amfBody.IsRecordsetDelivery)
                        {
                            mi = MethodHandler.GetMethod(instance.GetType(), amfBody.Method, amfBody.GetParameterList());
                        }
                        else
                        {
                            //will receive recordsetid only (ignore)
                            mi = instance.GetType().GetMethod(amfBody.Method);
                        }
                        if (mi != null)
                        {
                            #region Invocation handling
                            ParameterInfo[] parameterInfos = mi.GetParameters();
                            //Try to handle missing/optional parameters.
                            object[] args = new object[parameterInfos.Length];
                            if (!amfBody.IsRecordsetDelivery)
                            {
                                if (args.Length != parameterList.Count)
                                {
                                    string msg = __Res.GetString(__Res.Arg_Mismatch, parameterList.Count, mi.Name, args.Length);
                                    responseBody = new ErrorResponseBody(amfBody, new ArgumentException(msg));
                                    messageOutput.AddBody(responseBody);
                                    continue;
                                }
                                parameterList.CopyTo(args, 0);
                            }
                            else
                            {
                                if (amfBody.Target.EndsWith(".release"))
                                {
                                    responseBody = new ResponseBody(amfBody, null);
                                    messageOutput.AddBody(responseBody);
                                    continue;
                                }
                                string recordsetId = parameterList[0] as string;
                                string recordetDeliveryParameters = amfBody.GetRecordsetArgs();
                                byte[] buffer = System.Convert.FromBase64String(recordetDeliveryParameters);
                                recordetDeliveryParameters = System.Text.Encoding.UTF8.GetString(buffer);
                                if (recordetDeliveryParameters != null && recordetDeliveryParameters != string.Empty)
                                {
                                    string[] stringParameters = recordetDeliveryParameters.Split(new char[] { ',' });
                                    for (int j = 0; j < stringParameters.Length; j++)
                                    {
                                        if (stringParameters[j] == string.Empty)
                                        {
                                            args[j] = null;
                                        }
                                        else
                                        {
                                            args[j] = stringParameters[j];
                                        }
                                    }
                                    //TypeHelper.NarrowValues(argsStore, parameterInfos);
                                }
                            }

                            TypeHelper.NarrowValues(args, parameterInfos);

                            try
                            {
                                InvocationHandler invocationHandler = new InvocationHandler(mi);
                                object            result            = invocationHandler.Invoke(instance, args);

                                responseBody = new ResponseBody(amfBody, result);
                            }
                            catch (UnauthorizedAccessException exception)
                            {
                                responseBody = new ErrorResponseBody(amfBody, exception);
                            }
                            catch (Exception exception)
                            {
                                if (exception is TargetInvocationException && exception.InnerException != null)
                                {
                                    responseBody = new ErrorResponseBody(amfBody, exception.InnerException);
                                }
                                else
                                {
                                    responseBody = new ErrorResponseBody(amfBody, exception);
                                }
                            }
                            #endregion Invocation handling
                        }
                        else
                        {
                            responseBody = new ErrorResponseBody(amfBody, new MissingMethodException(amfBody.TypeName, amfBody.Method));
                        }
                    }
                    else
                    {
                        responseBody = new ErrorResponseBody(amfBody, new TypeInitializationException(amfBody.TypeName, null));
                    }
                }
                catch (Exception exception)
                {
                    responseBody = new ErrorResponseBody(amfBody, exception);
                }
                messageOutput.AddBody(responseBody);
            }
        }
コード例 #31
0
ファイル: MessageService.cs プロジェクト: apakian/fluorinefx
		/// <summary>
        /// Initializes a new instance of the MessageService class.
		/// </summary>
		/// <param name="messageBroker"></param>
        /// <param name="serviceDefinition"></param>
        public MessageService(MessageBroker messageBroker, ServiceDefinition serviceDefinition)
            : base(messageBroker, serviceDefinition)
		{
		}
コード例 #32
0
 public SecureAmfEndpoint(MessageBroker messageBroker, ChannelDefinition channelDefinition)
     : base(messageBroker, channelDefinition)
 {
 }
コード例 #33
0
 public void AddComponent(IComponent component)
 {
     _components.Add(component.GetType(), component);
     MessageBroker.Publish(new ComponentAddedEvent(this, component));
 }
コード例 #34
0
 /// <summary>
 /// Initializes a new instance of the MessageService class.
 /// </summary>
 /// <param name="messageBroker"></param>
 /// <param name="serviceDefinition"></param>
 public MessageService(MessageBroker messageBroker, ServiceDefinition serviceDefinition)
     : base(messageBroker, serviceDefinition)
 {
 }
コード例 #35
0
 protected JsonRpcServiceFeature(MessageBroker messageBroker)
 {
     _messageBroker = messageBroker;
 }
コード例 #36
0
        public UserController(IUserRepository userRepository, IHttpContextAccessor accesor, MessageBroker messageBroker)
        {
            _userRepository = userRepository;

            _accesor       = accesor;
            _messageBroker = messageBroker;
        }
コード例 #37
0
 public RtmptEndpoint(MessageBroker messageBroker, ChannelDefinition channelDefinition)
     : base(messageBroker, channelDefinition)
 {
 }
コード例 #38
0
        public void SubscribeToEvents(MessageBroker sut)
        {
            sut.Subscribe <DummyMessage>(evt => Assert.IsType <DummyMessage>(evt));

            Assert.True(sut.Subscriptions[typeof(DummyMessage)].Any());
        }
コード例 #39
0
        public void LogSubscriptions(MessageBroker sut)
        {
            sut.Subscribe <DummyMessage>(Assert.NotNull);

            sut.Logger.Verify(l => l.Debug(It.IsAny <string>(), It.IsAny <object[]>()));
        }
コード例 #40
0
 public void ThrowWithNullSubscriptionAction(MessageBroker sut)
 {
     Assert.Throws <ArgumentNullException>(() => sut.Subscribe <DummyMessage>(null));
 }
コード例 #41
0
        protected override void OnInvoke(RtmpConnection connection, RtmpChannel channel, RtmpHeader header, Notify invoke)
        {
            IServiceCall serviceCall = invoke.ServiceCall;

            // If it's a callback for server remote call then pass it over to callbacks handler
            // and return
            if (serviceCall.ServiceMethodName.Equals("_result") || serviceCall.ServiceMethodName.Equals("_error"))
            {
                HandlePendingCallResult(connection, invoke);
                return;
            }

            bool   disconnectOnReturn = false;
            string action             = null;

            if (serviceCall.ServiceName == null)
            {
                action = serviceCall.ServiceMethodName;
                switch (action)
                {
                case ACTION_CONNECT:
                {
                    if (!connection.IsConnected)
                    {
                        IDictionary parameters = invoke.ConnectionParameters;
                        string      host       = null;
                        if (parameters.Contains("tcUrl"))
                        {
                            host = GetHostname(parameters["tcUrl"] as string);
                        }
                        if (host != null && host.IndexOf(":") != -1)
                        {
                            // Remove default port from connection string
                            host = host.Substring(0, host.IndexOf(":"));
                        }
                        string app  = parameters["app"] as string;
                        string path = parameters["app"] as string;
                        // App name as path, but without query string if there is one
                        if (path != null && path.IndexOf("?") != -1)
                        {
                            int idx = path.IndexOf("?");
                            parameters["queryString"] = path.Substring(idx);
                            path = path.Substring(0, idx);
                        }
                        parameters["path"] = path;

                        connection.Setup(host, path, parameters);
                        try
                        {
                            //IGlobalScope global = this.Endpoint.LookupGlobal(host, path);
                            IGlobalScope global = this.Endpoint.GetMessageBroker().GlobalScope;
                            if (global == null)
                            {
                                serviceCall.Status = Call.STATUS_SERVICE_NOT_FOUND;
                                if (serviceCall is IPendingServiceCall)
                                {
                                    StatusASO status = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_INVALID_APPLICATION, connection.ObjectEncoding);
                                    status.description = "No global scope on this server.";
                                    (serviceCall as IPendingServiceCall).Result = status;
                                }
                                log.Info(string.Format("No application scope found for {0} on host {1}. Misspelled or missing application folder?", path, host));
                                disconnectOnReturn = true;
                            }
                            else
                            {
                                IScopeContext context = global.Context;
                                IScope        scope   = null;
                                try
                                {
                                    scope = context.ResolveScope(global, path);
                                }
                                catch (ScopeNotFoundException /*exception*/)
                                {
                                    if (log.IsErrorEnabled)
                                    {
                                        log.Error(__Res.GetString(__Res.Scope_NotFound, path));
                                    }

                                    serviceCall.Status = Call.STATUS_SERVICE_NOT_FOUND;
                                    if (serviceCall is IPendingServiceCall)
                                    {
                                        StatusASO status = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_REJECTED, connection.ObjectEncoding);
                                        status.description = "No scope \"" + path + "\" on this server.";
                                        (serviceCall as IPendingServiceCall).Result = status;
                                    }
                                    disconnectOnReturn = true;
                                }
                                catch (ScopeShuttingDownException)
                                {
                                    serviceCall.Status = Call.STATUS_APP_SHUTTING_DOWN;
                                    if (serviceCall is IPendingServiceCall)
                                    {
                                        StatusASO status = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_APPSHUTDOWN, connection.ObjectEncoding);
                                        status.description = "Application at \"" + path + "\" is currently shutting down.";
                                        (serviceCall as IPendingServiceCall).Result = status;
                                    }
                                    log.Info(string.Format("Application at {0} currently shutting down on {1}", path, host));
                                    disconnectOnReturn = true;
                                }
                                if (scope != null)
                                {
                                    if (log.IsInfoEnabled)
                                    {
                                        log.Info(__Res.GetString(__Res.Scope_Connect, scope.Name));
                                    }
                                    bool okayToConnect;
                                    try
                                    {
                                        //The only way to differentiate NetConnection.connect() and Consumer.subscribe() seems to be the app name
                                        if (app == string.Empty)
                                        {
                                            connection.SetIsFlexClient(true);
                                            okayToConnect = connection.Connect(scope, serviceCall.Arguments);
                                            if (okayToConnect)
                                            {
                                                if (serviceCall.Arguments != null && serviceCall.Arguments.Length >= 3)
                                                {
                                                    string credentials = serviceCall.Arguments[2] as string;
                                                    if (credentials != null && credentials != string.Empty)
                                                    {
                                                        MessageBroker         messageBroker         = this.Endpoint.GetMessageBroker();
                                                        AuthenticationService authenticationService = messageBroker.GetService(AuthenticationService.ServiceId) as AuthenticationService;
                                                        authenticationService.Authenticate(credentials);
                                                    }
                                                }
                                                //FDS 2.0.1 fds.swc
                                                if (serviceCall.Arguments != null && serviceCall.Arguments.Length == 1)
                                                {
                                                    string credentials = serviceCall.Arguments[0] as string;
                                                    if (credentials != null && credentials != string.Empty)
                                                    {
                                                        MessageBroker         messageBroker         = this.Endpoint.GetMessageBroker();
                                                        AuthenticationService authenticationService = messageBroker.GetService(AuthenticationService.ServiceId) as AuthenticationService;
                                                        authenticationService.Authenticate(credentials);
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            connection.SetIsFlexClient(false);
                                            okayToConnect = connection.Connect(scope, serviceCall.Arguments);
                                        }
                                        if (okayToConnect)
                                        {
                                            if (log.IsDebugEnabled)
                                            {
                                                log.Debug("Connected RtmpClient: " + connection.Client.Id);
                                            }
                                            serviceCall.Status = Call.STATUS_SUCCESS_RESULT;
                                            if (serviceCall is IPendingServiceCall)
                                            {
                                                StatusASO statusASO = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_SUCCESS, connection.ObjectEncoding);
                                                statusASO.Add("id", connection.Client.Id);
                                                (serviceCall as IPendingServiceCall).Result = statusASO;
                                            }
                                            // Measure initial roundtrip time after connecting
                                            connection.GetChannel((byte)2).Write(new Ping(Ping.StreamBegin, 0, -1));
                                            connection.StartRoundTripMeasurement();
                                        }
                                        else
                                        {
                                            if (log.IsDebugEnabled)
                                            {
                                                log.Debug("Connect failed");
                                            }
                                            serviceCall.Status = Call.STATUS_ACCESS_DENIED;
                                            if (serviceCall is IPendingServiceCall)
                                            {
                                                (serviceCall as IPendingServiceCall).Result = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_REJECTED, connection.ObjectEncoding);
                                            }
                                            disconnectOnReturn = true;
                                        }
                                    }
                                    catch (ClientRejectedException rejected)
                                    {
                                        if (log.IsDebugEnabled)
                                        {
                                            log.Debug("Connect rejected");
                                        }
                                        serviceCall.Status = Call.STATUS_ACCESS_DENIED;
                                        if (serviceCall is IPendingServiceCall)
                                        {
                                            StatusASO statusASO = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_REJECTED, connection.ObjectEncoding);
                                            statusASO.Application = rejected.Reason;
                                            (serviceCall as IPendingServiceCall).Result = statusASO;
                                        }
                                        disconnectOnReturn = true;
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            if (log.IsErrorEnabled)
                            {
                                log.Error("Error connecting", ex);
                            }

                            serviceCall.Status = Call.STATUS_GENERAL_EXCEPTION;
                            if (serviceCall is IPendingServiceCall)
                            {
                                (serviceCall as IPendingServiceCall).Result = StatusASO.GetStatusObject(StatusASO.NC_CONNECT_FAILED, connection.ObjectEncoding);
                            }
                            disconnectOnReturn = true;
                        }
                    }
                    else
                    {
                        // Service calls, must be connected.
                        InvokeCall(connection, serviceCall);
                    }
                }
                break;

                case ACTION_DISCONNECT:
                    connection.Close();
                    break;

                case ACTION_CREATE_STREAM:
                case ACTION_DELETE_STREAM:
                case ACTION_RELEASE_STREAM:
                case ACTION_PUBLISH:
                case ACTION_PLAY:
                case ACTION_SEEK:
                case ACTION_PAUSE:
                case ACTION_CLOSE_STREAM:
                case ACTION_RECEIVE_VIDEO:
                case ACTION_RECEIVE_AUDIO:
                {
                    IStreamService streamService = ScopeUtils.GetScopeService(connection.Scope, typeof(IStreamService)) as IStreamService;
                    StatusASO      status        = null;
                    try
                    {
                        if (!InvokeCall(connection, serviceCall, streamService))
                        {
                            status             = StatusASO.GetStatusObject(StatusASO.NS_INVALID_ARGUMENT, connection.ObjectEncoding);
                            status.description = "Failed to " + action + " (stream ID: " + header.StreamId + ")";
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error("Error while invoking " + action + " on stream service.", ex);
                        status             = StatusASO.GetStatusObject(StatusASO.NS_FAILED, connection.ObjectEncoding);
                        status.description = "Error while invoking " + action + " (stream ID: " + header.StreamId + ")";
                        status.details     = ex.Message;
                    }
                    if (status != null)
                    {
                        channel.SendStatus(status);
                    }
                }
                break;

                default:
                    if (connection.IsConnected)
                    {
                        InvokeCall(connection, serviceCall);
                    }
                    else
                    {
                        // Warn user attemps to call service without being connected
                        if (log.IsWarnEnabled)
                        {
                            log.Warn("Not connected, closing connection");
                        }
                        connection.Close();
                    }
                    break;
                }
            }

            /*
             *          if(invoke is FlexInvoke)
             *          {
             *                  FlexInvoke reply = new FlexInvoke();
             *                  reply.InvokeId = invoke.InvokeId;
             *                  reply.SetResponseSuccess();
             *                  //TODO
             *                  if( serviceCall is IPendingServiceCall )
             *                  {
             *                          IPendingServiceCall pendingCall = (IPendingServiceCall)serviceCall;
             *                          reply.Response = pendingCall.Result;
             *                  }
             *                  channel.Write(reply);
             *          }
             *          else if(invoke is Invoke)
             */
            if (invoke is Invoke)
            {
                if ((header.StreamId != 0) &&
                    (serviceCall.Status == Call.STATUS_SUCCESS_VOID || serviceCall.Status == Call.STATUS_SUCCESS_NULL))
                {
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("Method does not have return value, do not reply");
                    }
                    return;
                }

                // The client expects a result for the method call.
                Invoke reply = new Invoke();
                reply.ServiceCall = serviceCall;
                reply.InvokeId    = invoke.InvokeId;
                //sending reply
                channel.Write(reply);
            }
            if (disconnectOnReturn)
            {
                connection.Close();
            }
            if (action == ACTION_CONNECT)
            {
                connection.Context.ObjectEncoding = connection.ObjectEncoding;
            }
        }
コード例 #42
0
 public StudentController(IStudentRepository studentRepository, MessageBroker messageBroker)
 {
     _studentRepository = studentRepository;
     _messageBroker     = messageBroker;
 }
コード例 #43
0
		public void messageBroker_POCO_broadcast_using_more_then_one_subscriber_should_call_on_different_thread()
		{
			TestRunner.Execute( ApartmentState.MTA, () =>
			{
				var h1 = new ManualResetEvent( false );
				var h2 = new ManualResetEvent( false );

				var currentThreadId = Thread.CurrentThread.ManagedThreadId;
				var s1ThreadId = Thread.CurrentThread.ManagedThreadId;
				var s2ThreadId = Thread.CurrentThread.ManagedThreadId;

				var dispatcher = new NullDispatcher();
				var broker = new MessageBroker( dispatcher );

				broker.Subscribe<PocoTestMessage>( this, ( s, msg ) =>
				{
					s1ThreadId = Thread.CurrentThread.ManagedThreadId;
					h1.Set();
				} );

				broker.Subscribe<PocoTestMessage>( this, ( s, msg ) =>
				{
					s2ThreadId = Thread.CurrentThread.ManagedThreadId;
					h2.Set();
				} );

				broker.Broadcast( this, new PocoTestMessage() );

				ManualResetEvent.WaitAll( new[] { h1, h2 } );

				currentThreadId.Should().Not.Be.EqualTo( s1ThreadId );
				currentThreadId.Should().Not.Be.EqualTo( s2ThreadId );
			} );
		}
コード例 #44
0
 public AMFEndpoint(MessageBroker messageBroker, ChannelDefinition channelDefinition)
     : base(messageBroker, channelDefinition)
 {
     _waitingPollRequests = new AtomicInteger();
 }
コード例 #45
0
		public void MessageBroker_POCO_subscriber_using_a_base_class_should_be_dispatched_using_a_derived_class_message()
		{
			var actual = false;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<Object>( this, ( s, msg ) => actual = true );
			broker.Dispatch( this, new PocoTestMessage() );

			actual.Should().Be.True();
		}
コード例 #46
0
        /// <summary>
        /// Logs out the current user.
        /// </summary>
        /// <returns><c>true</c> if logging out succeeded; otherwise, <c>false</c>.</returns>
        public bool Logout()
        {
            MessageBroker messageBroker = MessageBroker.GetMessageBroker(MessageBroker.DefaultMessageBrokerId);

            return(messageBroker.LoginManager.Logout());
        }
コード例 #47
0
		public void MessageBroker_subscriber_using_a_base_class_should_be_dispatched_only_to_the_expected_inheritance_chain()
		{
			var actual = 0;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, msg => actual++ );
			broker.Dispatch( new LegacyMessageDerivedFromLegacyTestMessage( this ) );
			broker.Dispatch( new LegacyAnotherTestMessage( this ) );

			actual.Should().Be.EqualTo( 1 );
		}
コード例 #48
0
        public void Send_Successful()
        {
            MessageBroker.Send(new Message <Cat>(MessageCommand.Create, new Cat()));

            QueueClientMock.VerifySend();
        }
コード例 #49
0
		public void messageBroker_broadcast_should_report_expected_exception()
		{
			ManualResetEvent h = new ManualResetEvent( false );

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, msg =>
			{
				throw new ArgumentException();
			} );

			try
			{
				broker.Broadcast( new LegacyTestMessage( this ) );

				h.WaitOne();
			}
			catch
			{
				h.Set();
				throw;
			}
		}
コード例 #50
0
ファイル: EndpointBase.cs プロジェクト: hakanaku2009/svn-dump
 public EndpointBase(MessageBroker messageBroker, ChannelDefinition channelDefinition)
 {
     _messageBroker     = messageBroker;
     _channelDefinition = channelDefinition;
 }
コード例 #51
0
		public void messageBroker_POCO_should_broadcast_non_POCO_message_and_subscribe_as_POCO()
		{
			var received = false;
			var h = new ManualResetEvent( false );
			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, ( s, msg ) =>
			{
				received = true;
				h.Set();
			} );

			broker.Broadcast( this, new LegacyTestMessage() );

			h.WaitOne();

			Assert.IsTrue( received );
		}
コード例 #52
0
 public StreamingAmfEndpoint(MessageBroker messageBroker, ChannelDefinition channelDefinition)
     : base(messageBroker, channelDefinition)
 {
     _streamingClientsCount = new AtomicInteger();
 }
コード例 #53
0
		public void messageBroker_POCO_should_dispatch_non_POCO_message_with_correct_Sender()
		{
			Object expected = this;
			Object actual = null;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			broker.Subscribe<LegacyTestMessage>( this, msg =>
			{
				actual = msg.Sender;
			} );

			broker.Dispatch( this, new LegacyTestMessage() );

			Assert.AreEqual( expected, actual );
		}
コード例 #54
0
 public MessageService(MessageBroker messageBroker, ServiceSettings serviceSettings) : base(messageBroker, serviceSettings)
 {
 }
コード例 #55
0
		public void MessageBroker_broadcast_from_multiple_thread_should_not_fail()
		{
			Exception failure = null;
			var wh = new ManualResetEvent( false );
			var run = true;

			var dispatcher = new NullDispatcher();
			var broker = new MessageBroker( dispatcher );

			// do some metrics to find a good number of subscription to let the pub do a long running
			const int metricsCount = 100;
			for( int i = 0; i < metricsCount; i++ )
			{
				broker.Subscribe<PocoTestMessage>( this, ( sender, msg ) => { } );
			}
			
			var sw = Stopwatch.StartNew();
			broker.Broadcast(this, new PocoTestMessage());
			sw.Stop();
			
			const int longRunningTiming = 100;
			var elapsedMilliseconds = sw.ElapsedMilliseconds == 0
				? longRunningTiming
				: sw.ElapsedMilliseconds;

			var subCountForLongRunning = (longRunningTiming / elapsedMilliseconds) * metricsCount;
			Trace.WriteLine(string.Format("Need {0} subscriptions to run for at least {1} ms. {2} took {3} ms.", subCountForLongRunning, longRunningTiming, metricsCount, sw.ElapsedMilliseconds));

			for (int i = 0; i < subCountForLongRunning - metricsCount; i++)
			{
				broker.Subscribe<PocoTestMessage>(this, (sender, msg) => { });
			}

			// this will take approximately 100 ms to do 1 broadcast
			var broadcastThread1 = new Thread( payload =>
			{
				while( run )
				{
					try
					{
						broker.Broadcast( this, new PocoTestMessage() );
					}
					catch( Exception e )
					{
						lock( this )
						{
							failure = e;
							wh.Set();
						}

						break;
					}
				}
			} );
			broadcastThread1.IsBackground = true;
			broadcastThread1.Start();

			// this should istantly throw an error because the broadcasting is enumerating the subscriptions and should take 100 ms to enumerate them all
			var subscriberThread1 = new Thread(payload =>
			{
				while (run)
				{
					try
					{
						broker.Subscribe<PocoTestMessage>(this, (sender, msg) =>
						{
							Thread.Sleep(10);
						});
					}
					catch (Exception e)
					{
						lock (this)
						{
							failure = e;
							wh.Set();

							break;
						}
					}
				}

			});
			subscriberThread1.IsBackground = true;
			subscriberThread1.Start();

			var timeout = 1;
			var signaled = wh.WaitOne( TimeSpan.FromSeconds( timeout ) );
			if( !signaled )
			{
				Trace.WriteLine( String.Format( "Run without any issue for {0} seconds.", timeout ) );
			}

			run = false;

			subscriberThread1.Join();

			Assert.IsNull( failure, failure != null ? failure.ToString() : "--" );

		}
コード例 #56
0
 public RtmptEndpoint(MessageBroker messageBroker, ChannelSettings channelSettings) : base(messageBroker, channelSettings)
 {
 }
コード例 #57
0
 public void SetUp()
 {
     broker = new MessageBroker();
 }
コード例 #58
0
 public HomeController(IPhoneRepository phoneRepository, IHostingEnvironment hostingEnvironment, MessageBroker broker)
 {
     _phoneRepository        = phoneRepository;
     this.hostingEnvironment = hostingEnvironment;
     _broker = broker;
 }
コード例 #59
0
        public SecureAmfEndpoint(MessageBroker messageBroker, ChannelDefinition channelDefinition)
            : base(messageBroker, channelDefinition)
		{
		}
コード例 #60
0
ファイル: RemotingService.cs プロジェクト: sandboxorg/AMFCore
 public RemotingService(MessageBroker broker, ServiceSettings settings) : base(broker, settings)
 {
 }