/// <summary>
        /// Method reads groups from storage.
        /// </summary>
        /// <param name="key">Specifies a key to read.</param>
        /// <returns>A Groups object.</returns>
        private static Groups ReadGroups(string key)
        {
            Groups groups = new Groups();

            string value = RelayStorage.GetValue(key);
            if (string.IsNullOrEmpty(value))
            {
                return groups;
            }

            string[] groupsItems = value.Split(
                new string[] { RelayStorage.ObjectSeperator },
                System.StringSplitOptions.RemoveEmptyEntries);

            if (groupsItems == null || groupsItems.Length == 0)
            {
                return groups;
            }

            foreach (string item in groupsItems)
            {
                string[] groupItems = item.Split(
                    new string[] { RelayStorage.ValueSeperator },
                    System.StringSplitOptions.None);

                if (groupItems == null || groupItems.Length != 3)
                {
                    continue;
                }

                Group group = new Group()
                {
                    Name = groupItems[0],
                    RegistrationId = groupItems[1],
                    SecretKey = groupItems[2]
                };

                groups.Add(group);
            }

            return groups;
        }