/// <summary>
 /// Post text to the session
 /// </summary>
 /// <param name="text"></param>
 public void PostText(TextBlobModel text, DeviceProfile device)
 {
     try
     {
         string relativeUri = String.Format(UriTemplates.POST_TEXT_URI, _session.SessionId, device.profile.id);
         string absoluteUri = TywiConfiguration.TywiServiceUri + relativeUri;
         SessionApiRequest<TextBlobModel, TextBlobModel> request = new SessionApiRequest<TextBlobModel, TextBlobModel>(
             device, absoluteUri, Http.HttpUtilities.Methods.POST, text);
         this.ProcessRequest<TextBlobModel, TextBlobModel>(request);
     }
     catch (Exception exc)
     {
         throw new AccessDeniedException(String.Format("Failed to post text from device {0}: {1}", device.profile.id, exc.Message), exc);
     }
 }
 /// <summary>
 /// Get the latest text from the session
 /// </summary>
 /// <param name="device">The device details for the connection</param>
 /// <returns>TranscriptionModel with the latest text</returns>
 public TranscriptionModel GetText(DeviceProfile device)
 {
     try
     {
         string relativeUri = String.Format(UriTemplates.GET_TEXT_URI, _session.SessionId, device.profile.id);
         string absoluteUri = TywiConfiguration.TywiServiceUri + relativeUri;
         SessionApiRequest<string, TranscriptionModel> request = new SessionApiRequest<string, TranscriptionModel>(
             device, absoluteUri, Http.HttpUtilities.Methods.GET, null);
         return this.ProcessRequest<string, TranscriptionModel>(request);
     }
     catch (Exception exc)
     {
         throw new AccessDeniedException(String.Format("Failed to get text for device {0}", device.profile.id), exc);
     }
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="device"></param>
 /// <returns></returns>
 internal AudioModel GetAudio(DeviceProfile device)
 {
     try
     {
         string relativeUri = String.Format(UriTemplates.GET_AUDIO_URI, _session.SessionId, device.profile.id);
         string absoluteUri = TywiConfiguration.TywiServiceUri + relativeUri;
         SessionApiRequest<string, AudioModel> request = new SessionApiRequest<string, AudioModel>(
             device, absoluteUri, Http.HttpUtilities.Methods.GET, null);
         return this.ProcessRequest<string, AudioModel>(request);
     }
     catch (Exception exc)
     {
         throw new AccessDeniedException(String.Format("Failed to get audio from device {0}", device.profile.id), exc);
     }
 }
 /// <summary>
 /// 
 /// </summary>
 /// <returns></returns>
 internal SessionModel PostSession(SessionModel session, DeviceProfile device)
 {
     try
     {
         string absoluteUri = TywiConfiguration.TywiServiceUri + UriTemplates.POST_SESSION_URI;
         SessionApiRequest<SessionModel, SessionModel> request = new SessionApiRequest<SessionModel, SessionModel>(
             device, absoluteUri, Http.HttpUtilities.Methods.POST, session);
         return this.ProcessRequest<SessionModel, SessionModel>(request);
     }
     catch (Exception exc)
     {
         throw new AccessDeniedException(String.Format("Failed to post audio from device {0}: {1}", device.profile.id, exc.Message), exc);
     }
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="audio"></param>
 /// <param name="device"></param>
 internal UserProfileModel PostProfile(UserProfileModel userProfile, DeviceProfile device)
 {
     try
     {
         string relativeUri = String.Format(UriTemplates.POST_PROFILE_URI, _session.SessionId);
         string absoluteUri = TywiConfiguration.TywiServiceUri + relativeUri;
         SessionApiRequest<UserProfileModel, UserProfileModel> request = new SessionApiRequest<UserProfileModel, UserProfileModel>(
             device, absoluteUri, Http.HttpUtilities.Methods.POST, userProfile);
         return this.ProcessRequest<UserProfileModel, UserProfileModel>(request);
     }
     catch (Exception exc)
     {
         throw new AccessDeniedException(String.Format("Failed to post audio from device {0}: {1}", device.profile.id, exc.Message), exc);
     }
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="audio"></param>
        /// <param name="device"></param>
        internal void PostAudio(byte[] audio, DeviceProfile device)
        {
            try
            {
                if (audio != null && audio.Length > 0)
                {
                    string relativeUri = String.Format(UriTemplates.POST_AUDIO_URI, _session.SessionId, device.profile.id);
                    string absoluteUri = TywiConfiguration.TywiServiceUri + relativeUri;
                    SessionApiRequest<byte[], byte[]> request = new SessionApiRequest<byte[], byte[]>(
                        device, absoluteUri, Http.HttpUtilities.Methods.POST, audio, "audio/wav");

                    this.ProcessRequest<byte[], byte[]>(request);
                }
            }
            catch (Exception exc)
            {
                throw new AccessDeniedException(String.Format("Failed to post audio from device {0}: {1}", device.profile.id, exc.Message), exc);
            }
        }