public void Execute(IEvent receivedEvent) { if (receivedEvent == null) { throw new ArgumentNullException(nameof(receivedEvent)); } var socketClient = _auth.GetConnection(receivedEvent.ConnectionId); var clientProtocol = socketClient?.ClientProtocolVersion ?? 2.1; if (clientProtocol < 2.2 || !(receivedEvent.Data is JObject data)) { var tracks = _nowPlayingApiAdapter.GetTracksLegacy().ToList(); var message = new SocketMessage(Constants.NowPlayingList, tracks); _hub.Publish(new PluginResponseAvailableEvent(message, receivedEvent.ConnectionId)); } else { var offset = (int)data["offset"]; var limit = (int)data["limit"]; var tracks = _nowPlayingApiAdapter.GetTracks(offset, limit).ToList(); var total = tracks.Count; var realLimit = offset + limit > total ? total - offset : limit; var message = new SocketMessage { Context = Constants.NowPlayingList, Data = new Page <Model.Entities.NowPlayingTrackInfo> { Data = offset > total ? new List <Model.Entities.NowPlayingTrackInfo>() : tracks.GetRange(offset, realLimit), Offset = offset, Limit = limit, Total = total, }, NewLineTerminated = true, }; _hub.Publish(new PluginResponseAvailableEvent(message, receivedEvent.ConnectionId)); } }
public void Execute(IEvent @event) { var socketClient = _auth.GetConnection(@event.ConnectionId); var clientProtocol = socketClient?.ClientProtocolVersion ?? 2.1; var data = @event.Data as JObject; if (clientProtocol < 2.2 || data == null) { var tracks = _nowPlayingApiAdapter.GetTracksLegacy().ToList(); var message = new SocketMessage(Constants.NowPlayingList, tracks); _hub.Publish(new PluginResponseAvailableEvent(message, @event.ConnectionId)); } else { var offset = (int)data["offset"]; var limit = (int)data["limit"]; var tracks = _nowPlayingApiAdapter.GetTracks(offset, limit).ToList(); var total = tracks.Count; var realLimit = offset + limit > total ? total - offset : limit; var message = new SocketMessage { Context = Constants.NowPlayingList, Data = new Page <NowPlaying> { Data = offset > total ? new List <NowPlaying>() : tracks.GetRange(offset, realLimit), Offset = offset, Limit = limit, Total = total }, NewLineTerminated = true }; _hub.Publish(new PluginResponseAvailableEvent(message, @event.ConnectionId)); } }