fixed some state change muckery

This commit is contained in:
Don Archer 2016-08-04 22:42:51 -07:00
parent d1172c8843
commit 06b03558e6
3 changed files with 17 additions and 40 deletions

View File

@ -17,7 +17,7 @@ namespace KaraokePlayer.Classes
AuthSecret = ConfigurationManager.AppSettings["Firebase.Secret"], AuthSecret = ConfigurationManager.AppSettings["Firebase.Secret"],
BasePath = ConfigurationManager.AppSettings["Firebase.Path"] BasePath = ConfigurationManager.AppSettings["Firebase.Path"]
}; };
private string _state = "playing"; private PlayerState _state = PlayerState.playing;
private IFirebaseClient _client; private IFirebaseClient _client;
private ControllerStateChangedEventHandler _stateChanged; private ControllerStateChangedEventHandler _stateChanged;
private ControllerSongChangedEventHandler _songChanged; private ControllerSongChangedEventHandler _songChanged;
@ -36,7 +36,8 @@ namespace KaraokePlayer.Classes
public void SetState(PlayerState state) public void SetState(PlayerState state)
{ {
Update(string.Format("controllers/{0}", this.Id), new { state = _state }); _state = state;
_client.Set(StatePath, "playing");
} }
public FirebaseController(string clientId, ControllerStateChangedEventHandler stateChanged, ControllerSongChangedEventHandler songChanged) public FirebaseController(string clientId, ControllerStateChangedEventHandler stateChanged, ControllerSongChangedEventHandler songChanged)
@ -47,14 +48,7 @@ namespace KaraokePlayer.Classes
_client = new FirebaseClient(config); _client = new FirebaseClient(config);
SetupListener(); SetupListener();
} }
public void PlaySong(Song song) { Update(string.Format("Controllers/{0}", this.Id), new { CurrentSong = song }); }
private void Delete(string path) { _client.DeleteAsync(path); }
private void Update(string path, object data) { _client.UpdateAsync(path, data); }
private async void SetupListener() private async void SetupListener()
{ {
await _client.OnAsync(CurrentSongPath, await _client.OnAsync(CurrentSongPath,
@ -77,7 +71,8 @@ namespace KaraokePlayer.Classes
changed: (s, args, obj) => changed: (s, args, obj) =>
{ {
Console.WriteLine("state changed " + args.Data); Console.WriteLine("state changed " + args.Data);
StateDidChange(args.Data); PlayerState newstate = (PlayerState)Enum.Parse(typeof(PlayerState), args.Data);
StateDidChange(newstate);
}, },
removed: null removed: null
); );
@ -94,23 +89,11 @@ namespace KaraokePlayer.Classes
} }
} }
private void StateDidChange(string state) private void StateDidChange(PlayerState newstate)
{ {
if (state == _state) return; if (newstate == _state) return;
_state = state; _state = newstate;
switch(state) _stateChanged(new ControllerStateChangedEventArgs(newstate));
{
case "paused":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Paused));
break;
case "stopped":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Stopped));
break;
case "playing":
_stateChanged(new ControllerStateChangedEventArgs(PlayerState.Playing));
break;
}
} }
} }
} }

View File

@ -8,8 +8,8 @@ namespace Herse.Models
{ {
public enum PlayerState public enum PlayerState
{ {
Playing, playing,
Stopped, stopped,
Paused paused
} }
} }

View File

@ -37,13 +37,13 @@ namespace KaraokePlayer
{ {
switch (args.State) switch (args.State)
{ {
case PlayerState.Playing: case PlayerState.playing:
this.Invoke(new Action(() => { player.play(); })); this.Invoke(new Action(() => { player.play(); }));
break; break;
case PlayerState.Paused: case PlayerState.paused:
this.Invoke(new Action(() => { player.pause(); })); this.Invoke(new Action(() => { player.pause(); }));
break; break;
case PlayerState.Stopped: case PlayerState.stopped:
this.Invoke(new Action(() => { player.stop(); })); this.Invoke(new Action(() => { player.stop(); }));
break; break;
} }
@ -62,14 +62,8 @@ namespace KaraokePlayer
songInfoForm.Show(); songInfoForm.Show();
await Task.Delay(TimeSpan.FromSeconds(5)); await Task.Delay(TimeSpan.FromSeconds(5));
player.play(); player.play();
controller.SetState(PlayerState.Playing); controller.SetState(PlayerState.playing);
songInfoForm.Hide(); songInfoForm.Hide();
} }
} }
} }