-
Notifications
You must be signed in to change notification settings - Fork 13
/
sendExpression.jl
89 lines (72 loc) · 2.83 KB
/
sendExpression.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#=
This file is part of OpenModelica.
Copyright (c) 1998-2023, Open Source Modelica Consortium (OSMC),
c/o Linköpings universitet, Department of Computer and Information Science,
SE-58183 Linköping, Sweden.
All rights reserved.
THIS PROGRAM IS PROVIDED UNDER THE TERMS OF THE BSD NEW LICENSE OR THE
GPL VERSION 3 LICENSE OR THE OSMC PUBLIC LICENSE (OSMC-PL) VERSION 1.2.
ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS PROGRAM CONSTITUTES
RECIPIENT'S ACCEPTANCE OF THE OSMC PUBLIC LICENSE OR THE GPL VERSION 3,
ACCORDING TO RECIPIENTS CHOICE.
The OpenModelica software and the OSMC (Open Source Modelica Consortium)
Public License (OSMC-PL) are obtained from OSMC, either from the above
address, from the URLs: http://www.openmodelica.org or
http://www.ida.liu.se/projects/OpenModelica, and in the OpenModelica
distribution. GNU version 3 is obtained from:
http://www.gnu.org/copyleft/gpl.html. The New BSD License is obtained from:
http://www.opensource.org/licenses/BSD-3-Clause.
This program is distributed WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, EXCEPT AS
EXPRESSLY SET FORTH IN THE BY RECIPIENT SELECTED SUBSIDIARY LICENSE
CONDITIONS OF OSMC-PL.
=#
"""
sendExpression(omc, expr; parsed=true)
Send API call to OpenModelica ZMQ server.
See [OpenModelica User's Guide Scripting API](https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/scripting_api.html)
for a complete list of all functions.
!!! note
Some characters in argument `expr` need to be escaped.
E.g. `"` becomes `\\"`.
For example scripting API call
```modelica
loadFile("/path/to/M.mo")
```
will translate to
```julia
sendExpression(omc, "loadFile(\\"/path/to/M.mo\\")")
```
!!! warn
On Windows path separation symbol `\\` needs to be escaped `\\\\`
or replaced to Unix style path `/` to prevent warnings.
```modelica
loadFile("C:\\\\path\\\\to\\\\M.mo")
```
translate to
```julia
sendExpression(omc, "loadFile(\\"C:\\\\\\\\path\\\\\\\\to\\\\\\\\M.mo\\")") # Windows
sendExpression(omc, "loadFile(\\"/c/path/to/M.mo\\")") # Windows
```
## Example
```julia
using OMJulia
omc = OMJulia.OMCSession()
OMJulia.sendExpression(omc, "getVersion()")
```
"""
function sendExpression(omc::OMCSession, expr::String; parsed=true)
if !process_running(omc.zmqSession.omcprocess)
return error("Process Exited, No connection with OMC. Create a new instance of OMCSession")
end
@debug "sending expression: $(expr)"
ZMQ.Sockets.send(omc.zmqSession.socket, expr)
@debug "Receiving message from ZMQ socket"
message = ZMQ.Sockets.recv(omc.zmqSession.socket)
@debug "Recieved message"
if parsed
return Parser.parseOM(unsafe_string(message))
else
return unsafe_string(message)
end
end