コード例 #1
0
ファイル: SunJVMDLL.cpp プロジェクト: zach-m/davmail
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;
}
コード例 #2
0
 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");
 }
コード例 #3
0
    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;
    }