1 #include <lib/service/service.h>
2 #include <lib/base/init_num.h>
3 #include <lib/base/init.h>
5 eServiceReference::eServiceReference(const eString &string)
7 const char *c=string.c_str();
10 if ( sscanf(c, "%d:%d:%x:%x:%x:%x:%x:%x:%x:%x:%n", &type, &flags, &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7], &pathl) < 8 )
12 memset( data, 0, sizeof(data) );
13 eDebug("find old format eServiceReference string");
14 sscanf(c, "%d:%d:%x:%x:%x:%x:%n", &type, &flags, &data[0], &data[1], &data[2], &data[3], &pathl);
21 eString eServiceReference::toString() const
24 ret+=eString().sprintf("%d:", type);
25 ret+=eString().sprintf("%d", flags);
26 for (unsigned int i=0; i<sizeof(data)/sizeof(*data); ++i)
27 ret+=":"+eString().sprintf("%x", data[i]);
33 eServiceCenter *eServiceCenter::instance;
35 eServiceCenter::eServiceCenter()
41 eServiceCenter::~eServiceCenter()
47 DEFINE_REF(eServiceCenter);
49 RESULT eServiceCenter::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
51 std::map<int,ePtr<iServiceHandler> >::iterator i = handler.find(ref.type);
52 if (i == handler.end())
57 return i->second->play(ref, ptr);
60 RESULT eServiceCenter::record(const eServiceReference &ref, ePtr<iRecordableService> &ptr)
62 std::map<int,ePtr<iServiceHandler> >::iterator i = handler.find(ref.type);
63 if (i == handler.end())
68 return i->second->record(ref, ptr);
71 RESULT eServiceCenter::list(const eServiceReference &ref, ePtr<iListableService> &ptr)
73 std::map<int,ePtr<iServiceHandler> >::iterator i = handler.find(ref.type);
74 if (i == handler.end())
79 return i->second->list(ref, ptr);
82 RESULT eServiceCenter::addServiceFactory(int id, iServiceHandler *hnd)
84 handler.insert(std::pair<int,ePtr<iServiceHandler> >(id, hnd));
88 RESULT eServiceCenter::removeServiceFactory(int id)
94 eAutoInitP0<eServiceCenter> init_eServiceCenter(eAutoInitNumbers::service, "eServiceCenter");