Added base of code to allow sending backend updates to connected clients.

This commit is contained in:
Kevin Whitaker
2017-01-29 17:27:27 -05:00
parent 22f1b90238
commit ab4df84657
8 changed files with 53 additions and 3 deletions

View File

@@ -22,6 +22,9 @@
#include "db/AudioTrack.h"
#include "db/UserAction.h"
#include <Wt/WLogger>
#include <Wt/WServer>
#include <Wt/WApplication>
#include "WebInterface.h"
GroovePlayer::GroovePlayer(std::string dbFile) : sqliteConnection(dbFile)
{
@@ -37,3 +40,14 @@ GroovePlayer::GroovePlayer(std::string dbFile) : sqliteConnection(dbFile)
Wt::log("info") << "Using Existing DB.";
}
}
//TODO:use this code when sending to UI.
// Wt::WServer::instance()->postAll([]() {
// Wt::WApplication* app = Wt::WApplication::instance();
// if(app != nullptr)
// {
// static_cast<WebInterface*>(app)->updateUIFromServer();
// }
// }
// );

View File

@@ -36,6 +36,7 @@ private:
GroovePlayer(std::string dbFile);
Wt::Dbo::backend::Sqlite3 sqliteConnection;
Wt::Dbo::Session sqlSession;
};
#endif // GROOVEPLAYER_H

View File

@@ -33,6 +33,7 @@ WebInterface::WebInterface(const Wt::WEnvironment& env) : Wt::WApplication(env)
{
priv_int = new internal;
setTitle("Arbitrateor - Audio Jukebox");
enableUpdates(true);
priv_int->playerUI = new PlayerInterface(this);
priv_int->playerUI->hide();
priv_int->loginUI = new LoginInterface(this);
@@ -53,5 +54,29 @@ void WebInterface::loginCompleted()
//Login completed, now bring up main inteface.
priv_int->loginUI->animateHide(Wt::WAnimation(Wt::WAnimation::AnimationEffect::Fade));
priv_int->playerUI->animateShow(Wt::WAnimation(Wt::WAnimation::AnimationEffect::Fade, Wt::WAnimation::TimingFunction::EaseIn, 500));
//TODO: set up player to dynamically update?
//TODO: request current player state.
}
void WebInterface::playPauseActionFromServer(User* userPausing)
{
priv_int->playerUI->tempText->setText(priv_int->playerUI->tempText->text()+"play");
triggerUpdate();
}
void WebInterface::songChangedFromServer(AudioTrack* nextTrack)
{
priv_int->playerUI->tempText->setText(priv_int->playerUI->tempText->text()+"change");
triggerUpdate();
}
void WebInterface::skipVotedFromServer(User* userRequestingToSkipCurrentTrack)
{
priv_int->playerUI->tempText->setText(priv_int->playerUI->tempText->text()+"skip");
triggerUpdate();
}
void WebInterface::voteUpdateFromServer(User* userVoting, bool forSkip)
{
priv_int->playerUI->tempText->setText(priv_int->playerUI->tempText->text()+"vote");
triggerUpdate();
}

View File

@@ -22,6 +22,8 @@
#include <Wt/WApplication>
#include "GroovePlayer.h"
#include "db/AudioTrack.h"
#include "db/User.h"
class WebInterface : public Wt::WApplication
{
@@ -29,6 +31,10 @@ public:
WebInterface(const Wt::WEnvironment& env);
~WebInterface();
void loginCompleted();
void playPauseActionFromServer(User* userPausing);
void songChangedFromServer(AudioTrack* nextTrack);
void skipVotedFromServer(User* userRequestingToSkipCurrentTrack);
void voteUpdateFromServer(User* userVoting, bool forSkip);
private:
struct internal;
internal* priv_int = 0;

View File

@@ -29,7 +29,7 @@
class UserAction
{
public:
enum UAction {Login = 0, Logout = 1, RequestTrack = 2, VoteTrack = 3, UploadTrack = 4, RequestSkip = 5, Pause = 6};
enum UAction {Login = 0, Logout = 1, RequestTrack = 2, VoteTrack = 3, UploadTrack = 4, RequestSkip = 5, PlayPause = 6};
Wt::Dbo::ptr<User> user;
UAction action;

View File

@@ -17,6 +17,7 @@ int main ( int argc, char** argv )
server.addEntryPoint(Wt::Application, createApplication);
if(server.start())
{
GroovePlayer::getInstance();
int sig = Wt::WServer::waitForShutdown(argv[0]);
server.stop();
}

View File

@@ -23,5 +23,6 @@
PlayerInterface::PlayerInterface(WebInterface* app)
{
this->app = app;
addChild(new Wt::WText("You did it."));
tempText = new Wt::WText("You did it.");
addChild(tempText);
}

View File

@@ -22,12 +22,14 @@
#include <Wt/WContainerWidget>
#include "../WebInterface.h"
#include <Wt/WText>
class PlayerInterface : public Wt::WContainerWidget
{
public:
PlayerInterface(WebInterface* app);
WebInterface* app;
Wt::WText* tempText;
};
#endif // PLAYERINTERFACE_H