<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=text/html;charset=iso-8859-1 http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 9.00.7930.16421"></HEAD>
<BODY style="PADDING-LEFT: 10px; PADDING-RIGHT: 10px; PADDING-TOP: 15px"
id=MailContainerBody leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV><FONT face=Calibri>Hi,</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>I'm working on C# bindings. The goal is to obtain a more
C# API for the API users.</FONT></DIV>
<DIV><FONT face=Calibri>So I have create object for libvirt familly function (an
object Connect, Domain, Storage and so on).</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>All is almost done, but I need and advice about the way
to handle object properties. For example, for the Connect object, I expose a
"RunningDomains" property that can be used in this manner :</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>Connect myConn = new
Connect("qemu+tcp://192.168.220.198/system");</FONT></DIV>
<DIV><FONT face=Calibri>List<Domain> runningDomains =
myConn.RunningsDomains;</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT face=Calibri>In the Connect object, the property "RunningDomains" is
coded in this :</FONT></DIV>
<DIV><FONT face=Calibri></FONT> </DIV>
<DIV><FONT color=#808080 size=2 face=Consolas><FONT color=#808080 size=2
face=Consolas><FONT color=#808080 size=2 face=Consolas>
<P>///</FONT></FONT></FONT><FONT color=#008000 size=2 face=Consolas><FONT
color=#008000 size=2 face=Consolas><FONT color=#008000 size=2 face=Consolas>
</FONT></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT
color=#808080 size=2 face=Consolas><FONT color=#808080 size=2
face=Consolas><summary></P></FONT></FONT></FONT><FONT size=2
face=Consolas><FONT size=2 face=Consolas>
<P></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT color=#808080
size=2 face=Consolas><FONT color=#808080 size=2
face=Consolas>///</FONT></FONT></FONT><FONT color=#008000 size=2
face=Consolas><FONT color=#008000 size=2 face=Consolas><FONT color=#008000
size=2 face=Consolas> Get the list of running
domains</P></FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>
<P></FONT></FONT><FONT color=#808080 size=2 face=Consolas><FONT color=#808080
size=2 face=Consolas><FONT color=#808080 size=2
face=Consolas>///</FONT></FONT></FONT><FONT color=#008000 size=2
face=Consolas><FONT color=#008000 size=2 face=Consolas><FONT color=#008000
size=2 face=Consolas> </FONT></FONT></FONT><FONT color=#808080 size=2
face=Consolas><FONT color=#808080 size=2 face=Consolas><FONT color=#808080
size=2 face=Consolas></summary></P></FONT></FONT></FONT><FONT size=2
face=Consolas><FONT size=2 face=Consolas>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas>public</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas> </FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2
face=Consolas>List</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas><</FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>> RunningDomains</P>
<P>{</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas> get</P></FONT></FONT></FONT><FONT size=2
face=Consolas><FONT size=2 face=Consolas>
<P> {</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas> if</FONT></FONT></FONT><FONT
size=2 face=Consolas><FONT size=2 face=Consolas> (_conn == </FONT></FONT><FONT
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2
face=Consolas><FONT color=#2b91af size=2
face=Consolas>IntPtr</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>.Zero) </FONT></FONT><FONT color=#0000ff size=2
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas>return</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT
size=2 face=Consolas> </FONT></FONT><FONT color=#0000ff size=2
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas>null</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT
size=2 face=Consolas>;</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas> int</FONT></FONT></FONT><FONT
size=2 face=Consolas><FONT size=2 face=Consolas> nbRunningDomain =
NumOfDomains(_conn);</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas> int</FONT></FONT></FONT><FONT
size=2 face=Consolas><FONT size=2 face=Consolas>[] runningDomainIds =
</FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas>new</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas> </FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT
color=#0000ff size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas>int</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>[nbRunningDomain];</P>
<P> ListDomains(_conn,
runningDomainIds, nbRunningDomain);</P>
<P></FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas> return</FONT></FONT></FONT><FONT
size=2 face=Consolas><FONT size=2 face=Consolas> runningDomainIds.Select(id
=> </FONT></FONT><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas><FONT color=#0000ff size=2
face=Consolas>new</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas> </FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>(</FONT></FONT><FONT color=#2b91af size=2 face=Consolas><FONT
color=#2b91af size=2 face=Consolas><FONT color=#2b91af size=2
face=Consolas>Domain</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT size=2
face=Consolas>.LookupByID(_conn, id), </FONT></FONT><FONT color=#0000ff size=2
face=Consolas><FONT color=#0000ff size=2 face=Consolas><FONT color=#0000ff
size=2 face=Consolas>this</FONT></FONT></FONT><FONT size=2 face=Consolas><FONT
size=2 face=Consolas>)).ToList();</P>
<P> }</P>
<P>}</P>
<P> </P>
<P><FONT size=3 face=Calibri>So the property call "virConnectNumOfDomains" and
"virConnectListDomains" each time the property is called. And I don't know if it
is a good thing. The other way, is to keep the list in the Connect object and
handle domain adding or removing in this via callbacks. This avoid multiple call
to the librar.</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Any advice ?</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Regards,</FONT></P>
<P><FONT size=3 face=Calibri></FONT> </P>
<P><FONT size=3 face=Calibri>Arnaud</FONT></P></FONT></FONT></DIV></BODY></HTML>