#include #include #include #include #include #include #include #include // eServiceFactoryMP3 eServiceFactoryMP3::eServiceFactoryMP3(): ref(0) { ePtr sc; eServiceCenter::getInstance(sc); if (sc) sc->addServiceFactory(eServiceFactoryMP3::id, this); } eServiceFactoryMP3::~eServiceFactoryMP3() { ePtr sc; eServiceCenter::getInstance(sc); if (sc) sc->removeServiceFactory(eServiceFactoryMP3::id); } DEFINE_REF(eServiceFactoryMP3) // iServiceHandler RESULT eServiceFactoryMP3::play(const eServiceReference &ref, ePtr &ptr) { // check resources... ptr = new eServiceMP3(ref.path.c_str()); return 0; } RESULT eServiceFactoryMP3::record(const eServiceReference &ref, ePtr &ptr) { ptr=0; return -1; } RESULT eServiceFactoryMP3::list(const eServiceReference &, ePtr &ptr) { ptr=0; return -1; } // eServiceMP3 void eServiceMP3::test_end() { eDebug("end of mp3!"); stop(); } eServiceMP3::eServiceMP3(const char *filename): ref(0), filename(filename), test(eApp) { m_state = stIdle; eDebug("SERVICEMP3 construct!"); } eServiceMP3::~eServiceMP3() { eDebug("SERVICEMP3 destruct!"); if (m_state == stRunning) stop(); } DEFINE_REF(eServiceMP3); RESULT eServiceMP3::connectEvent(const Slot2 &event, ePtr &connection) { connection = new eConnection(this, m_event.connect(event)); return 0; } RESULT eServiceMP3::start() { assert(m_state == stIdle); m_state = stRunning; printf("mp3 starts\n"); printf("MP3: %s start\n", filename.c_str()); test.start(1000, 1); CONNECT(test.timeout, eServiceMP3::test_end); m_event(this, evStart); return 0; } RESULT eServiceMP3::stop() { assert(m_state != stIdle); if (m_state == stStopped) return -1; test.stop(); printf("MP3: %s stop\n", filename.c_str()); m_state = stStopped; m_event(this, evEnd); return 0; } RESULT eServiceMP3::getIPausableService(ePtr &ptr) { ptr=this; return 0; } // iPausableService RESULT eServiceMP3::pause() { printf("mp3 pauses!\n"); return 0; } RESULT eServiceMP3::unpause() { printf("mp3 unpauses!\n"); return 0; } RESULT eServiceMP3::getIServiceInformation(ePtr&i) { i = this; return 0; } RESULT eServiceMP3::getName(eString &name) { name = "MP3 File: " + filename; return 0; } eAutoInitPtr init_eServiceFactoryMP3(eAutoInitNumbers::service+1, "eServiceFactoryMP3");