a/sc2src/sc2mpd.cpp b/sc2src/sc2mpd.cpp
...
...
109
using namespace OpenHome;
109
using namespace OpenHome;
110
using namespace OpenHome::Net;
110
using namespace OpenHome::Net;
111
using namespace OpenHome::TestFramework;
111
using namespace OpenHome::TestFramework;
112
using namespace OpenHome::Av;
112
using namespace OpenHome::Av;
113
113
114
115
class OhmReceiverDriver : public IOhmReceiverDriver, public IOhmMsgProcessor {
114
class OhmReceiverDriver : public IOhmReceiverDriver, public IOhmMsgProcessor {
116
public:
115
public:
117
    OhmReceiverDriver(AudioEater* eater, AudioEater::Context *ctxt);
116
    OhmReceiverDriver(AudioEater* eater, AudioEater::Context *ctxt);
118
117
119
private:
118
private:
...
...
456
}
455
}
457
#endif
456
#endif
458
457
459
#define SOCK_PATH "/tmp/sc2mpd.sock"
458
#define SOCK_PATH "/tmp/sc2mpd.sock"
460
#define BUF_SIZE 16
459
#define BUF_SIZE 16
461
void HandleUserCmd(OhmReceiver* receiver, const Brx& aUri)
460
void HandleUserCmd(OhmReceiver* receiver, AudioEater* audio, const Brx& aUri)
462
{
461
{
463
    struct sockaddr_un server_addr, client_addr;
462
    struct sockaddr_un server_addr, client_addr;
464
    struct timeval read_timeout;
463
    struct timeval read_timeout;
465
    socklen_t len;
464
    socklen_t len;
466
    ssize_t num_bytes;
465
    ssize_t num_bytes;
...
...
519
                            string(buf, num_bytes) << endl);
518
                            string(buf, num_bytes) << endl);
520
            if (strncmp("play", buf, num_bytes) == 0)
519
            if (strncmp("play", buf, num_bytes) == 0)
521
                receiver->Play(aUri);
520
                receiver->Play(aUri);
522
            else if (strncmp("stop", buf, num_bytes) == 0)
521
            else if (strncmp("stop", buf, num_bytes) == 0)
523
                receiver->Stop();
522
                receiver->Stop();
524
523
            else if (strncmp("state", buf, num_bytes) == 0) {
524
                response = "Unknown";
525
                if (audio->state) {
526
                    switch (audio->state()) {
527
                        case AudioEater::AudioState::STOPPED:
528
                            response = "Stopped"; break;
529
                        case AudioEater::AudioState::PLAYING:
530
                            response = "Playing"; break;
531
                        case AudioEater::AudioState::UNKNOWN:
532
                            break;
533
                    }
534
                }
535
            }
525
            ssize_t bytes_sent = sendto(sockfd, (const void *)response.c_str(),
536
            ssize_t bytes_sent = sendto(sockfd, (const void *)response.c_str(),
526
                                        response.length(), 0,
537
                                        response.length(), 0,
527
                                        (struct sockaddr *)&client_addr, len);
538
                                        (struct sockaddr *)&client_addr, len);
528
            if (bytes_sent == -1) {
539
            if (bytes_sent == -1) {
529
                LOGERR("Error: Cannot write to socket: " <<
540
                LOGERR("Error: Cannot write to socket: " <<
...
...
634
645
635
    LOGINF("scmpdcli: using subnet " << (subnet & 0xff) << "." << 
646
    LOGINF("scmpdcli: using subnet " << (subnet & 0xff) << "." << 
636
           ((subnet >> 8) & 0xff) << "." << ((subnet >> 16) & 0xff) << "." <<
647
           ((subnet >> 8) & 0xff) << "." << ((subnet >> 16) & 0xff) << "." <<
637
           ((subnet >> 24) & 0xff) << endl);
648
           ((subnet >> 24) & 0xff) << endl);
638
649
639
    OhmReceiverDriver* driver = 
650
    AudioEater* eater = optionDevice.Value() ?
640
        new OhmReceiverDriver(optionDevice.Value() ? 
641
                              &alsaAudioEater : &httpAudioEater, ctxt);
651
                          &alsaAudioEater : &httpAudioEater;
652
653
    OhmReceiverDriver* driver = new OhmReceiverDriver(eater, ctxt);
642
654
643
    OhmReceiver* receiver = new OhmReceiver(lib->Env(), adapter, ttl, *driver);
655
    OhmReceiver* receiver = new OhmReceiver(lib->Env(), adapter, ttl, *driver);
644
656
645
    CpStack* cpStack = lib->StartCp(subnet);
657
    CpStack* cpStack = lib->StartCp(subnet);
646
    cpStack = cpStack; // avoid unused variable warning
658
    cpStack = cpStack; // avoid unused variable warning
...
...
670
        if (optionDevice.Value()) {
682
        if (optionDevice.Value()) {
671
            startWatcher(config);
683
            startWatcher(config);
672
        }
684
        }
673
        receiver->Play(uri);
685
        receiver->Play(uri);
674
        for (;;) {
686
        for (;;) {
675
            HandleUserCmd(receiver, uri);
687
            HandleUserCmd(receiver, eater, uri);
676
            if (g_quitrequest) {
688
            if (g_quitrequest) {
677
                LOGDEB("Quit requested\n");
689
                LOGDEB("Quit requested\n");
678
                break;
690
                break;
679
            }
691
            }
680
            sleep(1000);
692
            sleep(1000);