added namespace PLugin
This commit is contained in:
parent
0d52d3d5e6
commit
c9f68fb734
|
@ -4,6 +4,8 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
class Event {
|
class Event {
|
||||||
private:
|
private:
|
||||||
std::string name; //name of the event
|
std::string name; //name of the event
|
||||||
|
@ -19,4 +21,6 @@ public:
|
||||||
|
|
||||||
Event(JNIEnv* env, jobject jevent);
|
Event(JNIEnv* env, jobject jevent);
|
||||||
//virtual ~Event();
|
//virtual ~Event();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} //namespace Plugin
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#define DEB(A) ;
|
#define DEB(A) ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
extern jclass CPPPLUGINCLASS;
|
extern jclass CPPPLUGINCLASS;
|
||||||
extern jclass EVENTCLASS;
|
extern jclass EVENTCLASS;
|
||||||
extern jclass MAPCLASS;
|
extern jclass MAPCLASS;
|
||||||
|
@ -80,3 +82,5 @@ inline CppPlugin* getPlugin(int id) {
|
||||||
return getPlugin(0, 0, id);
|
return getPlugin(0, 0, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} //namespace Plugin
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
//fwd declr
|
//fwd declr
|
||||||
class CppPlugin;
|
class CppPlugin;
|
||||||
|
|
||||||
|
@ -65,7 +67,7 @@ enum Color : char {
|
||||||
ITALIC = 'o',
|
ITALIC = 'o',
|
||||||
RESET = 'r'
|
RESET = 'r'
|
||||||
};
|
};
|
||||||
const char COLORCHAR = '§';
|
const char COLORCHAR = '\xA7'; // §
|
||||||
inline std::string operator+(const Color c, const std::string& r) {
|
inline std::string operator+(const Color c, const std::string& r) {
|
||||||
std::string out(1, COLORCHAR);
|
std::string out(1, COLORCHAR);
|
||||||
return out + ((char) c) + r;
|
return out + ((char) c) + r;
|
||||||
|
@ -83,3 +85,6 @@ inline std::string operator+(const std::string& r, const Color c) {
|
||||||
inline std::string operator+(const char* r, const Color c) {
|
inline std::string operator+(const char* r, const Color c) {
|
||||||
return r + COLORCHAR + (char) c;
|
return r + COLORCHAR + (char) c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} //namespace Plugin
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
jobject Event::getMap(JNIEnv* env) {
|
jobject Event::getMap(JNIEnv* env) {
|
||||||
return env->GetObjectField(input, EVENTDATAF);
|
return env->GetObjectField(input, EVENTDATAF);
|
||||||
}
|
}
|
||||||
|
@ -70,4 +72,7 @@ Event::Event(JNIEnv* env, jobject jevent) {
|
||||||
jstring name = (jstring) env->GetObjectField(jevent, EVENTNAMEF);
|
jstring name = (jstring) env->GetObjectField(jevent, EVENTNAMEF);
|
||||||
this->name = std::string(env->GetStringUTFChars(name, 0));
|
this->name = std::string(env->GetStringUTFChars(name, 0));
|
||||||
input = jevent;
|
input = jevent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#include "libplugin.h"
|
#include "libplugin.h"
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
jclass CPPPLUGINCLASS;
|
jclass CPPPLUGINCLASS;
|
||||||
jclass EVENTCLASS;
|
jclass EVENTCLASS;
|
||||||
jclass MAPCLASS;
|
jclass MAPCLASS;
|
||||||
|
@ -116,190 +118,6 @@ void load(JNIEnv* env, long data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_init_1(JNIEnv* env, jclass pluginclass) {
|
|
||||||
load(env, JNI_ALL);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: loadPlugin
|
|
||||||
* Signature: (Ljava/lang/String;)Z
|
|
||||||
*/
|
|
||||||
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_loadPlugin(JNIEnv* env, jobject thisobj, jstring path) {
|
|
||||||
const char* cpath = env->GetStringUTFChars(path, 0);
|
|
||||||
|
|
||||||
//open plugin
|
|
||||||
DEB("open plugin " << cpath);
|
|
||||||
void* handle = dlopen(cpath, RTLD_LAZY);
|
|
||||||
if (!handle) {
|
|
||||||
std::cout << "could not create handle of: " << cpath << " error: " << dlerror() << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//throw std::string("Error: plugin could not be opend. ") + dlerror();
|
|
||||||
|
|
||||||
//load function pointer
|
|
||||||
initfptr initf = (initfptr) dlsym(handle, "init");
|
|
||||||
if(!initf) {
|
|
||||||
std::cout << "Could not find function init: " << dlerror() << std::endl;
|
|
||||||
dlclose(handle);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CppPlugin* plugin = initf();
|
|
||||||
DEB("Initilized");
|
|
||||||
|
|
||||||
plugin->handle = handle;
|
|
||||||
|
|
||||||
//set name / handle id
|
|
||||||
plugin->name = std::string(cpath);
|
|
||||||
plugin->name = plugin->name.substr(plugin->name.rfind('/')+1);
|
|
||||||
DEB("name set");
|
|
||||||
|
|
||||||
// add to vector
|
|
||||||
plugins.push_back(plugin);
|
|
||||||
int id = plugins.size()-1;
|
|
||||||
plugin->id = id;
|
|
||||||
DEB("plugin added to vector");
|
|
||||||
|
|
||||||
//store id
|
|
||||||
load(env, JNI_ALL);
|
|
||||||
env->SetIntField(thisobj, PLUGINIDF, id);
|
|
||||||
DEB("Internal id set");
|
|
||||||
|
|
||||||
return (bool) plugin; // converted to boolean here
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: onLoad
|
|
||||||
* Signature: ()V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onLoad(JNIEnv* env, jobject thisobj) {
|
|
||||||
DEB("lib::onLoad()");
|
|
||||||
getPlugin(env, thisobj)->onLoad(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: onEnable_
|
|
||||||
* Signature: ()V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onEnable_1(JNIEnv* env, jobject thisobj) {
|
|
||||||
DEB("lib::onEnable()");
|
|
||||||
getPlugin(env, thisobj)->onEnable(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: onDisable_
|
|
||||||
* Signature: ()V
|
|
||||||
*/
|
|
||||||
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onDisable_1(JNIEnv* env, jobject thisobj) {
|
|
||||||
//TODO
|
|
||||||
DEB("lib::onDisable()" );
|
|
||||||
CppPlugin* plugin = getPlugin(env, thisobj);
|
|
||||||
plugin->onDisable(env);
|
|
||||||
dlclose(plugin->handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: fireEvent
|
|
||||||
* Signature: (Lde/mrbesen/cppplugins/CppEvent;I)Lde/mrbesen/cppplugins/CppEvent;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jobject JNICALL Java_de_mrbesen_cppplugins_CppPlugin_fireEvent(JNIEnv* env, jobject thisobj, jobject jevent, jlong functionid) {
|
|
||||||
DEB("lib::fireEvent()" );
|
|
||||||
if(functionid == 0) {
|
|
||||||
DEB("invalid function id");
|
|
||||||
return jevent;
|
|
||||||
}
|
|
||||||
|
|
||||||
load(env, JNI_EVENT | JNI_MAP);
|
|
||||||
|
|
||||||
//cast function
|
|
||||||
eventfptr f = reinterpret_cast<eventfptr>(functionid);
|
|
||||||
|
|
||||||
//cast event
|
|
||||||
Event event(env, jevent);
|
|
||||||
|
|
||||||
//call it
|
|
||||||
f(env, getPlugin(env, thisobj), &event);
|
|
||||||
|
|
||||||
//put changed fields back in the jevent
|
|
||||||
event.reapply(env, jevent);
|
|
||||||
|
|
||||||
return jevent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: onCmd
|
|
||||||
* Signature: (Lorg/bukkit/command/CommandSender;Lorg/bukkit/command/Command;Ljava/lang/String;[Ljava/lang/String;J)Z
|
|
||||||
*/
|
|
||||||
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onCmd(JNIEnv* env, jclass cppplugin, jobject sender, jobject cmd, jstring label, jobjectArray args, jlong fid, jint pluginid) {
|
|
||||||
if(fid == 0) return false;
|
|
||||||
CppPlugin* plugin = getPlugin(pluginid);
|
|
||||||
|
|
||||||
//parse args
|
|
||||||
int argsize = env->GetArrayLength(args);
|
|
||||||
std::vector<std::string> cargs(argsize);
|
|
||||||
for(int i = 0; i < argsize; i++) {
|
|
||||||
jstring ar = (jstring) env->GetObjectArrayElement(args, i);
|
|
||||||
cargs[i] = env->GetStringUTFChars(ar, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//parse label
|
|
||||||
std::string clabel = env->GetStringUTFChars(label, 0);
|
|
||||||
|
|
||||||
//call function
|
|
||||||
cmdfptr cmdf = reinterpret_cast<cmdfptr>(fid);
|
|
||||||
bool result = false;
|
|
||||||
try {
|
|
||||||
result = cmdf(env, plugin, sender, cmd, clabel, cargs);
|
|
||||||
} catch(...) {
|
|
||||||
std::cout << "Error while executing Command " << clabel << " in plugin: " << plugin->name << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class: de_mrbesen_cppplugins_CppPlugin
|
|
||||||
* Method: getListener
|
|
||||||
* Signature: ()[Lde/mrbesen/cppplugins/CppPlugin/CppListener;
|
|
||||||
*/
|
|
||||||
JNIEXPORT jobjectArray JNICALL Java_de_mrbesen_cppplugins_CppPlugin_getListener(JNIEnv* env, jobject thisobj) {
|
|
||||||
load(env, JNI_LISTENER);
|
|
||||||
|
|
||||||
//call getEvents
|
|
||||||
std::map<std::string, eventfptr> events = getPlugin(env, thisobj)->getEvents();
|
|
||||||
DEB("found " << events.size() << " Events");
|
|
||||||
|
|
||||||
//create array
|
|
||||||
jobject initial = env->NewObject(LISTENERCLASS, LISTENERSMALLCONTR);
|
|
||||||
jobjectArray arr = env->NewObjectArray(events.size(), LISTENERCLASS, initial);
|
|
||||||
|
|
||||||
DEB("populate array");
|
|
||||||
//populate array
|
|
||||||
int i = 0;
|
|
||||||
for(auto it : events) {
|
|
||||||
//create object
|
|
||||||
jstring eventname = env->NewStringUTF(it.first.c_str());
|
|
||||||
jobject listener = env->NewObject(LISTENERCLASS, LISTENERCONTR, eventname, it.second);
|
|
||||||
env->DeleteLocalRef(eventname);
|
|
||||||
|
|
||||||
//set array
|
|
||||||
env->SetObjectArrayElement(arr, i++, listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
DEB("Array finished");
|
|
||||||
|
|
||||||
return arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool registerCmd(JNIEnv* env, CppPlugin* plugin, std::string& cname, cmdfptr function) {
|
bool registerCmd(JNIEnv* env, CppPlugin* plugin, std::string& cname, cmdfptr function) {
|
||||||
DEB("Register Cmd " + cname + " for " + plugin->name);
|
DEB("Register Cmd " + cname + " for " + plugin->name);
|
||||||
load(env, JNI_BUKKITCLASS | JNI_SERVERCMDMAPFIELD | JNI_CMDCONSTR | JNI_CMDMAPREGISTERMETH);
|
load(env, JNI_BUKKITCLASS | JNI_SERVERCMDMAPFIELD | JNI_CMDCONSTR | JNI_CMDMAPREGISTERMETH);
|
||||||
|
@ -326,3 +144,190 @@ void send(JNIEnv* env, jobject sender, const char* text) {
|
||||||
env->DeleteLocalRef(jtext);
|
env->DeleteLocalRef(jtext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} //namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_init_1(JNIEnv* env, jclass pluginclass) {
|
||||||
|
Plugin::load(env, Plugin::JNI_ALL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: loadPlugin
|
||||||
|
* Signature: (Ljava/lang/String;)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_loadPlugin(JNIEnv* env, jobject thisobj, jstring path) {
|
||||||
|
const char* cpath = env->GetStringUTFChars(path, 0);
|
||||||
|
|
||||||
|
//open plugin
|
||||||
|
DEB("open plugin " << cpath);
|
||||||
|
void* handle = dlopen(cpath, RTLD_LAZY);
|
||||||
|
if (!handle) {
|
||||||
|
std::cout << "could not create handle of: " << cpath << " error: " << dlerror() << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//throw std::string("Error: plugin could not be opend. ") + dlerror();
|
||||||
|
|
||||||
|
//load function pointer
|
||||||
|
Plugin::initfptr initf = (Plugin::initfptr) dlsym(handle, "init");
|
||||||
|
if(!initf) {
|
||||||
|
std::cout << "Could not find function init: " << dlerror() << std::endl;
|
||||||
|
dlclose(handle);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Plugin::CppPlugin* plugin = initf();
|
||||||
|
DEB("Initilized");
|
||||||
|
|
||||||
|
plugin->handle = handle;
|
||||||
|
|
||||||
|
//set name / handle id
|
||||||
|
plugin->name = std::string(cpath);
|
||||||
|
plugin->name = plugin->name.substr(plugin->name.rfind('/')+1);
|
||||||
|
DEB("name set");
|
||||||
|
|
||||||
|
// add to vector
|
||||||
|
Plugin::plugins.push_back(plugin);
|
||||||
|
int id = Plugin::plugins.size()-1;
|
||||||
|
plugin->id = id;
|
||||||
|
DEB("plugin added to vector");
|
||||||
|
|
||||||
|
//store id
|
||||||
|
Plugin::load(env,Plugin:: JNI_ALL);
|
||||||
|
env->SetIntField(thisobj,Plugin:: PLUGINIDF, id);
|
||||||
|
DEB("Internal id set");
|
||||||
|
|
||||||
|
return (bool) plugin; // converted to boolean here
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: onLoad
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onLoad(JNIEnv* env, jobject thisobj) {
|
||||||
|
DEB("lib::onLoad()");
|
||||||
|
Plugin::getPlugin(env, thisobj)->onLoad(env);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: onEnable_
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onEnable_1(JNIEnv* env, jobject thisobj) {
|
||||||
|
DEB("lib::onEnable()");
|
||||||
|
Plugin::getPlugin(env, thisobj)->onEnable(env);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: onDisable_
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onDisable_1(JNIEnv* env, jobject thisobj) {
|
||||||
|
//TODO
|
||||||
|
DEB("lib::onDisable()" );
|
||||||
|
Plugin::CppPlugin* plugin = Plugin::getPlugin(env, thisobj);
|
||||||
|
plugin->onDisable(env);
|
||||||
|
dlclose(plugin->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: fireEvent
|
||||||
|
* Signature: (Lde/mrbesen/cppplugins/CppEvent;I)Lde/mrbesen/cppplugins/CppEvent;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_de_mrbesen_cppplugins_CppPlugin_fireEvent(JNIEnv* env, jobject thisobj, jobject jevent, jlong functionid) {
|
||||||
|
DEB("lib::fireEvent()" );
|
||||||
|
if(functionid == 0) {
|
||||||
|
DEB("invalid function id");
|
||||||
|
return jevent;
|
||||||
|
}
|
||||||
|
|
||||||
|
Plugin::load(env, Plugin::JNI_EVENT | Plugin::JNI_MAP);
|
||||||
|
|
||||||
|
//cast function
|
||||||
|
Plugin::eventfptr f = reinterpret_cast<Plugin::eventfptr>(functionid);
|
||||||
|
|
||||||
|
//cast event
|
||||||
|
Plugin::Event event(env, jevent);
|
||||||
|
|
||||||
|
//call it
|
||||||
|
f(env, Plugin::getPlugin(env, thisobj), &event);
|
||||||
|
|
||||||
|
//put changed fields back in the jevent
|
||||||
|
event.reapply(env, jevent);
|
||||||
|
|
||||||
|
return jevent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: onCmd
|
||||||
|
* Signature: (Lorg/bukkit/command/CommandSender;Lorg/bukkit/command/Command;Ljava/lang/String;[Ljava/lang/String;J)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_de_mrbesen_cppplugins_CppPlugin_onCmd(JNIEnv* env, jclass cppplugin, jobject sender, jobject cmd, jstring label, jobjectArray args, jlong fid, jint pluginid) {
|
||||||
|
if(fid == 0) return false;
|
||||||
|
Plugin::CppPlugin* plugin = Plugin::getPlugin(pluginid);
|
||||||
|
|
||||||
|
//parse args
|
||||||
|
int argsize = env->GetArrayLength(args);
|
||||||
|
std::vector<std::string> cargs(argsize);
|
||||||
|
for(int i = 0; i < argsize; i++) {
|
||||||
|
jstring ar = (jstring) env->GetObjectArrayElement(args, i);
|
||||||
|
cargs[i] = env->GetStringUTFChars(ar, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//parse label
|
||||||
|
std::string clabel = env->GetStringUTFChars(label, 0);
|
||||||
|
|
||||||
|
//call function
|
||||||
|
Plugin::cmdfptr cmdf = reinterpret_cast<Plugin::cmdfptr>(fid);
|
||||||
|
bool result = false;
|
||||||
|
try {
|
||||||
|
result = cmdf(env, plugin, sender, cmd, clabel, cargs);
|
||||||
|
} catch(...) {
|
||||||
|
std::cout << "Error while executing Command " << clabel << " in plugin: " << plugin->name << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: de_mrbesen_cppplugins_CppPlugin
|
||||||
|
* Method: getListener
|
||||||
|
* Signature: ()[Lde/mrbesen/cppplugins/CppPlugin/CppListener;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobjectArray JNICALL Java_de_mrbesen_cppplugins_CppPlugin_getListener(JNIEnv* env, jobject thisobj) {
|
||||||
|
Plugin::load(env, Plugin::JNI_LISTENER);
|
||||||
|
|
||||||
|
//call getEvents
|
||||||
|
std::map<std::string, Plugin::eventfptr> events = Plugin::getPlugin(env, thisobj)->getEvents();
|
||||||
|
DEB("found " << events.size() << " Events");
|
||||||
|
|
||||||
|
//create array
|
||||||
|
jobject initial = env->NewObject(Plugin::LISTENERCLASS, Plugin::LISTENERSMALLCONTR);
|
||||||
|
jobjectArray arr = env->NewObjectArray(events.size(), Plugin::LISTENERCLASS, initial);
|
||||||
|
|
||||||
|
DEB("populate array");
|
||||||
|
//populate array
|
||||||
|
int i = 0;
|
||||||
|
for(auto it : events) {
|
||||||
|
//create object
|
||||||
|
jstring eventname = env->NewStringUTF(it.first.c_str());
|
||||||
|
jobject listener = env->NewObject(Plugin::LISTENERCLASS, Plugin::LISTENERCONTR, eventname, it.second);
|
||||||
|
env->DeleteLocalRef(eventname);
|
||||||
|
|
||||||
|
//set array
|
||||||
|
env->SetObjectArrayElement(arr, i++, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEB("Array finished");
|
||||||
|
|
||||||
|
return arr;
|
||||||
|
}
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace Plugin {
|
||||||
|
|
||||||
void CppPlugin::onLoad(JNIEnv*) {
|
void CppPlugin::onLoad(JNIEnv*) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,4 +23,7 @@ std::map<std::string, eventfptr> CppPlugin::getEvents() {
|
||||||
|
|
||||||
CppPlugin::~CppPlugin() {
|
CppPlugin::~CppPlugin() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} //namespace
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
using namespace Plugin;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
class SimplePlugin : public CppPlugin {
|
class SimplePlugin : public CppPlugin {
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
using namespace Plugin;
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
class EventsPlugin : public CppPlugin {
|
class EventsPlugin : public CppPlugin {
|
||||||
|
|
|
@ -5,8 +5,9 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
extern "C" {
|
using namespace Plugin;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
bool hicmd(JNIEnv* env, CppPlugin* plugin, jobject sender, jobject cmd, std::string& label, std::vector<std::string>& args) {
|
bool hicmd(JNIEnv* env, CppPlugin* plugin, jobject sender, jobject cmd, std::string& label, std::vector<std::string>& args) {
|
||||||
std::cout << "HICMD::hi " << label << " argsize: " << args.size() << std::endl;
|
std::cout << "HICMD::hi " << label << " argsize: " << args.size() << std::endl;
|
||||||
|
|
Loading…
Reference in New Issue