Skip to content

Commit 4231d17

Browse files
committed
Added ability to display the song title and artist on the client.
1 parent ac3fc48 commit 4231d17

File tree

8 files changed

+65
-65
lines changed

8 files changed

+65
-65
lines changed

Client/src/main/java/controllers/networking/streaming/music/TCPMusicStreamingService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ private void listen() {
132132
PlayCommand command = (PlayCommand) receivedObject;
133133
this.cache.writeData(command.data);
134134
this.setCurrentServiceStatus(ServiceStatus.READY);
135-
this.onPlayCommandReceived();
135+
this.onPlayCommandReceived(command.songTitle, command.artist);
136136
}
137137
else if(receivedObject instanceof StopCommand) {
138138
System.out.println("Received StopCommand");
@@ -314,8 +314,8 @@ private void onServiceStatusChanged() {
314314
}
315315
}
316316

317-
private void onPlayCommandReceived() {
318-
this.playCommandListeners.forEach(OnPlay::play);
317+
private void onPlayCommandReceived(String songTitle, String artist) {
318+
this.playCommandListeners.forEach(onPlay -> onPlay.play(songTitle, artist));
319319
}
320320

321321
private void onStopCommandReceived() {
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package controllers.networking.streaming.music.callback;
22

3+
import models.networking.dtos.PlayCommand;
4+
35
/**
46
* Created by Esteban Luchsinger on 17.03.2016.
57
* Tells that the song should be played.
68
*/
79
@FunctionalInterface
810
public interface OnPlay {
9-
void play();
11+
void play(String songTitle, String artist);
1012
}

Client/src/main/java/viewmodels/ClientWindowViewModel.java

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ public class ClientWindowViewModel {
2828

2929
@FXML
3030
private Label labelStatus;
31-
3231
@FXML
33-
private StackedAreaChart<Number, Number> statisticsChart;
32+
private Label labelSongTitle;
33+
@FXML
34+
private Label labelArtist;
35+
3436
private Stage stage;
3537

3638
private MediaPlayer mediaPlayer;
@@ -50,7 +52,6 @@ public ClientWindowViewModel() throws IOException {
5052
protected void initialize() throws IOException {
5153
this.initializeStreamingService();
5254
this.initializeDiscoveryService();
53-
this.initializeStatistics();
5455
}
5556

5657
/**
@@ -74,6 +75,9 @@ public void setStage(Stage stage) {
7475
}
7576
}
7677

78+
/**
79+
* Starts playing the song in the cache.
80+
*/
7781
private void startPlaying() {
7882
this.stopPlaying();
7983

@@ -84,11 +88,17 @@ private void startPlaying() {
8488
System.out.println("Playing!");
8589
}
8690

91+
/**
92+
* Stops playing.
93+
*/
8794
private void stopPlaying() {
8895

8996
if(this.mediaPlayer != null){
9097
this.mediaPlayer.stop();
9198
this.mediaPlayer = null;
99+
this.labelSongTitle.setText("");
100+
this.labelArtist.setText("");
101+
this.labelStatus.setText("STOPPED");
92102
System.out.println("Stopped!");
93103
}
94104
}
@@ -98,16 +108,19 @@ private void initializeStreamingService() {
98108

99109
System.out.print("Starting Streaming Service... ");
100110

101-
this.musicStreamingService.addServiceStatusChangedListener(newStatus -> {
102-
System.out.println("New Status: " + newStatus.name());
103-
Platform.runLater(() -> {
104-
this.labelStatus.setText(newStatus.name());
105-
this.lastStatus = newStatus;
106-
});
107-
});
111+
// Handle onStatusChanged
112+
this.musicStreamingService.addServiceStatusChangedListener(newStatus -> System.out.println("New Status: " + newStatus.name()));
113+
114+
// Handle onPlay message.
115+
this.musicStreamingService.addOnPlayListener((songTitle, artist) -> Platform.runLater(() -> {
116+
this.labelSongTitle.setText(songTitle);
117+
this.labelArtist.setText(artist);
118+
this.labelStatus.setText("PLAYING");
119+
this.startPlaying();
120+
}));
108121

109-
this.musicStreamingService.addOnPlayListener(this::startPlaying);
110-
this.musicStreamingService.addOnStopListener(this::stopPlaying);
122+
// Handle onStop
123+
this.musicStreamingService.addOnStopListener(() -> Platform.runLater(this::stopPlaying));
111124

112125
System.out.println("Check!");
113126
}
@@ -127,29 +140,5 @@ private void initializeDiscoveryService() {
127140
System.out.println("Check!");
128141
}
129142

130-
private void initializeStatistics() {
131-
132-
// IF UDP: Use packets for statistics (0-100%).
133-
if(this.musicStreamingService instanceof UDPMusicStreamingService) {
134-
System.out.println("Statistics Mode: UDP");
135-
NumberAxis axis = ((NumberAxis)this.statisticsChart.getYAxis());
136-
axis.setAutoRanging(false);
137-
axis.setUpperBound(100);
138-
axis.setTickUnit(20);
139-
140-
axis.setLabel("Empfangene Packete (%)");
141-
}
142-
143-
// IF TCP: Use bytes for statistics (0-x%) --> Open upper-bound.
144-
if(this.musicStreamingService instanceof TCPMusicStreamingService) {
145-
System.out.println("Statistics Mode: TCP");
146-
147-
this.statisticsChart.getYAxis().setLabel("Empfangene Bytes (Total)");
148-
}
149-
150-
this.statisticsChart.setData(NetworkStatisticsController.getInstance().getStatisticsList());
151-
152-
}
153-
154143
//endregion
155144
}

Client/src/main/resources/views/ClientWindow.fxml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

3-
<?import javafx.scene.chart.NumberAxis?>
4-
<?import javafx.scene.chart.StackedAreaChart?>
53
<?import javafx.scene.control.Label?>
64
<?import javafx.scene.layout.BorderPane?>
75
<?import javafx.scene.layout.HBox?>
6+
<?import javafx.scene.layout.VBox?>
87
<?import javafx.scene.text.Font?>
98

109
<BorderPane minHeight="400.0" minWidth="600.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1" fx:controller="viewmodels.ClientWindowViewModel">
@@ -27,14 +26,20 @@
2726
</HBox>
2827
</top>
2928
<center>
30-
<StackedAreaChart fx:id="statisticsChart" title="Streaming Statistik" visible="false" BorderPane.alignment="CENTER">
31-
<xAxis>
32-
<NumberAxis label="Zeit (Sekunden)" side="BOTTOM" />
33-
</xAxis>
34-
<yAxis>
35-
<NumberAxis lowerBound="0" side="LEFT" />
36-
</yAxis>
37-
</StackedAreaChart>
29+
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
30+
<children>
31+
<Label fx:id="labelSongTitle" alignment="CENTER">
32+
<font>
33+
<Font name="Calibri" size="42.0" />
34+
</font>
35+
</Label>
36+
<Label fx:id="labelArtist" alignment="CENTER">
37+
<font>
38+
<Font name="Calibri" size="42.0" />
39+
</font>
40+
</Label>
41+
</children>
42+
</VBox>
3843
</center>
3944
</BorderPane>
4045
</center>

Server/src/main/java/controllers/networking/discovery/DiscoveryService.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,6 @@ private void discover() {
221221

222222

223223
this.checkExpiredClients();
224-
// KeepAliveTask keepAliveTask = new KeepAliveTask(Clients.getInstance().getClients(), CLIENT_TIMEOUT, LocalDateTime.now());
225-
// keepAliveTask.run();
226-
// List<Client> expiredClients = keepAliveTask.get();
227-
//
228-
// if(expiredClients.size() > 0) {
229-
// System.out.println(expiredClients.size() + " expired clients...");
230-
// this.expiredClient(expiredClients);
231-
// }
232-
233224
}
234225
catch(NullPointerException nullPointerException){
235226
Logger.getLogger(this.getClass().getName())

Server/src/main/java/controllers/networking/streaming/music/TCPMusicStreamController.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,14 @@ public void play(Song song) {
7070
try {
7171
byte[] data = this.getSongData(song);
7272

73+
String songTitle = song.getTitle();
74+
String artist = song.getArtist();
75+
7376
// Sync connections list for the iteration.
7477
synchronized (this.connections) {
7578
for(NetworkClient client: this.connections) {
7679
client.getOutputStream()
77-
.writeObject(new PlayCommand(data));
80+
.writeObject(new PlayCommand(songTitle, artist, data));
7881
}
7982
}
8083
}

Server/src/main/java/viewmodels/MainWindowViewModel.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,12 @@ private void initializeDiscoveryService() {
236236
});
237237

238238
// Expired clients
239-
this.discoveryService.addClientExpiredListener(client -> {
240-
Platform.runLater(() -> {
239+
this.discoveryService.addClientExpiredListener(client ->
240+
Platform.runLater(() -> {
241241
if(this.clientObservableList.remove(client)) {
242242
System.out.println("Expired client (" + client.toString() + ")");
243243
}
244-
});
245-
});
244+
}));
246245

247246
System.out.println("Starting discovery Service...");
248247
this.discoveryService.start();

Shared/src/main/java/models/networking/dtos/PlayCommand.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,20 @@
99
public class PlayCommand implements Serializable {
1010
private static final long serialVersionUID = -3809733967947659045L;
1111

12+
public String songTitle;
13+
public String artist;
1214
public byte[] data;
1315

14-
public PlayCommand(byte[] data) {
16+
17+
18+
public PlayCommand(byte[] data) { this("", "", data); }
19+
20+
public PlayCommand(String songTitle, byte[] data) { this(songTitle, "", data); }
21+
22+
public PlayCommand(String songTitle, String artist, byte[] data) {
23+
24+
this.songTitle = songTitle;
25+
this.artist = artist;
1526
this.data = data;
1627
}
1728
}

0 commit comments

Comments
 (0)