public Task RemoveCurrencyPair(CurrencyPairDto ccyPair)
        {
            var update = new CurrencyPairUpdateDto
            {
                CurrencyPair = ccyPair,
                UpdateType = UpdateTypeDto.Removed
            };

            return Publish(update);
        }
        public ICurrencyPairUpdate Create(CurrencyPairUpdateDto currencyPairUpdate)
        {
            var cp = new CurrencyPair(
                currencyPairUpdate.CurrencyPair.Symbol,
                currencyPairUpdate.CurrencyPair.RatePrecision,
                currencyPairUpdate.CurrencyPair.PipsPosition,
                _priceRepository);

            var update =
                new CurrencyPairUpdate(
                    currencyPairUpdate.UpdateType == UpdateTypeDto.Added ? UpdateType.Add : UpdateType.Remove, cp);

            return update;
        }
        private async Task Publish(CurrencyPairUpdateDto update)
        {
            IHubCallerConnectionContext context = _contextHolder.ReferenceDataHubClients;
            if (context == null) return;

            const string groupName = ReferenceDataHub.CurrencyPairUpdateGroupName;
            try
            {
                await context.Group(groupName).OnCurrencyPairUpdate(update);
                Log.InfoFormat("Published currency pair update to group {0}: {1}", groupName, update);
            }
            catch (Exception e)
            {
                Log.Error(
                    string.Format("An error occurred while publishing currency pair update to group {0}: {1}", groupName,
                        update), e);
            }
        }