public void Register(IClockListner listner)
        {
            if (listner == null)
                throw new ArgumentNullException("listner");

            var cityInfo = listner.CityInfo;
            if (cityInfo == null)
                throw new ArgumentException("CityInfo is null");

            _listners.Add(listner);
            if (!_timeZoneServiceCache.ContainsKey(cityInfo.TimeZoneId))
            {
                var service = TimeZoneService.FindSystemTimeZoneById(cityInfo.TimeZoneId);
                _timeZoneServiceCache.Add(cityInfo.TimeZoneId, service);
            }

            NotifyListner(listner);
        }
 public void UnRegister(IClockListner listner)
 {
     _listners.Remove(listner);
 }
 private void NotifyListner(IClockListner clockListner)
 {
     var service = GetTimeService(clockListner.CityInfo.TimeZoneId);
     var date = CalculateTime(service);
     clockListner.TickTack(date);
 }