/// <summary>
 /// Event raised upon completion of GetSessionInfoAsync.
 /// </summary>
 /// <param name="e"></param>
 private void OnGetSessionInfoCompleted(GetSessionInfoCompletedArgs e)
 {
     if (this.GetSessionInfoCompleted != null)
     {
         this.GetSessionInfoCompleted(this, e);
     }
 }
        /// <summary>
        /// Gets info for a specific Smash session.
        /// </summary>
        /// <param name="identity">ClientIdentity object used for authentication.</param>
        /// <param name="meetingToken">The meeting token of the session to get info for.</param>
        /// <param name="sessionID">The session ID of the session to get info for.</param>
        /// <param name="state">State to be passed as userState in the completion event args.</param>
        public void GetSessionInfoAsync(ClientIdentity identity, Guid meetingToken, Guid sessionID, object state)
        {
            IAsyncResult asyncResult = SmashClientREST.GetSessionInfoAsync(
                identity,
                meetingToken,
                sessionID,
                new ServiceAgent<Contracts.GetSessionInfoResponse>.OnCompleteDelegate(
                    (response) =>
                    {
                        GetSessionInfoCompletedArgs e = new GetSessionInfoCompletedArgs(response.Exception, response.Aborted, response.StateObject);
                        if (response.Exception == null && !response.Aborted)
                        {
                            e.SessionInfo = response.Session;
                        }
                        OnGetSessionInfoCompleted(e);
                    }),
                state);

            SmashClientREST.HandleCompletion(asyncResult, state);
        }