<div dir="ltr"><div>Here's a rundown of what I've learned and how to use it. It is used more extensively in MoleQueue. Right now, in Avogadro2, it looks like you can do two things: tell it to open a file, and send it a molecule in a byte stream for it to read and load.</div><div><br></div><div>Basic QJsonObject to be sent:</div><div>{</div><div>  { "jsonrpc" : "2.0" },</div><div>  { "id" : idNum }</div><div>}</div><div><br></div><div>The other current keys are "method" and "params".</div><div><br></div><div>Current options for "method":</div><div><br></div><div>"openFile" - tells Avogadro2 to open a file</div><div>"loadMolecule" - send molecule data using any supported Avogadro2 format to get Avogadro2 to set that as a new molecule<br></div><div><br></div><div>If the method is "openFile", then "params" needs to be set like this:</div><div>{</div><div>  { "fileName" : "thefilename" }</div><div>}</div><div><br></div><div>So the overall json looks like this:</div><div><br></div><div><div>{</div><div>  { "jsonrpc" : "2.0" },</div><div>  { "id" : idNum },</div><div>  { "method" : "openFile" },</div><div>  { "params" : </div><div>    {</div><div>      { "fileName" : "rutile.POSCAR" }</div><div>    }</div><div>  }</div><div>}</div></div><div><br></div><div>If the method is "loadMolecule", then "params" needs to be set like this:</div><div>{</div><div>  { "format" : "whateverFormat" },</div><div>  { "content" : "theData" }</div><div>}</div><div><br></div><div>So the overall json looks like this:</div><div><br></div><div><div>{</div><div>  { "jsonrpc" : "2.0" },</div><div>  { "id" : idNum },</div><div>  { "method" : "openFile" },</div><div>  { "params" : </div><div>    {</div><div>      { "format" : "POSCAR" },</div><div>      { "content" : "TiO2 rutile\n1.00000000\n2.95812000   0.00000000   0.00000000\n0.00000000   4.59373000   0.00000000\n0.00000000   0.00000000   4.59373000\nO   Ti\n4   2\nDirect\n0.00000000  0.30530000  0.30530000\n0.00000000  0.69470000  0.69470000\n0.50000000  0.19470000  0.80530000\n0.50000000  0.80530000  0.19470000\n0.00000000  0.00000000  0.00000000\n0.50000000  0.50000000  0.50000000" }</div><div>    }</div><div>  }</div><div>}</div></div><div><br></div><div>With the QJsonObject type, you can initialize QJsonObjects with a standard initializer like so:</div><div><br></div><div>QJsonObject jsonObject {</div><div>  { "jsonrpc", "2.0" },</div><div>  { "id", idNum }</div><div>};</div><div><br></div><div>Where you just use commas instead of colons.</div><div><br></div><div>To send and receive the data to the RPC, you need to use a QLocalSocket object, and you can follow methods in this class here: <a href="https://github.com/OpenChemistry/molequeue/blob/master/molequeue/client/jsonrpcclient.cpp">https://github.com/OpenChemistry/molequeue/blob/master/molequeue/client/jsonrpcclient.cpp</a></div><div><br></div><div>Basically, you have to connect the QLocalSocket like so: </div><div><br></div><div>QLocalSocket* socket = new QLocalSocket;</div><div>socket->connectToServer("serverName");</div><div><br></div><div>In our case, "serverName" is "avogadro".</div><div><br></div><div>You can create a QDataStream with the socket and send info to the socket that way.</div><div><br></div><div>QDataStream stream(socket);</div><div>stream << jsonData;</div><div><br></div><div>When you receive a signal back from the RPC server, the local socket will emit readyRead(), so if your class is a QObject, you can connect to it like so:</div><div><br></div><div> connect(socket, SIGNAL(readyRead()), this, SLOT(readSocket()));<br></div><div><br></div><div>Right now, Avogadro just communicates back error messages (I think). But we can eventually get it to send back other information too.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 4, 2017 at 5:40 PM, Geoffrey Hutchison <span dir="ltr"><<a href="mailto:geoff.hutchison@gmail.com" target="_blank">geoff.hutchison@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> I think I will be able to get this to work just fine. Thank you Marcus!<br>
<br>
</span>If so, do you think you could take some notes on this? (e.g., what methods are available)<br>
<br>
Thanks,<br>
-Geoff</blockquote></div><br></div>