public void ExactDoublePageSize_ShouldBeSame()
        {
            var ep                = A.Fake <EndPoint>();
            var buffer            = new BMSByte();
            var destructor        = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageDestructor>();
            var bufferInterpreter = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageBufferInterpreter>();

            buffer.AugmentSize(destructor.MaxPageLength * 2);
            buffer.PointToEnd();
            for (int i = 0; i < buffer.Size; i++)
            {
                buffer[i] = (byte)(i % byte.MaxValue);
            }
            var beforeBuffer = new BMSByte();

            beforeBuffer.Clone(buffer);
            IPagenatedMessage   pm          = destructor.BreakdownMessage(buffer);
            IMessageConstructor constructor = null;

            for (int i = 0; i < pm.Pages.Count; i++)
            {
                BMSByte pageBuffer = GetPageSection(buffer, pm, i);
                constructor = bufferInterpreter.ReconstructPacketPage(pageBuffer, ep);
            }
            Assert.IsNotNull(constructor);
            Assert.IsTrue(constructor.MessageReconstructed);
            Assert.AreEqual(beforeBuffer.Size, constructor.MessageBuffer.Size);
            for (int i = 0; i < beforeBuffer.Size; i++)
            {
                Assert.AreEqual(beforeBuffer[i], constructor.MessageBuffer[i]);
            }
        }
        public void PartialSinglePage_ShouldBeSame()
        {
            var buffer            = new BMSByte();
            var destructor        = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageDestructor>();
            var bufferInterpreter = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageBufferInterpreter>();

            buffer.AugmentSize(destructor.MaxPageLength / 2);
            buffer.PointToEnd();
            for (int i = 0; i < buffer.Size; i++)
            {
                buffer[i] = (byte)(i % byte.MaxValue);
            }
            var beforeBuffer = new BMSByte();

            beforeBuffer.Clone(buffer);
            IPagenatedMessage   pm          = destructor.BreakdownMessage(buffer);
            IMessageConstructor constructor = bufferInterpreter.ReconstructPacketPage(pm.Buffer, A.Fake <EndPoint>());

            Assert.IsTrue(constructor.MessageReconstructed);
            Assert.AreEqual(beforeBuffer.Size, constructor.MessageBuffer.Size);
            for (int i = 0; i < beforeBuffer.Size; i++)
            {
                Assert.AreEqual(beforeBuffer[i], constructor.MessageBuffer[i]);
            }
        }
 private void ContinueProcessingExistingConstructor(BMSByte buffer, IMessageConstructor constructor, EndPoint sender)
 {
     constructor.ReconstructMessagePage(buffer, sender);
     if (constructor.MessageReconstructed)
     {
         _messageConstructors[sender].Remove(constructor);
     }
 }
 public GetPropertyMessageHandler(
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup,
     IObjectStorage objectStorage)
 {
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup = clientLookup;
     this.m_ObjectStorage = objectStorage;
 }
Exemple #5
0
 public DevicePingService(IDevicePingRepository devicePingRepository, ILoggingService loggingService, IMessageConstructor messageConstructor,
                          IEnumerable <IRequestValidator <IServiceRequest> > validators, IRequestValidator <DevicePingLogRequest> pingValidator, ITransactions transactions, IMapper mapper)
     : base(null, mapper, loggingService)
 {
     _devicePingRepository = devicePingRepository;
     _messageConstructor   = messageConstructor;
     _validators           = validators;
     _pingValidator        = pingValidator;
 }
Exemple #6
0
 public GetPropertyMessageHandler(
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup,
     IObjectStorage objectStorage)
 {
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup       = clientLookup;
     this.m_ObjectStorage      = objectStorage;
 }
Exemple #7
0
 public FetchMessageHandler(
     IObjectStorage lookup,
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup,
     IObjectWithTypeSerializer objectWithTypeSerializer)
 {
     this.m_Lookup                   = lookup;
     this.m_MessageConstructor       = messageConstructor;
     this.m_ClientLookup             = clientLookup;
     this.m_ObjectWithTypeSerializer = objectWithTypeSerializer;
 }
Exemple #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultClientConnector"/> class.
 /// </summary>
 /// <param name="clientLookup">
 /// The client lookup.
 /// </param>
 /// <param name="clientHandlerFactory">
 /// The client handler factory.
 /// </param>
 /// <param name="messageConstructor">
 /// The message constructor.
 /// </param>
 /// <param name="messageSideChannel">
 /// The message side channel.
 /// </param>
 public DefaultClientConnector(
     IClientLookup clientLookup,
     IClientHandlerFactory clientHandlerFactory,
     IMessageConstructor messageConstructor,
     IMessageSideChannel messageSideChannel)
 {
     this.m_ClientLookup         = clientLookup;
     this.m_ClientHandlerFactory = clientHandlerFactory;
     this.m_MessageConstructor   = messageConstructor;
     this.m_MessageSideChannel   = messageSideChannel;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultClientConnector"/> class.
 /// </summary>
 /// <param name="clientLookup">
 /// The client lookup.
 /// </param>
 /// <param name="clientHandlerFactory">
 /// The client handler factory.
 /// </param>
 /// <param name="messageConstructor">
 /// The message constructor.
 /// </param>
 /// <param name="messageSideChannel">
 /// The message side channel.
 /// </param>
 public DefaultClientConnector(
     IClientLookup clientLookup, 
     IClientHandlerFactory clientHandlerFactory, 
     IMessageConstructor messageConstructor, 
     IMessageSideChannel messageSideChannel)
 {
     this.m_ClientLookup = clientLookup;
     this.m_ClientHandlerFactory = clientHandlerFactory;
     this.m_MessageConstructor = messageConstructor;
     this.m_MessageSideChannel = messageSideChannel;
 }
Exemple #10
0
 public FetchMessageHandler(
     IObjectStorage lookup,
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup,
     IObjectWithTypeSerializer objectWithTypeSerializer)
 {
     this.m_Lookup = lookup;
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup = clientLookup;
     this.m_ObjectWithTypeSerializer = objectWithTypeSerializer;
 }
Exemple #11
0
 public InvokeMessageHandler(
     ILocalNode localNode,
     IObjectStorage objectStorage,
     IObjectWithTypeSerializer objectWithTypeSerializer,
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup)
 {
     this.m_LocalNode                = localNode;
     this.m_ObjectStorage            = objectStorage;
     this.m_ObjectWithTypeSerializer = objectWithTypeSerializer;
     this.m_MessageConstructor       = messageConstructor;
     this.m_ClientLookup             = clientLookup;
 }
Exemple #12
0
 public DefaultObjectLookup(
     ILocalNode localNode,
     IObjectStorage objectStorage,
     IClientLookup clientLookup,
     IMessageConstructor messageConstructor,
     IMessageSideChannel messageSideChannel)
 {
     this.m_LocalNode          = localNode;
     this.m_ObjectStorage      = objectStorage;
     this.m_ClientLookup       = clientLookup;
     this.m_MessageConstructor = messageConstructor;
     this.m_MessageSideChannel = messageSideChannel;
 }
 public SetPropertyMessageHandler(
     ILocalNode localNode,
     IObjectStorage objectStorage,
     IObjectWithTypeSerializer objectWithTypeSerializer,
     IMessageConstructor messageConstructor,
     IClientLookup clientLookup)
 {
     this.m_LocalNode = localNode;
     this.m_ObjectStorage = objectStorage;
     this.m_ObjectWithTypeSerializer = objectWithTypeSerializer;
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup = clientLookup;
 }
Exemple #14
0
 public DefaultObjectLookup(
     ILocalNode localNode,
     IObjectStorage objectStorage,
     IClientLookup clientLookup,
     IMessageConstructor messageConstructor,
     IMessageSideChannel messageSideChannel)
 {
     this.m_LocalNode = localNode;
     this.m_ObjectStorage = objectStorage;
     this.m_ClientLookup = clientLookup;
     this.m_MessageConstructor = messageConstructor;
     this.m_MessageSideChannel = messageSideChannel;
 }
Exemple #15
0
 protected DeviceConfigTemplateBase(IInjectConfig injectInfo,
                                    IDeviceConfigRepository deviceConfigRepository,
                                    IParameterAttributeCache parameterAttributeCache,
                                    IMapper mapper, ILoggingService loggingService,
                                    IEnumerable <IRequestValidator <IServiceRequest> > requestInvalidateValidators,
                                    IEnumerable <IRequestValidator <DeviceConfigRequestBase> > commonDeviceLevelValidators,
                                    IAssetDeviceRepository assetDeviceRepository,
                                    IMessageConstructor messageConstructor, IAckBypasser ackBypasser, IOptions <Configurations> configurations, IDeviceConfigSettingConfig settingsConfig, ITransactions transactions) :
     base(injectInfo, deviceConfigRepository, parameterAttributeCache, mapper, assetDeviceRepository, messageConstructor, ackBypasser, settingsConfig, configurations, transactions, loggingService)
 {
     _requestInvalidateValidators = requestInvalidateValidators;
     _commonDeviceLevelValidators = commonDeviceLevelValidators;
     _parameterAttributeCache     = parameterAttributeCache;
 }
Exemple #16
0
 public DeviceConfigSwitchesService(
     IEnumerable <IRequestValidator <IServiceRequest> > requestInvalidateValidators,
     IEnumerable <IRequestValidator <DeviceConfigRequestBase> > commonDeviceLevelValidators,
     ISwitchesValidator switchesValidator,
     IInjectConfig injectConfig,
     IDeviceConfigRepository deviceConfigRepository,
     IParameterAttributeCache parameterAttributeCache,
     IMessageConstructor messageConstructor,
     IAckBypasser ackBypasser, IDeviceConfigSettingConfig settingsConfig,
     IAssetDeviceRepository assetDeviceRepository,
     IOptions <Configurations> configurations,
     IMapper mapper, ILoggingService loggingService, ITransactions transactions) :
     base(injectConfig, deviceConfigRepository, parameterAttributeCache, mapper, loggingService, requestInvalidateValidators, commonDeviceLevelValidators,
          assetDeviceRepository, messageConstructor, ackBypasser, configurations, settingsConfig, transactions)
 {
     _attributeToRequestMaps           = injectConfig.ResolveKeyed <DeviceConfigAttributeToRequestMaps>("DeviceConfigAttributeToRequestMaps");
     _requestToAttributeMaps           = injectConfig.ResolveKeyed <DeviceConfigRequestToAttributeMaps>("DeviceConfigRequestToAttributeMaps");
     _switchesValidtor                 = switchesValidator;
     _sendAllSwitchesDeviceFamilyLists = configurations.Value.AppSettings.DeviceConfigSendAllSwitchesDeviceFamilyLists.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
 }
        public void ExactTripplePageSizeInRandomOrder_ShouldBeSame()
        {
            var ep                = A.Fake <EndPoint>();
            var buffer            = new BMSByte();
            var destructor        = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageDestructor>();
            var bufferInterpreter = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageBufferInterpreter>();

            buffer.AugmentSize(destructor.MaxPageLength * 3);
            buffer.PointToEnd();
            for (int i = 0; i < buffer.Size; i++)
            {
                buffer[i] = (byte)(i % byte.MaxValue);
            }
            var beforeBuffer = new BMSByte();

            beforeBuffer.Clone(buffer);
            IPagenatedMessage   pm          = destructor.BreakdownMessage(buffer);
            IMessageConstructor constructor = null;

            int[] indexes = new int[pm.Pages.Count];
            for (int i = 0; i < indexes.Length; i++)
            {
                indexes[i] = i;
            }
            Random rnd = new Random();

            indexes = indexes.OrderBy(x => rnd.Next()).ToArray();
            for (int i = 0; i < indexes.Length; i++)
            {
                BMSByte pageBuffer = GetPageSection(buffer, pm, indexes[i]);
                constructor = bufferInterpreter.ReconstructPacketPage(pageBuffer, ep);
            }
            Assert.IsNotNull(constructor);
            Assert.IsTrue(constructor.MessageReconstructed);
            Assert.AreEqual(beforeBuffer.Size, constructor.MessageBuffer.Size);
            for (int i = 0; i < beforeBuffer.Size; i++)
            {
                Assert.AreEqual(beforeBuffer[i], constructor.MessageBuffer[i]);
            }
        }
Exemple #18
0
        // Note:  This is called from the read thread without sync context
        public void ReceiveMessageBuffer(ISocket readingSocket, EndPoint messageSender, BMSByte buffer)
        {
            IMessageConstructor constructor = MessageBufferInterpreter.ReconstructPacketPage(buffer, messageSender);

            if (constructor.MessageReconstructed)
            {
                try
                {
                    var m = (IMessage)ForgeMessageCodes.Instantiate(constructor.MessageBuffer.GetBasicType <int>());
                    ProcessMessageSignature(readingSocket, messageSender, constructor.MessageBuffer, m);

                    if (m.Receipt != null)
                    {
                        if (_storedMessages.Exists(messageSender, m.Receipt))
                        {
                            return;
                        }
                        _storedMessages.AddMessage(m, messageSender, _networkMediator.PlayerTimeout);
                    }

                    m.Deserialize(constructor.MessageBuffer);
                    var interpreter = m.Interpreter;
                    if (interpreter != null)
                    {
                        _synchronizationContext.Post(InterpretWithinContext, new SocketContainerSynchronizationReadData
                        {
                            Interpreter = interpreter,
                            Sender      = messageSender,
                            Message     = m
                        });
                    }
                }
                catch (MessageCodeNotFoundException ex)
                {
                    _networkMediator.EngineProxy.Logger.LogException(ex);
                }
                MessageBufferInterpreter.Release(constructor);
            }
        }
Exemple #19
0
 protected DeviceConfigRepositoryServiceBase(IInjectConfig injectInfo, IDeviceConfigRepository deviceConfigRepository, IParameterAttributeCache parameterAttributeCache, IMapper mapper,
                                             IAssetDeviceRepository assetDeviceRepository,
                                             IMessageConstructor messageConstructor,
                                             IAckBypasser ackBypasser,
                                             IDeviceConfigSettingConfig settingsConfig,
                                             IOptions <Configurations> configurations,
                                             ITransactions transactions,
                                             ILoggingService loggingService) : base(parameterAttributeCache, mapper, loggingService)
 {
     this._attributeMaps          = injectInfo.ResolveKeyed <DeviceConfigAttributeToRequestMaps>("DeviceConfigAttributeToRequestMaps");
     this._deviceConfigRepository = deviceConfigRepository;
     this._loggingService.CreateLogger(this.GetType());
     this._messageConstructor        = messageConstructor;
     this._ackBypasser               = ackBypasser;
     this._settingsConfig            = settingsConfig;
     this._assetDeviceRepository     = assetDeviceRepository;
     this._deviceService             = new MessageConstructorDeviceService(configurations);
     this._deviceTypeFamilyContainer = _deviceService.GetDeviceTypeFamily();
     this._configurations            = configurations;
     //this._assetDeviceConfigApiUrl = ConfigurationManager.AppSettings["PendingDeviceConfigApiUri"];
     this._pendingClearOffDeviceTypes = _configurations.Value.AppSettings.ClearOffPendingValueForDeviceTypes.Split(',').ToList();
     this._pendingClearOffDays        = _configurations.Value.AppSettings.ClearOffPendingValueGreaterThanNoOfDays;
     this._transactions = transactions;
 }
        public void RemovingAPlayer_ShouldRemoveBufferedMessages()
        {
            var ep     = A.Fake <EndPoint>();
            var player = A.Fake <INetPlayer>();

            A.CallTo(() => player.EndPoint).Returns(ep);
            var buffer            = new BMSByte();
            var destructor        = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageDestructor>();
            var bufferInterpreter = AbstractFactory.Get <INetworkTypeFactory>().GetNew <IMessageBufferInterpreter>();

            buffer.AugmentSize(destructor.MaxPageLength + destructor.MaxPageLength / 2);
            buffer.PointToEnd();
            for (int i = 0; i < buffer.Size; i++)
            {
                buffer[i] = (byte)(i % byte.MaxValue);
            }
            var beforeBuffer = new BMSByte();

            beforeBuffer.Clone(buffer);
            IPagenatedMessage   pm          = destructor.BreakdownMessage(buffer);
            IMessageConstructor constructor = null;

            for (int i = 0; i < pm.Pages.Count - 1; i++)
            {
                BMSByte pageBuffer = GetPageSection(buffer, pm, i);
                constructor = bufferInterpreter.ReconstructPacketPage(pageBuffer, ep);
            }
            bufferInterpreter.ClearBufferFor(player);
            Assert.IsNotNull(constructor);
            Assert.IsFalse(constructor.MessageReconstructed);

            BMSByte pbuf = GetPageSection(buffer, pm, pm.Pages.Count - 1);

            constructor = bufferInterpreter.ReconstructPacketPage(pbuf, ep);
            Assert.IsFalse(constructor.MessageReconstructed);
        }
        public IMessageConstructor ReconstructPacketPage(BMSByte buffer, EndPoint sender)
        {
            int messageId = buffer.GetBasicType <int>();
            IMessageConstructor constructor = null;

            if (_messageConstructors.TryGetValue(sender, out var constructors))
            {
                foreach (var c in constructors)
                {
                    if (c.Id == messageId)
                    {
                        constructor = c;
                        ContinueProcessingExistingConstructor(buffer, constructor, sender);
                        break;
                    }
                }
            }

            if (constructor == null)
            {
                constructor = ProcessNewConstructor(buffer, messageId, sender);
            }
            return(constructor);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ConnectionPingMessageHandler"/> class.
 /// </summary>
 /// <param name="messageConstructor">
 /// The message constructor.
 /// </param>
 /// <param name="clientLookup">
 /// The client lookup.
 /// </param>
 public ConnectionPingMessageHandler(IMessageConstructor messageConstructor, IClientLookup clientLookup)
 {
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup = clientLookup;
 }
Exemple #23
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConnectionPingMessageHandler"/> class.
 /// </summary>
 /// <param name="messageConstructor">
 /// The message constructor.
 /// </param>
 /// <param name="clientLookup">
 /// The client lookup.
 /// </param>
 public ConnectionPingMessageHandler(IMessageConstructor messageConstructor, IClientLookup clientLookup)
 {
     this.m_MessageConstructor = messageConstructor;
     this.m_ClientLookup       = clientLookup;
 }
Exemple #24
0
 public DeviceConfigMaintenanceModeService(IInjectConfig injectConfig, IDeviceConfigRepository deviceConfigRepository, IEnumerable <IRequestValidator <DeviceConfigRequestBase> > deviceConfigRequestValidators,
                                           IEnumerable <IRequestValidator <IServiceRequest> > serviceRequestValidators,
                                           IEnumerable <IRequestValidator <DeviceConfigMaintenanceModeRequest> > MaintenanceModeValidators,
                                           IAssetDeviceRepository assetDeviceRepository,
                                           IOptions <Configurations> configurations,
                                           IParameterAttributeCache parameterAttributeCache, IMapper mapper, IMessageConstructor messageConstructor, IAckBypasser ackBypasser, IDeviceConfigSettingConfig settingsConfig, ITransactions transactions, ILoggingService loggingService) : base(injectConfig, deviceConfigRepository, parameterAttributeCache, mapper, assetDeviceRepository, messageConstructor, ackBypasser, settingsConfig, configurations, transactions, loggingService)
 {
     this._deviceConfigRequestValidators = deviceConfigRequestValidators;
     this._serviceRequestValidators      = serviceRequestValidators;
     this._MaintenanceModeValidators     = MaintenanceModeValidators;
     this._loggingService.CreateLogger(this.GetType());
 }
 public void Release(IMessageConstructor constructor)
 {
     _bufferPool.Release(constructor.MessageBuffer);
 }