| 1 | // SampleManagedPlugin.h
|
|---|
| 2 |
|
|---|
| 3 | #pragma once
|
|---|
| 4 |
|
|---|
| 5 | #include <vcclr.h>
|
|---|
| 6 | #include <strEx.h>
|
|---|
| 7 | #using <mscorlib.dll>
|
|---|
| 8 | using namespace System;
|
|---|
| 9 | using namespace System::Runtime::InteropServices;
|
|---|
| 10 | using namespace System::Collections::Generic;
|
|---|
| 11 |
|
|---|
| 12 | template <class target>
|
|---|
| 13 | class SampleManagedPlugin {
|
|---|
| 14 | gcroot<target^> managedInstance;
|
|---|
| 15 | private:
|
|---|
| 16 | std::wstring strcvt(String^ str) {
|
|---|
| 17 | pin_ptr<const wchar_t> wch = PtrToStringChars(str);
|
|---|
| 18 | std::wstring ret = wch;
|
|---|
| 19 | return ret;
|
|---|
| 20 | }
|
|---|
| 21 | String^ strcvt(std::wstring str) {
|
|---|
| 22 | return Marshal::PtrToStringUni((IntPtr)const_cast<wchar_t*>(str.c_str()));
|
|---|
| 23 | }
|
|---|
| 24 | public:
|
|---|
| 25 | bool loadModule() {
|
|---|
| 26 | return managedInstance->loadModule();
|
|---|
| 27 | }
|
|---|
| 28 | bool unloadModule() {
|
|---|
| 29 | return managedInstance->unloadModule();
|
|---|
| 30 | }
|
|---|
| 31 |
|
|---|
| 32 | std::wstring getModuleName() {
|
|---|
| 33 | return strcvt(managedInstance->getModuleName());
|
|---|
| 34 | }
|
|---|
| 35 | std::wstring getModuleDescription() {
|
|---|
| 36 | return strcvt(managedInstance->getModuleDescription());
|
|---|
| 37 | }
|
|---|
| 38 | NSCModuleWrapper::module_version getModuleVersion() {
|
|---|
| 39 | gcroot<CsharpSamplePlugin::SamplePlugin::version^> v = managedInstance->getModuleVersion();
|
|---|
| 40 | NSCModuleWrapper::module_version version = {v->major, v->minor, v->revision};
|
|---|
| 41 | return version;
|
|---|
| 42 | }
|
|---|
| 43 |
|
|---|
| 44 | bool hasCommandHandler() {
|
|---|
| 45 | return managedInstance->hasCommandHandler();
|
|---|
| 46 | }
|
|---|
| 47 | bool hasMessageHandler() {
|
|---|
| 48 | return managedInstance->hasMessageHandler();
|
|---|
| 49 | }
|
|---|
| 50 | NSCAPI::nagiosReturn handleCommand(const strEx::blindstr command, const unsigned int argLen, TCHAR **char_args, std::wstring &message, std::wstring &perf) {
|
|---|
| 51 | String ^mCmd = strcvt(command.c_str());
|
|---|
| 52 | List<String^>^ args;
|
|---|
| 53 | for (int i=0;i<argLen;i++)
|
|---|
| 54 | args->Add(strcvt(char_args[i]));
|
|---|
| 55 | String ^mMsg;
|
|---|
| 56 | String ^mPerf;
|
|---|
| 57 | int ret = managedInstance->handleCommand(mCmd, args, mMsg, mPerf);
|
|---|
| 58 | message = strcvt(mMsg);
|
|---|
| 59 | perf = strcvt(mPerf);
|
|---|
| 60 | return ret;
|
|---|
| 61 | }
|
|---|
| 62 | };
|
|---|
| 63 |
|
|---|
| 64 | NSC_WRAPPERS_MAIN();
|
|---|
| 65 |
|
|---|