public sp_error CreateSession() { if (ActiveSession()) throw new InvalidOperationException("There can only be one instance of the Spotify service."); _cacheLocation = "tmp"; _settingsLocation = "tmp"; IntPtr appKeyHandle = Marshal.AllocHGlobal(SpotifyAppKey.ApplicationKey.Length); Marshal.Copy(SpotifyAppKey.ApplicationKey, 0, appKeyHandle, SpotifyAppKey.ApplicationKey.Length); _notifyMainThreadCallback = NotifyMainThreadCallback; _loginCallback = LoginCallback; _searchCallback = SearchCallback; _sessionCallbacks.notify_main_thread = Marshal.GetFunctionPointerForDelegate(_notifyMainThreadCallback); _sessionCallbacks.connection_error = Marshal.GetFunctionPointerForDelegate(new connection_error(ConnectionErrorCallback)); _sessionCallbacks.logged_in = Marshal.GetFunctionPointerForDelegate(_loginCallback); IntPtr sessionCallbacksPtr = Marshal.AllocHGlobal(Marshal.SizeOf(_sessionCallbacks)); Marshal.StructureToPtr(_sessionCallbacks, sessionCallbacksPtr, true); _sessionConfig = new sp_session_config { api_version = SpotifyApiVersion, cache_location = _cacheLocation, settings_location = _cacheLocation, application_key = appKeyHandle, application_key_size = SpotifyAppKey.ApplicationKey.Length, user_agent = UserAgent, callbacks = sessionCallbacksPtr, userdata = IntPtr.Zero, compress_playlists = false, dont_save_metadata_for_playlists = true, initially_unload_playlists = true }; var error = sp_session_create(ref _sessionConfig, out _sessionHandle); if (error == sp_error.SP_ERROR_OK) Debug.WriteLine("Session successfully created."); else Debug.WriteLine("Session creation failed with error {0}", error); return error; }
public static extern sp_error sp_session_create(ref sp_session_config config, out IntPtr sessionHandle);