import java.net.URL;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
+import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
simulatorFMIUrl = FileLocator.find(b, new Path("libraries/FMUSimulator.dll"), null);
} else if(env.os == OSType.LINUX) {
sharedFMILIBUrl = FileLocator.find(b, new Path("libraries/libfmilib_shared.so"), null);
- simulatorFMIUrl = FileLocator.find(b, new Path("libraries/FMUSimulator.so"), null);
+ simulatorFMIUrl = FileLocator.find(b, new Path("libraries/libFMUSimulator.so"), null);
}
libraries[0] = new File(FileLocator.toFileURL(sharedFMILIBUrl).getPath());
}
public boolean subscribe(String name) throws FMILException {
- // Safety check
- int vr = variableMap.get(name);
- if(vr == 0) return false;
- if(!subscriptionSet.add(name)) return false;
- subscribedNames.add(name);
- System.err.println("subscribed : " + name + " => " + subscribedNames.size());
- subscription.add(vr);
- subscribe(new int[] { vr });
- return true;
+ synchronized(syncObject) {
+ // Safety check
+ int vr = variableMap.get(name);
+ if(vr == 0) return false;
+ if(!subscriptionSet.add(name)) return false;
+ subscribedNames.add(name);
+ subscription.add(vr);
+ subscribe(new int[] { vr });
+ return true;
+ }
}
public FMIL() {
fmuN = 0;
}
- File tempDir = new File(fmuDir);
- if(tempDir.isDirectory()) {
+ java.nio.file.Path tempDir = Paths.get(fmuDir);
+ if(Files.exists(tempDir) && Files.isDirectory(tempDir)) {
try {
- FileUtils.deleteAll(tempDir);
+ FileUtils.emptyDirectory(tempDir);
} catch (IOException e) {
- throw new FMILException("Could not create temp folder for fmu");
+ throw new FMILException("Could not delete existing files from temp folder for fmu " + path, e);
}
- tempDir.mkdir();
} else {
- tempDir.mkdir();
+ try {
+ Files.createDirectory(tempDir);
+ } catch (IOException e) {
+ throw new FMILException("Could not create temp folder for fmu " + path, e);
+ }
}
-
try {
- String tmpPath = tempDir.getAbsolutePath();
- if(!tmpPath.endsWith("\\"))
- tmpPath = tmpPath + "\\";
+ String tmpPath = tempDir.toString();
+ if(!tmpPath.endsWith("\\") && !tmpPath.endsWith("/"))
+ tmpPath = tmpPath + "/";
id = loadFMUFile_(path, tmpPath);
getAllVariables();
} catch (UnsatisfiedLinkError err) {
throw new FMILException(UNSATISFIED_LINK, err);
} catch (Exception e) {
+ LOGGER.error(e.getMessage());
throw new FMILException(e.getMessage());
}
}
synchronized(syncObject) {
try {
-
+
double[] results = new double[subscription.size()];
- return getSubscribedResults_(getModelIDNew(), results);
-
+ Arrays.fill(results, Double.NaN);
+
+ return getSubscribedResults_(getModelIDNew(), results);
} catch (UnsatisfiedLinkError err) {
throw new FMILException(UNSATISFIED_LINK);
} catch (Exception e) {