bool SunJVMDLL::run(const std::string& mainclass, bool waitDeath) { if (m_statusCode == SunJVMDLL::JVM_NOT_STARTED) instanciate(); if (m_statusCode == SunJVMDLL::JVM_LOADED) { JClassProxy disp(this, mainclass); jstring emptystr = newUTFString(std::string("")); jobjectArray mainargs = newObjectArray(m_arguments.size(), "java.lang.String", emptystr); for (int i =0; i<m_arguments.size(); i++) { env()->SetObjectArrayElement(mainargs, i, newUTFString(m_arguments[i])); } printf("arguments array = %d\n", mainargs); jvalue ma[1]; ma[0].l = mainargs; disp.invokeStatic(std::string("void main(java.lang.String[] args)"), ma); if (waitDeath == true) m_javavm->DestroyJavaVM(); return true; } return false; }
void Backend::buildCache() { for (auto module : modules) { if (module.second->getType() == "component") { // Creating component auto component = instanciate(module.first); component->compile(); delete component; } } getModel("anchor"); getModel("com"); }
Component *Backend::fromJson(Json::Value json, Robot *robot) { if (!json.isObject() || !json.isMember("component") || !json.isMember("parameters") || !json.isMember("anchors") || !json["component"].isString() || !json["parameters"].isObject() || !json["anchors"].isObject()) { std::stringstream ss; ss << "Malformed Json component"; throw ss.str(); } std::string component = json["component"].asString(); if (!modules.count(component)) { std::stringstream ss; ss << "Unknown component " << component; throw ss.str(); } Component *instance = instanciate(component); instance->parametersFromJson(json["parameters"]); instance->compile(robot); if (json.isMember("name")) { instance->name = json["name"].asString(); } if (json.isMember("tipName")) { instance->tipName = json["tipName"].asString(); } Json::Value &anchors = json["anchors"]; for (auto anchor : instance->anchors) { std::stringstream ss; ss << anchor->id; std::string id = ss.str(); if (anchors.isMember(id)) { int remote = anchors[id]["remote"].asInt(); Component *instance = Backend::fromJson(anchors[id]["component"], robot); if (anchors[id].isMember("zero")) { anchor->zero = anchors[id]["zero"].asFloat(); } if (anchors[id].isMember("orientationX")) { anchor->orientationX = anchors[id]["orientationX"].asFloat(); } if (anchors[id].isMember("orientationY")) { anchor->orientationY = anchors[id]["orientationY"].asFloat(); } if (anchors[id].isMember("orientationZ")) { anchor->orientationZ = anchors[id]["orientationZ"].asFloat(); } if (anchors[id].isMember("inverted")) { anchor->inverted = anchors[id]["inverted"].asBool(); } if (anchors[id].isMember("minimum")) { anchor->minimum = anchors[id]["minimum"].asFloat(); } if (anchors[id].isMember("maximum")) { anchor->maximum = anchors[id]["maximum"].asFloat(); } anchor->attach(instance->getAnchor(remote)); } } return instance; }