public ERRORS Start(PlayerOnEventCb eventcb) { ERRORS ret; ret = dz_player_activate(libcPlayerHndl, new IntPtr(this.GetHashCode())); Console.WriteLine($"dz_player_activate result: {ret}"); this.eventcb = delegate(PLAYER * libcPlayer, PLAYER_EVENT *libcPlayerEvent, IntPtr userdata) { Player player = (Player)refKeeper[userdata]; PlayerEvent playerEvent = PlayerEvent.newFromLibcEvent(libcPlayerEvent); STREAMING_MODE streamingMode; int idx; var result = dz_player_event_get_queuelist_context(libcPlayerEvent, &streamingMode, &idx); if (!result) { streamingMode = STREAMING_MODE.DZ_STREAMING_MODE_ONDEMAND; idx = DZ_INDEX_IN_QUEUELIST_INVALID; } if (playerEvent.eventType == PLAYER_EVENT_TYPE.DZ_PLAYER_EVENT_QUEUELIST_TRACK_SELECTED) { bool isPreview; bool canPauseUnPause; bool canSeek; int numberSkipAllowed; isPreview = dz_player_event_track_selected_is_preview(libcPlayerEvent); var ok = dz_player_event_track_selected_rights(libcPlayerEvent, &canPauseUnPause, &canSeek, &numberSkipAllowed); var songIntPtr = dz_player_event_track_selected_dzapiinfo(libcPlayerEvent); var nextIntPtr = dz_player_event_track_selected_next_track_dzapiinfo(libcPlayerEvent); var currentSongStr = NativeMethods.StringFromNativeUtf8(songIntPtr); var nextSongStr = NativeMethods.StringFromNativeUtf8(nextIntPtr); CurrentSong = JsonConvert.DeserializeObject <Song>(currentSongStr); OnSongChanged(CurrentSong); IsPlaying = true; } else if (playerEvent.eventType == PLAYER_EVENT_TYPE.DZ_PLAYER_EVENT_QUEUELIST_LOADED && CurrentStation.IndexOf("playlist", StringComparison.OrdinalIgnoreCase) >= 0) { Next(); Console.WriteLine("Next song - plalist"); } eventcb.Invoke(player, playerEvent); }; ret = dz_player_set_event_cb(libcPlayerHndl, this.eventcb); Console.WriteLine($"dz_player_set_event_cb result: {ret}"); return(ret); }
static extern unsafe ERRORS dz_player_set_event_cb(PLAYER *lpcc, libcPlayerOnEventCb cb);
static extern unsafe ERRORS dz_player_cache_next(PLAYER *lpcc, libcPlayerOnEventCb cb, IntPtr userData, string trackUrl);
static extern unsafe ERRORS dz_player_play_audioads(PLAYER *lpcc, libcPlayerOnEventCb cb, IntPtr operation_userdata);
static extern unsafe ERRORS dz_player_load_radio(PLAYER *lpcc, libcPlayerOnEventCb cb, IntPtr userData, string radioType, string radioId);