我正在学习用 CORBA 编写数字媒体管理。我不知道如何实现方法 VMSgetMediaAvailable () raises (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- 声明,对吗?但我不知道我该怎么做。