public Task RemoveRegistrationAsync <T, TH>()
            where T : IMessage
            where TH : IMessageHandler <T>
        {
            MessageRegistration messageRegistrationToRemove = _findRegistrationToRemove <T, TH>();
            string messageKey = GetMessageKey <T>();

            _doRemoveRegistration(messageKey, messageRegistrationToRemove);

            return(Task.CompletedTask);
        }
        private void _doAddRegistration <T>(Type handlerType, Func <T, Task> asyncHandler, string messageName)
        {
            if (!HasRegistrationsForMessage(messageName))
            {
                _registrations.Add(messageName, new List <MessageRegistration>());
            }

            if (_registrations[messageName].Any(s => s.HandlerType == handlerType))
            {
                throw new ArgumentException(
                          $"Handler Type {handlerType.Name} already registered for '{messageName}'", nameof(handlerType));
            }

            _registrations[messageName].Add(MessageRegistration.Create(handlerType, asyncHandler));
        }
Exemplo n.º 3
0
        public void WhenVersionsDiffer_ThenRegistrationsShouldBeEqual()
        {
            const string SharedType = "some type";

            var a = new MessageRegistration
            {
                Type    = SharedType,
                Version = 1
            };
            var b = new MessageRegistration
            {
                Type    = SharedType,
                Version = 2
            };

            Assert.False(a.Equals(b));
        }
Exemplo n.º 4
0
        public void WhenTypeDiffers_ThenRegistrationsShouldNotBeEqual()
        {
            const int SharedVersion = 99;

            var a = new MessageRegistration
            {
                Type    = "first type",
                Version = SharedVersion
            };
            var b = new MessageRegistration
            {
                Type    = "second type",
                Version = SharedVersion
            };

            Assert.False(a.Equals(b));
        }
Exemplo n.º 5
0
        public void WhenTypeAndVersionMatch_ThenRegistrationsShouldBeEqual()
        {
            const string SharedType    = "some type";
            const int    SharedVersion = 99;

            var a = new MessageRegistration
            {
                Type    = SharedType,
                Version = SharedVersion
            };
            var b = new MessageRegistration
            {
                Type    = SharedType,
                Version = SharedVersion
            };

            Assert.True(a.Equals(b));
        }
Exemplo n.º 6
0
        void handleMessageRegistration(GameMessage message)
        {
            if (message.MessageType != MessageType.Regitsration)
            {
                return;
            }
            if (!PlayersNames.ContainsKey(message.PlayerID))
            {
                PlayersNames.Add(message.PlayerID, ((MessageRegistration)message).Name);
                Players[message.PlayerID].Name = ((MessageRegistration)message).Name;
            }
            MessageRegistration messageRegistration = message as MessageRegistration;

            ChatMessages.Enqueue(new MessageChat()
            {
                PlayerID = ServerID,
                Content  =
                    messageRegistration.Name + " присоединился к игре"
            });
        }
        private void _doRemoveRegistration(string messageName, MessageRegistration messageRegistrationToRemove)
        {
            if (messageRegistrationToRemove == null)
            {
                return;
            }

            _registrations[messageName].Remove(messageRegistrationToRemove);

            if (_registrations[messageName].Any())
            {
                return;
            }

            _registrations.Remove(messageName);
            Type messageType = _messageTypes.SingleOrDefault(e => e.Name == messageName);

            if (messageType != null)
            {
                _messageTypes.Remove(messageType);
            }

            _raiseOnMessageRemoved(messageName);
        }