Skip to content

Commit

Permalink
Allow APD data be accessed via thin client via Connection.get() (#2620)
Browse files Browse the repository at this point in the history
* Fix:Connection thread safe C++ object

Made now thread safe

* Fix

* Removed comments

* Feature:allow PAD data be returned by Connection.get

Implemented by retrieving serialized version and deserializing it locally
  • Loading branch information
GabrieleManduchi committed Sep 23, 2023
1 parent 21ead65 commit d996b0c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 7 deletions.
27 changes: 23 additions & 4 deletions java/mdsobjects/src/main/java/MDSplus/Connection.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,18 @@ public Data get(java.lang.String expr, Data args[]) throws MdsException
{
if (!checkArgs(args))
throw new MdsException(
"Invalid arguments: only scalars and arrays arguments can be passed to COnnection.get()");
return get(sockId, expr, args);
"Invalid arguments: only scalars and arrays arguments can be passed to Connection.get()");
java.lang.String expandedExpr = "serializeout(`("+expr+"))";
Data serData = get(sockId, expandedExpr, args);
return Data.deserialize(serData.getByteArray());

}

public Data get(java.lang.String expr) throws MdsException
{
return get(expr, new Data[0]);
java.lang.String expandedExpr = "serializeout(`("+expr+"))";
Data serData = get(sockId, expandedExpr, new Data[0]);
return Data.deserialize(serData.getByteArray());
}

public void put(java.lang.String path, java.lang.String expr, Data args[]) throws MdsException
Expand Down Expand Up @@ -145,7 +150,19 @@ public PutMany putMany()
{
return new PutManyInConnection();
}

public static void main(java.lang.String args[])
{
try {

MDSplus.Connection c = new MDSplus.Connection("localhost:8001");
c.openTree("test", -1);
System.out.println(c.get("anyapd"));
}catch(Exception exc)
{
System.out.println(exc);
}
}

////////// GetMany
class GetManyInConnection extends List implements GetMany
{
Expand Down Expand Up @@ -288,5 +305,7 @@ public void checkStatus(java.lang.String path) throws MdsException
throw new MdsException(retMsg.getString());
}
}



}
12 changes: 10 additions & 2 deletions mdsobjects/cpp/mdsipobjects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,8 +395,12 @@ Data *Connection::get(const char *expr, Data **args, int nArgs)
}

lockLocal();
std::string expExpr("serializeout(`(");
expExpr +=expr;
expExpr += "))";
status = SendArg(sockId, 0, DTYPE_CSTRING_IP, nArgs + 1,
std::string(expr).size(), 0, 0, (char *)expr);
expExpr.size(), 0, 0, (char *)expExpr.c_str());
// std::string(expr).size(), 0, 0, (char *)expr);
if (STATUS_NOT_OK)
{
unlockLocal();
Expand Down Expand Up @@ -519,7 +523,11 @@ Data *Connection::get(const char *expr, Data **args, int nArgs)

if (mem)
FreeMessage(mem);
return resData;

Data *deserData = deserialize(resData);
deleteData(resData);

return deserData;
}

void Connection::put(const char *inPath, char *expr, Data **args, int nArgs)
Expand Down
6 changes: 5 additions & 1 deletion python/MDSplus/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,12 +205,16 @@ def get(self, exp, *args, **kwargs):
args = kwargs['arglist']
timeout = kwargs.get('timeout', -1)
num = len(args)+1

exp = 'serializeout(`('+exp+'))'

exp = _ver.tobytes(exp)
_exc.checkStatus(_SendArg(self.conid, 0, 14, num,
len(exp), 0, 0, ctypes.c_char_p(exp)))
for i, arg in enumerate(args):
self._send_arg(arg, i+1, num)
return self._get_answer(timeout)
retSerialized = self._get_answer(timeout)
return retSerialized.deserialize()


class Connection(object):
Expand Down

0 comments on commit d996b0c

Please sign in to comment.