Skip to content
Snippets Groups Projects
Commit 3d0196b3 authored by Ondřej Trojan's avatar Ondřej Trojan
Browse files

frequency of queries, client adjustment

parent 3f03bc46
No related branches found
No related tags found
No related merge requests found
......@@ -108,7 +108,7 @@ public class VlcClient implements RemoteClient {
} else {
msg = "Socket " + ip + ":" + port + " exception";
}
log.error(msg, e.getCause());
// log.error(msg, e.getCause()); TODO UNCOMMENT
closeCurrentConnectAttempt();
return;
} catch (IOException e) {
......@@ -126,7 +126,7 @@ public class VlcClient implements RemoteClient {
try {
received = sendMessage("is_playing", 1, 1);
} catch (SocketTimeoutException | SocketException e) {
log.error("Socket " + ip + ":" + port + " buffer read exited on timeout of " + SOCKET_TIMEOUT, e.getCause());
// log.error("Socket " + ip + ":" + port + " buffer read exited on timeout of " + SOCKET_TIMEOUT, e.getCause());TODO UNCOMMENT
timeoutsCounter.incrementAndGet();
//TODO out of sync
if (timeoutsCounter.get() > SOCKET_TIMEOUT_LIMIT) {
......@@ -175,6 +175,7 @@ public class VlcClient implements RemoteClient {
}
public List<String> sendForPlaylist() {
long start = System.currentTimeMillis();
if (!isConnectionReady()) {
log.warn("Attempt to send to non established connection");
return List.of();
......@@ -192,6 +193,7 @@ public class VlcClient implements RemoteClient {
if (!next.equals(WAITING_COMMAND)) {
log.error("Not received next command character");
}
System.out.println("Send for playlist" + (System.currentTimeMillis() - start));
return resp;
} catch (SocketTimeoutException | SocketException e) {
log.error("Socket " + ip + ":" + port + " buffer read exited on timeout of " + SOCKET_TIMEOUT, e.getCause());
......@@ -241,6 +243,7 @@ public class VlcClient implements RemoteClient {
}
private synchronized List<String> sendMessage(String msg, int expectedLines, int wait) throws IOException {
long start = System.currentTimeMillis();
out.println(msg);
ArrayList<String> resp = new ArrayList<>();
String line = null;
......@@ -253,7 +256,7 @@ public class VlcClient implements RemoteClient {
if (!next.equals(WAITING_COMMAND)) {
log.error("Not received next command character");
}
log.debug("Send " + msg + " received " + Arrays.toString(resp.toArray()));
log.info("Send " + msg + " received in " + (System.currentTimeMillis() - start) + "ms " + Arrays.toString(resp.toArray()));
return resp;
}
......
......@@ -158,6 +158,16 @@ public class ApiVlcController {
"Playlist " + displaySet.getData().getName() + " enqueued", HttpStatus.OK);
}
@PostMapping(value = "/clearenqueueplaylist/{displaySetId}", produces = "application/json")
public ResponseEntity clearenqueuePlaylist(@PathVariable("displaySetId") @OnlyNumbers String displaySetId) {
ResponseData<DisplaySetDto> displaySet = displaySetService.getDisplaySetById(displaySetId);
if (displaySet.getData() == null) return new ResponseEntity<>("Playlist not found", HttpStatus.NOT_FOUND);
controlService.clear();
controlService.enqueuePlaylist(displaySet.getData().getName());
return new ResponseEntity<>(
"Playlist " + displaySet.getData().getName() + " cleared and enqueued", HttpStatus.OK);
}
@PostMapping(value = "/shutdown/{clientId}", produces = "application/json")
public ResponseEntity shutdown(@PathVariable("clientId") String clientId) {
......
......@@ -89,7 +89,6 @@ public class RestApiController {
@ExceptionHandler({ ResponseStatusException.class})
public ResponseEntity<Map<String, Object>> handleException(ResponseStatusException ex) {
System.out.println("Handle ResponseStatusException");
Map<String,Object> ret = new HashMap<>();
ret.put("error", ex.getReason());
ret.put("timestamp", new Timestamp((new Date()).getTime()));
......
......@@ -12,12 +12,13 @@ public class PlayedTrackDto {
private String lengthTimeFormated;
private String displaySet;
private String displayTrack;
private boolean isPlaying;
private int currentTime;
private int length;
private int percentage;
private List<ParsedPlaylistTrack> playlist;
public PlayedTrackDto(String title, String displaySet, String displayTrack, int currentTime, int length, List<ParsedPlaylistTrack> playlist) {
public PlayedTrackDto(String title, String displaySet, String displayTrack, int currentTime, int length, boolean isPlaying, List<ParsedPlaylistTrack> playlist) {
this.title = title;
this.currentTimeFormated = StringUtils.getTimeFromSeconds(currentTime);
this.lengthTimeFormated = StringUtils.getTimeFromSeconds(length);
......@@ -25,6 +26,7 @@ public class PlayedTrackDto {
this.displayTrack = displayTrack;
this.currentTime = currentTime;
this.length = length;
this.isPlaying = isPlaying;
this.playlist = playlist;
this.percentage = Math.round((currentTime * 100f) / length);
}
......@@ -96,4 +98,12 @@ public class PlayedTrackDto {
public void setPlaylist(List<ParsedPlaylistTrack> playlist) {
this.playlist = playlist;
}
public boolean isPlaying() {
return isPlaying;
}
public void setPlaying(boolean playing) {
isPlaying = playing;
}
}
......@@ -4,6 +4,7 @@ public class ParsedPlaylistTrack {
private boolean isRunning;
private int index;
private String name;
private String displayTrackName;
private String displayTrackId;
public ParsedPlaylistTrack(boolean isRunning, int index, String name) {
......@@ -32,4 +33,12 @@ public class ParsedPlaylistTrack {
public void setDisplayTrackId(String displayTrackId) {
this.displayTrackId = displayTrackId;
}
public String getDisplayTrackName() {
return displayTrackName;
}
public void setDisplayTrackName(String displayTrackName) {
this.displayTrackName = displayTrackName;
}
}
......@@ -43,6 +43,9 @@ public class ClientService {
}
private boolean playing = false;
private int prevTime;
private int currentTime;
private String currentTrack = "";
private String currentDisplaySetName = "";
private String currentDisplayTrackId = "";
......@@ -51,7 +54,7 @@ public class ClientService {
private int currentTrackLength = 0;
int connectedClient = Integer.MAX_VALUE;
@Scheduled(fixedRate = 1000)
@Scheduled(fixedRate = 100)
private void maintainCheck() throws InterruptedException {
if (connectedClient == Integer.MAX_VALUE || !controlService.isConnected(connectedClient)) {
//connect
......@@ -68,6 +71,8 @@ public class ClientService {
return;
}
}
currentTime = controlService.getTime(connectedClient);
long end = System.currentTimeMillis();
currentTrack = controlService.getTitle(connectedClient);
if (currentTrack == null || currentTrack.equals("")) {
log.info("No title to parse, title equals empty or null string");
......@@ -100,10 +105,11 @@ public class ClientService {
for (ParsedPlaylistTrack parsedTrack : tracks) {
ResponseData<DisplayTrackDto> displayTrackFromParsed = displayTrackService.getDisplayTrackById(parsedTrack.getName().split("-")[1]);
if (displayTrackFromParsed.getData() == null) {
displayTracks.add(new ParsedPlaylistTrack(parsedTrack.isRunning(),parsedTrack.getIndex(),"unknown displayTrack"));
displayTracks.add(new ParsedPlaylistTrack(parsedTrack.isRunning(), parsedTrack.getIndex(), "unknown displayTrack"));
continue;
}
parsedTrack.setDisplayTrackId(displayTrackFromParsed.getData().getId());
parsedTrack.setDisplayTrackName(displayTrackFromParsed.getData().getName());
displayTracks.add(parsedTrack);
}
currentPlaylistTracks = displayTracks;
......@@ -129,10 +135,13 @@ public class ClientService {
if (currentTrack == null || currentTrack.equals("")) return new ResponseData<>(new PlayedTrackDto("unknown",
"unknown", "unknown", 0,
0, List.of()));
0, playing, List.of()));
// int currentTime = controlService.getTime(connectedClient);
playing = currentTime != prevTime;
prevTime = currentTime;
return new ResponseData<>(new PlayedTrackDto(currentTrack,
currentDisplaySetName, currentDisplayTrackName, controlService.getTime(connectedClient),
currentTrackLength, currentPlaylistTracks));
currentDisplaySetName, currentDisplayTrackName, currentTime,
currentTrackLength, playing, currentPlaylistTracks));
}
......
......@@ -109,7 +109,7 @@ public class ControlService {
String command = "get_time";
List<String> ret = sendCommand(getRemoteClient(clientId), command);
if (ret.isEmpty() || ret.get(0).equals("")) return 0;
return Integer.parseInt(ret.get(0).replace("\\s+", ""));
return Integer.parseInt(ret.get(0).replaceAll("\\s+", ""));
}
public int getLength(int clientId) {
......
......@@ -27,7 +27,7 @@
<dt class="col-sm-3">Playlist</dt>
<ol>
<li th:if="${track.playlist.isEmpty()}">Unknown</li>
<li th:classappend="${playTrack.isRunning()} ? font-weight-bolder : ''" th:text="${playTrack.getName()}" th:each="playTrack : ${track.playlist}" ></li>
<li th:classappend="${playTrack.isRunning()} ? font-weight-bolder : ''" th:text="${playTrack.getDisplayTrackName()}" th:each="playTrack : ${track.playlist}" ></li>
</ol>
</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment