/// <summary>Process Service Notification.</summary>
        /// <param name="systemId">system id.</param>
        /// <param name="isSystemOnline">is system online.</param>
        /// <param name="subscriptionId">service subscription id.</param>
        /// <param name="serviceList">list of services.</param>
        public void OnServiceNotification(string systemId, bool isSystemOnline, int subscriptionId, serviceStruct[] serviceList)
        {
            lock (_lock)
            {
                // This notification is sent by T2G for a single subscription, i.e. for a specific service ID. The list is not the
                // complete list of services on a train, it is a list of services with the same service ID. T2G supports multiple
                // services with the same ID present on a train, but PIS ground uses only those services that can only have one
                // instance on a given train.

                if (!string.IsNullOrEmpty(systemId))
                {
                    ServiceInfoList services = T2GDataConverter.BuildServiceList(serviceList);

                    if (services != null)
                    {
                        _localDataStorage.OnServiceChanged(systemId, isSystemOnline, subscriptionId, services);

                        ElementEventArgs elementEventArgs = _localDataStorage.BuildElementInfoChangedEvent(systemId);

                        if (elementEventArgs != null)
                        {
                            _notifierTarget.RaiseOnElementInfoChangeEvent(elementEventArgs);
                        }
                    }
                }
            }
        }