private void SetupAppContext()
        {
            if (_connected == false)
            {
                _evtAppUserOfflineAvailable.Reset();
                _evtAppUserLoginOK.Reset();

                Logger.LogTrace("DeezerRenderer::SetupConfig => Creating app context ...");

                dz_error_t err;

                _dzRenderProgressCB = new dz_player_onrenderprogress_cb(OnRenderProgress);
                _dzPlayerEventCB    = new dz_player_onevent_cb(OnPlayerEvent);
                _dzRendererEventCB  = new dz_player_onrendererevent_cb(OnRendererEvent);

                _dzConnect = DeezerApi.dz_connect_new(_dzConfig);
                if (_dzConnect == IntPtr.Zero)
                {
                    DeezerApi.HandleDzErrorCode("dz_connect_new", dz_error_t.DZ_ERROR_CLASS_INSTANTIATION);
                }

                //err = DeezerApi.dz_connect_debug_log_disable(_dzConnect);
                //DeezerApi.HandleDzErrorCode("dz_connect_debug_log_disable", err);

                err = DeezerApi.dz_connect_activate(_dzConnect, IntPtr.Zero);
                DeezerApi.HandleDzErrorCode("dz_connect_activate", err);

                err = DeezerApi.dz_connect_cache_path_set(_dzConnect, null, IntPtr.Zero, USER_CACHE_PATH);
                DeezerApi.HandleDzErrorCode("dz_connect_cache_path_set", err);

                _dzPlayer = DeezerApi.dz_player_new(_dzConnect);
                if (_dzPlayer == IntPtr.Zero)
                {
                    DeezerApi.HandleDzErrorCode("dz_player_new", dz_error_t.DZ_ERROR_CLASS_INSTANTIATION);
                }

                err = DeezerApi.dz_player_activate(_dzPlayer, IntPtr.Zero);
                DeezerApi.HandleDzErrorCode("dz_player_activate", err);

                err = DeezerApi.dz_player_set_event_cb(_dzPlayer, _dzPlayerEventCB);
                DeezerApi.HandleDzErrorCode("dz_player_set_event_cb", err);

                err = DeezerApi.dz_player_set_render_progress_cb(_dzPlayer, _dzRenderProgressCB, (UInt64)5e5);
                DeezerApi.HandleDzErrorCode("dz_player_set_render_progress_cb", err);

                err = DeezerApi.dz_player_set_renderer_event_cb(_dzPlayer, _dzRendererEventCB);
                DeezerApi.HandleDzErrorCode("dz_player_set_renderer_event_cb", err);

                string token = ProTONEConfig.DeezerUserAccessToken;
                err = DeezerApi.dz_connect_set_access_token(_dzConnect, null, IntPtr.Zero, token);
                DeezerApi.HandleDzErrorCode("dz_connect_set_access_token", err);

                err = DeezerApi.dz_connect_offline_mode(_dzConnect, null, IntPtr.Zero, false);
                DeezerApi.HandleDzErrorCode("dz_connect_offline_mode", err);

                if (_evtAppUserLoginOK.WaitOne(DZ_OPERATION_TIMEOUT) == false)
                {
                    DeezerApi.HandleDzErrorCode("DeezerRenderer::SetupConfig", dz_error_t.DZ_ERROR_CONNECT_SESSION_LOGIN_FAILED);
                }

                _connected = true;
            }
        }
        public static extern dz_error_t dz_player_set_render_progress_cb(IntPtr self,

                                                                         [MarshalAs(UnmanagedType.FunctionPtr)]
                                                                         dz_player_onrenderprogress_cb cb,

                                                                         UInt64 refresh_us);