/// <summary>
        /// Add a Rosteritem to the Roster
        /// </summary>
        /// <param name="iqSender"><see cref="IClientIqSender"/></param>
        /// <param name="jid">The BARE jid of the rosteritem that should be removed</param>
        /// <param name="nickname">Nickname for the RosterItem</param>
        /// <param name="group">An Array of groups when you want to add the Rosteritem to multiple groups</param>
        /// <param name="timeout">The timeout in milliseconds.</param>
        /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
        /// <returns></returns>
        public static async Task <Iq> AddRosterItemAsync(this IClientIqSender iqSender, Jid jid, string nickname, string[] groups, int timeout, CancellationToken cancellationToken)
        {
            var riq = RosterBuilder.AddRosterItem(jid, nickname, groups);

            return(await iqSender.SendIqAsync(riq, timeout, cancellationToken));
        }
 /// <summary>
 /// Remove a contact from the contact list, aka roster
 /// </summary>
 /// <param name="iqSender"><see cref="IClientIqSender"/></param>
 /// <param name="jid">The jid to remove</param>
 /// <param name="timeout">The timeout</param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> RemoveRosterItemAsync(this IClientIqSender iqSender, Jid jid, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(RosterBuilder.RemoveRosterItem(jid), timeout, cancellationToken));
 }
 /// <summary>
 /// Request the roster (contact list) asynchronous from the server.
 /// </summary>
 /// <param name="iqSender"><see cref="IClientIqSender"/></param>
 /// <param name="version"></param>
 /// <param name="timeout"></param>
 /// <param name="cancellationToken">The cancellation token used to cancel the request.</param>
 /// <returns></returns>
 public static async Task <Iq> RequestRosterAsync(this IClientIqSender iqSender, string version, int timeout, CancellationToken cancellationToken)
 {
     return(await iqSender.SendIqAsync(RosterBuilder.RequestRoster(version), timeout, cancellationToken));
 }