我正在学习用CORBA编写数字媒体管理。 我不知道如何实现Method VMSgetMediaAvailable()引发(ServerException)。
以下是VMS.idl :
module VMS {
enum Genre { g_undefined, SciFi, Comedy, Action, Horror, Docu };
enum StatusType { s_undefined, available, lent };
struct VMSMedia {
long ObjectId;
long ProviderId;
Genre Type;
string Title;
string ProductionCountry;
short ProductionYear;
short Length;
StatusType Status;
};
struct VMSProvider {
long ObjectId;
string Name;
string FirstName;
long ZIPCode; /* short does not work */
string Address;
};
exception ServerException {
string reason;
};
typedef sequence<VMSMedia> VMSMediaSeq;
typedef sequence<VMSProvider> VMSProviderSeq;
interface VMSRepository {
readonly attribute long currentMaxProviderId;
readonly attribute long currentMaxMediaId;
oneway void save ();
oneway void addProvider (in VMSProvider p);
oneway void delProvider (in long id);
VMSProvider getProvider (in long id)
raises (ServerException);
VMSProviderSeq getProviders ()
raises (ServerException);
oneway void addMedia (in VMSMedia p);
oneway void delMedia (in long id);
VMSMedia getMedia (in long id)
raises (ServerException);
VMSMediaSeq getMediaOfType (in Genre type)
raises (ServerException);
VMSMediaSeq getMediaYoungerThan (in short year)
raises (ServerException);
//here new Method
VMSMediaSeq getMediaAvailable () raises
(ServerException);
};
};
我所拥有的就是Class Repository_i.cc:
void
VMSRepository_i::VMSMediaSeq getMediaAvailable () {
}
我知道我必须在该IDL文件中创建一个新的Stub和一个新的Skelton,我必须实现这个方法。 我需要询问是否有可用的媒体,所以我必须做一个if-声明对吗? 但我不知道如何做到这一点。
答案 0 :(得分:0)
getMediaAvailable()
实施将需要填充
的序列
struct VMSMedia
。您必须使用OS /库调用来找出可用的内容并填充序列。
谷歌周围要了解如何在CORBA中填充序列,这不会很难。