0

我正在学习用 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- 声明,对吗?但我不知道我该怎么做。

4

1 回答 1

0

getMediaAvailable()实现将需要填充
struct VMSMedia. 您必须使用操作系统/库调用来找出可用的内容并填充序列。

Google 四处寻找如何在 CORBA 中填充序列,这并不难。

于 2013-06-19T07:45:18.490 回答