// Path: src/main/java/com/shuffle/scplayer/core/AuthenticationListener.java
// public interface AuthenticationListener {
// 	void onLoggedIn(String username);
// 
// 	void onLoggedOut(String username);
// 
// 	void onNewCredentials(String username, String blob);
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/PlayerListener.java
// public interface PlayerListener {
//     void onPlay();
// 
//     void onPause();
// 
//     void onSeek(int millis);
// 
//     void onTrackChanged(Track track);
// 
//     void onNextTrack(Track track);
// 
//     void onPreviousTrack(Track track);
// 
//     void onShuffle(boolean enabled);
// 
//     void onRepeat(boolean enabled);
// 
//     void onActive();
// 
//     void onInactive();
// 
//     void onTokenLost();
// 
//     void onVolumeChanged(int volume);
//     
//     void onPlayerNameChanged(String playerName);
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/SpotifyConnectPlayer.java
// public interface SpotifyConnectPlayer {
//     Track getPlayingTrack();
// 
//     boolean getShuffle();
// 
//     boolean getRepeat();
// 
//     int getVolume();
// 
//     int getSeek();
// 
//     String getAlbumCoverURL();
// 
//     boolean isPlaying();
// 
//     String getPlayerName();
// 
//     void setPlayerName(String playerName);
// 
//     void play();
// 
//     void pause();
// 
//     void prev();
// 
//     void next();
// 
//     void seek(int millis);
// 
//     void shuffle(boolean enabled);
// 
//     void repeat(boolean enabled);
// 
//     void volume(int volume);
// 
//     void login(String username, String password);
// 
//     void loginBlob(String username, String blob);
// 
//     String getUsername();
// 
//     void logout();
// 
//     boolean isLoggedIn();
// 
//     boolean isActive();
// 
//     void close();
// 
//     void addPlayerListener(PlayerListener playerListener);
// 
//     void removePlayerListener(PlayerListener playerListener);
// 
//     AudioListener getAudioListener();
// 
//     void setAudioListener(AudioListener audioListener);
// 
//     Mixer.Info getMixer();
// 
//     void setMixer(Mixer.Info mixer);
// 
//     void addAuthenticationListener(AuthenticationListener authenticationListener);
// 
//     void removeAuthenticationListener(AuthenticationListener authenticationListener);
// 
//     String getDeviceId();
// 
//     void setBitrate(int bitrate);
// 
//     int getBitrate();
// 
//     // zeroconf
//     SpotifyZeroConfVars getZeroConfVars();
// 
//     void loginZeroconf(String username, String blob, String clientKey);
// 
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/Track.java
// public class Track {
// 	private String name;
// 	private String uri;
// 	private int duration;
// 	private String artist;
// 	private String artistUri;
// 	private String album;
// 	private String albumUri;
// 	private String coverUri;
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public String getUri() {
// 		return uri;
// 	}
// 
// 	public void setUri(String uri) {
// 		this.uri = uri;
// 	}
// 
// 	public int getDuration() {
// 		return duration;
// 	}
// 
// 	public void setDuration(int duration) {
// 		this.duration = duration;
// 	}
// 
// 	public String getArtist() {
// 		return artist;
// 	}
// 
// 	public void setArtist(String artist) {
// 		this.artist = artist;
// 	}
// 
// 	public String getArtistUri() {
// 		return artistUri;
// 	}
// 
// 	public void setArtistUri(String artistUri) {
// 		this.artistUri = artistUri;
// 	}
// 
// 	public String getAlbum() {
// 		return album;
// 	}
// 
// 	public void setAlbum(String album) {
// 		this.album = album;
// 	}
// 
// 	public String getAlbumUri() {
// 		return albumUri;
// 	}
// 
// 	public void setAlbumUri(String albumUri) {
// 		this.albumUri = albumUri;
// 	}
// 
// 	public String getCoverUri() {
// 		return coverUri;
// 	}
// 
// 	public void setCoverUri(String coverUri) {
// 		this.coverUri = coverUri;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Track [name=" + name + ", uri=" + uri + ", duration=" + duration + ", artist=" + artist + ", artistUri="
// 				+ artistUri + ", album=" + album + ", albumUri=" + albumUri + ", coverUri=" + coverUri + "]";
// 	}
// }


import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.shuffle.scplayer.core.AuthenticationListener;
import com.shuffle.scplayer.core.PlayerListener;
import com.shuffle.scplayer.core.SpotifyConnectPlayer;
import com.shuffle.scplayer.core.Track;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.util.Map;
package com.shuffle.scplayer.web;



public class PlayerWebServerIntegration implements PlayerListener, AuthenticationListener {

    private static final transient Log log = LogFactory.getLog(PlayerWebServerIntegration.class);

    private WebServer webServer;

    private final transient Gson gson = new GsonBuilder().create();
    
    public PlayerWebServerIntegration(final SpotifyConnectPlayer spotifyConnectPlayer) {
    	this(spotifyConnectPlayer, 4000);
    }

// Path: src/main/java/com/shuffle/scplayer/core/AuthenticationListener.java
// public interface AuthenticationListener {
// 	void onLoggedIn(String username);
// 
// 	void onLoggedOut(String username);
// 
// 	void onNewCredentials(String username, String blob);
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/PlayerListener.java
// public interface PlayerListener {
//     void onPlay();
// 
//     void onPause();
// 
//     void onSeek(int millis);
// 
//     void onTrackChanged(Track track);
// 
//     void onNextTrack(Track track);
// 
//     void onPreviousTrack(Track track);
// 
//     void onShuffle(boolean enabled);
// 
//     void onRepeat(boolean enabled);
// 
//     void onActive();
// 
//     void onInactive();
// 
//     void onTokenLost();
// 
//     void onVolumeChanged(int volume);
//     
//     void onPlayerNameChanged(String playerName);
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/SpotifyConnectPlayer.java
// public interface SpotifyConnectPlayer {
//     Track getPlayingTrack();
// 
//     boolean getShuffle();
// 
//     boolean getRepeat();
// 
//     int getVolume();
// 
//     int getSeek();
// 
//     String getAlbumCoverURL();
// 
//     boolean isPlaying();
// 
//     String getPlayerName();
// 
//     void setPlayerName(String playerName);
// 
//     void play();
// 
//     void pause();
// 
//     void prev();
// 
//     void next();
// 
//     void seek(int millis);
// 
//     void shuffle(boolean enabled);
// 
//     void repeat(boolean enabled);
// 
//     void volume(int volume);
// 
//     void login(String username, String password);
// 
//     void loginBlob(String username, String blob);
// 
//     String getUsername();
// 
//     void logout();
// 
//     boolean isLoggedIn();
// 
//     boolean isActive();
// 
//     void close();
// 
//     void addPlayerListener(PlayerListener playerListener);
// 
//     void removePlayerListener(PlayerListener playerListener);
// 
//     AudioListener getAudioListener();
// 
//     void setAudioListener(AudioListener audioListener);
// 
//     Mixer.Info getMixer();
// 
//     void setMixer(Mixer.Info mixer);
// 
//     void addAuthenticationListener(AuthenticationListener authenticationListener);
// 
//     void removeAuthenticationListener(AuthenticationListener authenticationListener);
// 
//     String getDeviceId();
// 
//     void setBitrate(int bitrate);
// 
//     int getBitrate();
// 
//     // zeroconf
//     SpotifyZeroConfVars getZeroConfVars();
// 
//     void loginZeroconf(String username, String blob, String clientKey);
// 
// }
// 
// Path: src/main/java/com/shuffle/scplayer/core/Track.java
// public class Track {
// 	private String name;
// 	private String uri;
// 	private int duration;
// 	private String artist;
// 	private String artistUri;
// 	private String album;
// 	private String albumUri;
// 	private String coverUri;
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public String getUri() {
// 		return uri;
// 	}
// 
// 	public void setUri(String uri) {
// 		this.uri = uri;
// 	}
// 
// 	public int getDuration() {
// 		return duration;
// 	}
// 
// 	public void setDuration(int duration) {
// 		this.duration = duration;
// 	}
// 
// 	public String getArtist() {
// 		return artist;
// 	}
// 
// 	public void setArtist(String artist) {
// 		this.artist = artist;
// 	}
// 
// 	public String getArtistUri() {
// 		return artistUri;
// 	}
// 
// 	public void setArtistUri(String artistUri) {
// 		this.artistUri = artistUri;
// 	}
// 
// 	public String getAlbum() {
// 		return album;
// 	}
// 
// 	public void setAlbum(String album) {
// 		this.album = album;
// 	}
// 
// 	public String getAlbumUri() {
// 		return albumUri;
// 	}
// 
// 	public void setAlbumUri(String albumUri) {
// 		this.albumUri = albumUri;
// 	}
// 
// 	public String getCoverUri() {
// 		return coverUri;
// 	}
// 
// 	public void setCoverUri(String coverUri) {
// 		this.coverUri = coverUri;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Track [name=" + name + ", uri=" + uri + ", duration=" + duration + ", artist=" + artist + ", artistUri="
// 				+ artistUri + ", album=" + album + ", albumUri=" + albumUri + ", coverUri=" + coverUri + "]";
// 	}
// }


// Path: src/main/java/com/shuffle/scplayer/web/PlayerWebServerIntegration.java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.shuffle.scplayer.core.AuthenticationListener;
import com.shuffle.scplayer.core.PlayerListener;
import com.shuffle.scplayer.core.SpotifyConnectPlayer;
import com.shuffle.scplayer.core.Track;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.util.Map;

package com.shuffle.scplayer.web;



public class PlayerWebServerIntegration implements PlayerListener, AuthenticationListener {

    private static final transient Log log = LogFactory.getLog(PlayerWebServerIntegration.class);

    private WebServer webServer;

    private final transient Gson gson = new GsonBuilder().create();
    
    public PlayerWebServerIntegration(final SpotifyConnectPlayer spotifyConnectPlayer) {
    	this(spotifyConnectPlayer, 4000);
    }

    public PlayerWebServerIntegration(final SpotifyConnectPlayer spotifyConnectPlayer, int port) {